現在、CNNを用いて画像の2値分類を実行しようとしています。
画像は縦5横20チャンネル数3で、それぞれに0か1が割り当てられています。
またそれぞれの画像は1枚ずつあります(訓練データの数は2つ)。
実行したコードは下記のものです。
python
1class MyChain(Chain): 2 def __init__(self): 3 super(MyChain, self).__init__( 4 cn1 = L.Convolution2D(3,8,(2,3),stride=1,pad=1), 5 cn2 = L.Convolution2D(8,16,(2,3),stride=1,pad=1), 6 l1 = L.Linear(160,100), 7 l2 = L.Linear(100,2) 8 ) 9 10 def __call__(self,x,t): 11 return F.softmax_cross_entropy(self.fwd(x),t) 12 13 def fwd(self,x): 14 h1 = F.max_pooling_2d(F.relu(self.cn1(x)),2) #8*3*10 15 h2 = F.max_pooling_2d(F.relu(self.cn2(h1)),2) #16*2*5 16 h3 = F.dropout(F.relu(self.l1(h2))) 17 return self.l2(h3) 18 19xtrain, ytrain = mydata_chainer() 20 21model = MyChain() 22optimizer = optimizers.Adam() 23optimizer.setup(model) 24 25train = datasets.tuple_dataset.TupleDataset(xtrain, ytrain) 26 27iterator = iterators.SerialIterator(train, 2) 28updater = training.StandardUpdater(iterator, optimizer) 29trainer = training.Trainer(updater, (1000, 'epoch')) 30 31trainer.extend(extensions.ProgressBar()) 32trainer.run() 33
また、xtrain,ytrainは、下記のようになっています。
python
1xtrain.shape = (2, 3, 5, 20) 2ytrain.shape = (2, 1)
上記のコードを実行すると以下のようなエラーが発生してしまいます。
python
1Exception in main training loop: 2Invalid operation is performed in: SoftmaxCrossEntropy (Forward) 3 4Expect: in_types[1].dtype.kind == i 5Actual: f != i 6Traceback (most recent call last): 7 File "/usr/local/lib/python3.6/site-packages/chainer/training/trainer.py", line 299, in run 8 update() 9 File "/usr/local/lib/python3.6/site-packages/chainer/training/updater.py", line 223, in update 10 self.update_core() 11 File "/usr/local/lib/python3.6/site-packages/chainer/training/updater.py", line 234, in update_core 12 optimizer.update(loss_func, *in_arrays) 13 File "/usr/local/lib/python3.6/site-packages/chainer/optimizer.py", line 534, in update 14 loss = lossfun(*args, **kwds) 15 File "MyChain.py", line 26, in __call__ 16 return F.softmax_cross_entropy(self.fwd(x),t) 17 File "/usr/local/lib/python3.6/site-packages/chainer/functions/loss/softmax_cross_entropy.py", line 380, in 18 softmax_cross_entropy 19 normalize, cache_score, class_weight, ignore_label, reduce)(x, t) 20 File "/usr/local/lib/python3.6/site-packages/chainer/function.py", line 226, in __call__ 21 ret = node.apply(inputs) 22 File "/usr/local/lib/python3.6/site-packages/chainer/function_node.py", line 228, in apply 23 self._check_data_type_forward(in_data) 24 File "/usr/local/lib/python3.6/site-packages/chainer/function_node.py", line 296, in _check_data_type_forwa 25rd 26 self.check_type_forward(in_type) 27 File "/usr/local/lib/python3.6/site-packages/chainer/function.py", line 126, in check_type_forward 28 self._function.check_type_forward(in_types) 29 File "/usr/local/lib/python3.6/site-packages/chainer/functions/loss/softmax_cross_entropy.py", line 77, in 30check_type_forward 31 x_type.shape[2:] == t_type.shape[1:], 32 File "/usr/local/lib/python3.6/site-packages/chainer/utils/type_check.py", line 519, in expect 33 expr.expect() 34 File "/usr/local/lib/python3.6/site-packages/chainer/utils/type_check.py", line 477, in expect 35 '{0} {1} {2}'.format(left, self.inv, right)) 36Will finalize trainer extensions and updater before reraising the exception. 37Traceback (most recent call last): 38 File "MyChain.py", line 52, in <module> 39 trainer.run() 40 File "/usr/local/lib/python3.6/site-packages/chainer/training/trainer.py", line 313, in run 41 six.reraise(*sys.exc_info()) 42 File "/usr/local/lib/python3.6/site-packages/six.py", line 693, in reraise 43 raise value 44 File "/usr/local/lib/python3.6/site-packages/chainer/training/trainer.py", line 299, in run 45 update() 46 File "/usr/local/lib/python3.6/site-packages/chainer/training/updater.py", line 223, in update 47 self.update_core() 48 File "/usr/local/lib/python3.6/site-packages/chainer/training/updater.py", line 234, in update_core 49 optimizer.update(loss_func, *in_arrays) 50 File "/usr/local/lib/python3.6/site-packages/chainer/optimizer.py", line 534, in update 51 loss = lossfun(*args, **kwds) 52 File "MyChain.py", line 26, in __call__ 53 return F.softmax_cross_entropy(self.fwd(x),t) 54 File "/usr/local/lib/python3.6/site-packages/chainer/functions/loss/softmax_cross_entropy.py", line 380, in 55 softmax_cross_entropy 56 normalize, cache_score, class_weight, ignore_label, reduce)(x, t) 57 File "/usr/local/lib/python3.6/site-packages/chainer/function.py", line 226, in __call__ 58 ret = node.apply(inputs) 59 File "/usr/local/lib/python3.6/site-packages/chainer/function_node.py", line 228, in apply 60 self._check_data_type_forward(in_data) 61 File "/usr/local/lib/python3.6/site-packages/chainer/function_node.py", line 296, in _check_data_type_forwa 62rd 63 self.check_type_forward(in_type) 64 File "/usr/local/lib/python3.6/site-packages/chainer/function.py", line 126, in check_type_forward 65 self._function.check_type_forward(in_types) 66 File "/usr/local/lib/python3.6/site-packages/chainer/functions/loss/softmax_cross_entropy.py", line 77, in 67check_type_forward 68 x_type.shape[2:] == t_type.shape[1:], 69 File "/usr/local/lib/python3.6/site-packages/chainer/utils/type_check.py", line 519, in expect 70 expr.expect() 71 File "/usr/local/lib/python3.6/site-packages/chainer/utils/type_check.py", line 477, in expect 72 '{0} {1} {2}'.format(left, self.inv, right)) 73chainer.utils.type_check.InvalidType: 74Invalid operation is performed in: SoftmaxCrossEntropy (Forward) 75 76Expect: in_types[1].dtype.kind == i 77Actual: f != i
おそらくデータの整形に問題があるのではないかとは思うのですが、どこが間違っているのかがわかりません。
どのようにすればこのエラーを回避できるのでしょうか?
わかりにくい点も多いかもしれませんが、どうぞよろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/10 09:07
2017/12/10 09:12
2017/12/10 09:28
2017/12/10 10:53
2017/12/10 12:29
2017/12/10 13:00
2017/12/10 13:22