質問: Deep Learning Tutorialsのロジスティック回帰を読んでいます。 ロジスティック回帰での尤度関数を計算する部分。 ``` -T.mean(T.log(self.p_y_given_x)[T.arange(y.shape[0]), y]) ``` ここの T.arange についてなのですが Theano の arange は Numpy と同じように0〜nのベクトルを作成するのでしょうか? ``` print T.arange(10) ``` として、配列が作成されるか確認しましたが ARange.0 と出力され、どのように動作しているのかわかりません。 質問したい点は以下です。 - theano.tensor.arangeの動作について - printした際の出力の意味 よろしくお願いします。
回答: 基本的な機能は numpy の arange と同じで、始点・終点・増分を指定して array を生成します。 python 組み込み関数である range の numpy 版、theano 版とでも言いましょうか。 numpy.arange document を見てもらえれば分かると思いますが、 ``` >>> np.arange(3) # 長さ 3 の int 型の array を生成 array([0, 1, 2]) >>> np.arange(3.0) # 長さ 3 の double 型の array を生成 array([ 0., 1., 2.]) >>> np.arange(3,7) # [3, 7) の int 型の array を生成 array([3, 4, 5, 6]) >>> np.arange(3,7,2) # [3, 7) の 2 増分の int 型の array を生成 array([3, 5]) ``` という風に使用します。 ただし theano の場合は theano の表現にエンコードされ、普通に `print` すると `ARange.0` と出力されます。 内部の値を参照したい時は ``` >>> T.arange(5).eval() array([0, 1, 2, 3, 4], dtype=int8) ``` と最後に `eval()` を付けます。