前提
chainerで画像分類のための機械学習をしていたところエラーが発生した
実現したいこと
- エラーを修正
発生している問題・エラーメッセージ
Traceback (most recent call last):
File "train_imagenet.py", line 352, in <module>
train_loop()
File "train_imagenet.py", line 327, in train_loop
optimizer.update(model, x, t)
File "C:\Users\user01\AppData\Local\Programs\Python\Python37\lib\site-packages\chainer\optimizer.py", line 864, in update
loss = lossfun(*args, **kwds)
File "C:\Users\user01\Desktop\実験データ\20201114\nin.py", line 35, in call
h = F.max_pooling_2d(F.relu(self.mlpconv1(x)), 3, stride=2)
File "C:\Users\user01\AppData\Local\Programs\Python\Python37\lib\site-packages\chainer\link.py", line 294, in call
out = forward(*args, **kwargs)
File "C:\Users\user01\AppData\Local\Programs\Python\Python37\lib\site-packages\chainer\links\connection\mlp_convolution_2d.py", line 107, in forward
x = f(l(x))
File "C:\Users\user01\AppData\Local\Programs\Python\Python37\lib\site-packages\chainer\link.py", line 294, in call
out = forward(*args, **kwargs)
File "C:\Users\user01\AppData\Local\Programs\Python\Python37\lib\site-packages\chainer\links\connection\convolution_2d.py", line 184, in forward
groups=self.groups)
File "C:\Users\user01\AppData\Local\Programs\Python\Python37\lib\site-packages\chainer\functions\connection\convolution_2d.py", line 589, in convolution_2d
y, = fnode.apply(args)
File "C:\Users\user01\AppData\Local\Programs\Python\Python37\lib\site-packages\chainer\function_node.py", line 289, in apply
utils._check_arrays_forward_compatible(in_data, self.label)
File "C:\Users\user01\AppData\Local\Programs\Python\Python37\lib\site-packages\chainer\utils_init_.py", line 93, in _check_arrays_forward_compatible
', '.join(str(type(a)) for a in arrays)))
TypeError: incompatible array types are mixed in the forward input (Convolution2DFunction).
Actual: <class 'numpy.ndarray'>, <class 'cupy.core.core.ndarray'>, <class 'cupy.core.core.ndarray'>
該当のソースコード
python
1 def __init__(self): 2 w = math.sqrt(2) # MSRA scaling 3 super(NIN, self).__init__( 4 mlpconv1=L.MLPConvolution2D( 5 3, (96, 96, 96), 11, stride=4), 6 mlpconv2=L.MLPConvolution2D( 7 96, (256, 256, 256), 5, pad=2), #wscale=w削除 8 mlpconv3=L.MLPConvolution2D( 9 256, (384, 384, 384), 3, pad=1), 10 mlpconv4=L.MLPConvolution2D( 11 384, (1024, 1024, 1000), 3, pad=2), 12 ) 13 self.train = True 14 15 def clear(self): 16 self.loss = None 17 self.accuracy = None 18 19 def __call__(self, x, t): 20 self.clear() 21 22 h = F.max_pooling_2d(F.relu(self.mlpconv1(x)), 3, stride=2) 23 h = F.max_pooling_2d(F.relu(self.mlpconv2(h)), 3, stride=2) 24 h = F.max_pooling_2d(F.relu(self.mlpconv3(h)), 3, stride=2) 25 h = self.mlpconv4(F.dropout(h)) 26 h = F.reshape(F.average_pooling_2d(h, 6), (x.data.shape[0], 1000)) 27 28 self.loss = F.softmax_cross_entropy(h, t) 29 self.accuracy = F.accuracy(h, t) 30 return self.loss 31 32train_imagenet.py 33 34def train_loop(): 35 # Trainer 36 graph_generated = False 37 while True: 38 while data_q.empty(): 39 time.sleep(0.1) 40 inp = data_q.get() 41 if inp == 'end': # quit 42 res_q.put('end') 43 break 44 elif inp == 'train': # restart training 45 res_q.put('train') 46 model.train = True 47 continue 48 elif inp == 'val': # start validation 49 res_q.put('val') 50 #serializers.save_npz(args.out, model) 51 #model.to_cpu() 52 pickle.dump(model, open(args.out, 'wb'), -1) 53 serializers.save_npz(args.outstate, optimizer) 54 model.train = False 55 continue 56 57 volatile = 'off'if model.train else 'on' 58 #x = chainer.Variable(xp.asarray(inp[0]), volatile=volatile) 59 x = chainer.Variable(xp.asarray(inp[0])) 60 with chainer.no_backprop_mode(): 61 #t = chainer.Variable(xp.asarray(inp[1]),volatile=volatile) 62 t = chainer.Variable(xp.asarray(inp[1])) 63 with chainer.no_backprop_mode(): 64 65 #if model.train: 66 if model: #← 67 x = chainer.Variable(np.asarray(inp[0])) 68 t = chainer.Variable(np.asarray(inp[1])) 69 optimizer.update(model, x, t) 70 #print(f"acc: {model.accuracy.data}, loss: {model.loss.data}") #追加 71 if not graph_generated: 72 with open('graph.dot', 'w') as o: 73 o.write(computational_graph.build_computational_graph( 74 (model.loss,)).dump()) 75 print('generated graph', file=sys.stderr) 76 graph_generated = True 77 else: 78 with chainer.no_backprop_mode(): 79 80 model(x, t) 81 82 res_q.put((float(model.loss.data), float(model.accuracy.data))) 83 del x, t 84 85### 試したこと 86以前の質問で解決したのですが、PCが故障してしまいPCを変えたところ動かなくなってしまいました。 87実行環境に関して覚えがなく、様々な環境で行ってみましたがうまいくいきませんでした。 88いろいろと調査したところchainerv4においてNumPy/CuPy 配列を引数に混在させた関数の呼び出しが機能しないというのは分かりましたが解決法が分からないという状態です。 89↑の場合にincompatible array types are mixed in the forward input のエラーが出ることが分かりました。 90
回答1件
あなたの回答
tips
プレビュー