softmax_cross_entropyでのエラーについて

2,155 views
Skip to first unread message

KODA

unread,
Oct 14, 2015, 4:37:14 AM10/14/15
to Chainer User Group
こんにちは。
以前ここでお世話になりました江田です。
今日は、softmax_cross_entropyで出力されてしまうエラーの解決方法についてお聞きしたく、投稿させて頂きました。
またしても初歩的な質問となってしまいますが、どうぞお付き合い願います。

出力層を0と1の2つのノードにし、クラス分類をしたいのですが、
Traceback (most recent call last):
  File "class.py", line 133, in <module>
    loss, acc = forward(x_batch, y_batch)
  File "class.py", line 89, in forward
    return F.softmax_cross_entropy(y, t), F.accuracy(y, t)
  File "build/bdist.linux-x86_64/egg/chainer/functions/softmax_cross_entropy.py", line 149, in softmax_cross_entropy
  File "build/bdist.linux-x86_64/egg/chainer/function.py", line 164, in __call__
  File "build/bdist.linux-x86_64/egg/chainer/function.py", line 191, in _check_data_type_forward
  File "build/bdist.linux-x86_64/egg/chainer/functions/softmax_cross_entropy.py", line 28, in check_type_forward
  File "build/bdist.linux-x86_64/egg/chainer/utils/type_check.py", line 457, in expect
  File "build/bdist.linux-x86_64/egg/chainer/utils/type_check.py", line 428, in expect
chainer.utils.type_check.InvalidType: Expect: in_types[1].ndim == in_types[0].ndim - 1
Actual: 2 != 1
というエラーが出てしまいます。
このときの正解データtは、
[[1 0]
 [1 0]
 [1 0]
 [1 0]]
という正解の方に1を立てた形で入れていたので、正解の値(0か1)のみで再度挑戦してみましたが、同じエラーが出てしまいました。

正解データは、txtファイルに0\n1\n0\n...というように書かれており、それをnp.loadtxtで読み込んでいます。
学習部分のプログラムはmnistの例と同じように書き、mnistではうまく動いているので、
正解データの作り方、入力の仕方が間違っているために2次元になってしまうのかなと考えたのですが…。
ご助言頂けたら幸いです。
どうぞ宜しくお願い申し上げます。

kitanokumo

unread,
Oct 14, 2015, 11:14:27 AM10/14/15
to Chainer User Group
これだったらどうでしょうか?
[1 0 0 1]

softmax_cross_entropyで与える正解データは1次元のintになるはずです。
もしバッチ処理をしている場合はそれが連なって[1 0 0 1]に。
これでもエラーが出るようならもっと詳細なコード、入力データを書いて頂ければ自分も試してみます。
参考になれば幸いです。

KODA

unread,
Oct 25, 2015, 10:19:19 PM10/25/15
to Chainer User Group
kitanokumo 様

返信頂き、ありがとうございます。
また、お返事が遅くなってしまい、申し訳ございません。

正解データを1次元で取り込むように書いていたつもりでしたが、
うまく取り込めていなかったようで、書き方を変えてみたらうまく動かせることができました。
いろいろ試し考える中で混乱していっていたので、kitoanokumo様のご助言で
softmax_cross_entropyへの正解データの入力が1次元であることを確認でき、
解決への糸口となりました。

お忙しい中、本当にありがとうございました。
今後とも、どうぞよろしくお願い申し上げます。

江田

2015年10月15日木曜日 0時14分27秒 UTC+9 kitanokumo:
Reply all
Reply to author
Forward
0 new messages