『ゼロから作るディープラーニング 第4章』、『4.2.4 【バッチ対応版】 交差エントロピー誤差』の下半分のコード理解出来なくなりました。
python
1def cross_entropy_error(y, t): 2 if y.ndim == 1: 3 t = t.reshape(1, t.size) 4 y = y.reshape(1, y.size) 5 batch_size = y.shape[0] 6 return -np.sum(np.log(y[np.arange(batch_size), t] + 1e-7)) / batch_size
最終行で使われている、
python
1-np.sum(np.log(y[np.arange(batch_size), t] + 1e-7)) ・・・①とする。
の挙動が分かりません。
例えば、
python
1np.arange(5) = np.array([0,1,2,3,4]) 2y = np.random.rand(100, 784) ※学習データ(28*28の画像データが100セット) 3t = np.random.rand(100, 10) ※ラベル形式の教師データ 4batch_size = 100
とした場合、①のコードは、
python
1-np.sum(np.log(y[np.array[0,1,2, .. , 99]), np.random.rand(100, 10)] + 1e-7))
になるかと思います。
しかしこのコードを実行すると、
python
1>>> -np.sum(np.log(y[np.arange(100), t] + 1e-7)) 2Traceback (most recent call last): 3 File "<stdin>", line 1, in <module> 4IndexError: arrays used as indices must be of integer (or boolean) type
というエラーが発生してしまいます。
python
1IndexError: arrays used as indices must be of integer (or boolean) type
というのは、「インデックスとして使われる配列は、数値型orブーリアン型じゃないと駄目」という事かと思いますが、この記法は正しいのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/19 05:31
2018/11/19 06:12