質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

535閲覧

chainer GPU処理 maxpoolingの処理後 値がNone

Lizard_knight

総合スコア18

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/01/18 16:21

編集2019/01/18 16:22

chainerのmaxpoolingの処理を正しく動かしたい

chainerで物体認識の推論処理でネットワークモデルの分割をした後、分割された層の中間データを吐き出し、推論処理の続きを行うときにconv層はGPU処理が通るのに対してmaxpooling層の処理時では、出力結果がNoneとなり正しく出力されません。
chainerとGPUに詳しい方助けてくださいm(__)m

発生している問題・エラーメッセージ

Traceback (most recent call last): File "ele_predict_partial.py", line 190, in <module> main() File "ele_predict_partial.py", line 175, in main top1, top5 = predict_image(model, labels, x, i) File "ele_predict_partial.py", line 55, in predict_image pre = model(x) File "/home/VGG16/vgg.py", line 409, in __call__ h['conv3_1'] = F.relu(self.conv3_1(h['pool2'])) File "/usr/local/lib/python3.5/dist-packages/chainer/link.py", line 242, in __call__ out = forward(*args, **kwargs) File "/usr/local/lib/python3.5/dist-packages/chainer/links/connection/convolution_2d.py", line 173, in forward groups=self.groups) File "/usr/local/lib/python3.5/dist-packages/chainer/functions/connection/convolution_2d.py", line 572, in convolution_2d y, = fnode.apply(args) File "/usr/local/lib/python3.5/dist-packages/chainer/function_node.py", line 245, in apply self._check_data_type_forward(in_data) File "/usr/local/lib/python3.5/dist-packages/chainer/function_node.py", line 322, in _check_data_type_forward self.check_type_forward(in_type) File "/usr/local/lib/python3.5/dist-packages/chainer/functions/connection/convolution_2d.py", line 62, in check_type_forward x_type.dtype.kind == 'f', AttributeError: 'NoneType' object has no attribute 'dtype'

該当のソースコード

python3

1316 class VGG16ValPartial(chainer.Chain): 2317 3318 """A VGG-style network for imagenet. 4319 5320 Original of this model is chainer.links.vision.vgg, and adjust to meet 6321 our training environments. 7322 8323 """ 9324 10325 insize = 224 11326 layer_names = [ 12327 'conv1_1', 'conv1_2', 'pool1', 13328 'conv2_1', 'conv2_2', 'pool2', 14329 'conv3_1', 'conv3_2', 'conv3_3', 'pool3', 15330 'conv4_1', 'conv4_2', 'conv4_3', 'pool4', 16331 'conv5_1', 'conv5_2', 'conv5_3', 'pool5', 17332 'fc6', 'relu6', 'dp6', 18333 'fc7', 'relu7', 'dp7', 19334 'fc8', 'prob'] 20335 21336 22337 def __init__(self, layer='pool5'): 23338 model_alter = VGG16Layers() 24339 kwargs = { 25340 'initialW': normal.Normal(0.01), 26341 'initial_bias': constant.Zero(), 27342 } 28343 super(VGG16ValPartial, self).__init__( 29344 conv1_1 = Convolution2D(3, 64, 3, 1, 1, **kwargs).to_gpu(), 30345 conv1_2 = Convolution2D(64, 64, 3, 1, 1, **kwargs).to_gpu(), 31346 conv2_1 = Convolution2D(64, 128, 3, 1, 1, **kwargs).to_gpu(), 32347 conv2_2 = Convolution2D(128, 128, 3, 1, 1, **kwargs).to_gpu(), 33348 conv3_1 = Convolution2D(128, 256, 3, 1, 1, **kwargs).to_gpu(), 34349 conv3_2 = Convolution2D(256, 256, 3, 1, 1, **kwargs).to_gpu(), 35350 conv3_3 = Convolution2D(256, 256, 3, 1, 1, **kwargs).to_gpu(), 36351 conv4_1 = Convolution2D(256, 512, 3, 1, 1, **kwargs).to_gpu(), 37352 conv4_2 = Convolution2D(512, 512, 3, 1, 1, **kwargs).to_gpu(), 38353 conv4_3 = Convolution2D(512, 512, 3, 1, 1, **kwargs).to_gpu(), 39354 conv5_1 = Convolution2D(512, 512, 3, 1, 1, **kwargs).to_gpu(), 40355 conv5_2 = Convolution2D(512, 512, 3, 1, 1, **kwargs).to_gpu(), 41356 conv5_3 = Convolution2D(512, 512, 3, 1, 1, **kwargs).to_gpu(), 42357 fc6 = Linear(512 * 7 * 7, 4096, **kwargs), 43358 #fc6 = Linear(49, 4096, **kwargs), 44359 fc7 = Linear(4096, 4096, **kwargs), 45360 fc8 = Linear(4096, 1000, **kwargs) 46361 ) 47 48重みの保存処理 49 50395 self.layer = self._check_layer_name(layer) 51396 52397 53398 def __call__(self, x, t=None, oversample=False): 54399 if self.layer == 'pool1': 55400 h = {} 56401 #h['conv1_1'] = f.relu(self.conv1_1(x)) 57402 #h['conv1_2'] = f.relu(self.conv1_2(h['conv1_1'])) 58403 #h['pool1'] = _max_pooling(h['conv1_2']) 59404 60405 h['conv2_1'] = F.relu(self.conv2_1(x)) 61406 h['conv2_2'] = F.relu(self.conv2_2(h['conv2_1'])) 62407 h['pool2'] = _max_pooling(h['conv2_2']) 63408 64409 h['conv3_1'] = F.relu(self.conv3_1(h['pool2'])) 65410 h['conv3_2'] = F.relu(self.conv3_2(h['conv3_1'])) 66411 h['conv3_3'] = F.relu(self.conv3_3(h['conv3_2'])) 67412 h['pool3'] = _max_pooling(h['conv3_3']) 68413 69414 h['conv4_1'] = F.relu(self.conv4_1(h['pool3'])) 70415 h['conv4_2'] = F.relu(self.conv4_2(h['conv4_1'])) 71416 h['conv4_3'] = F.relu(self.conv4_3(h['conv4_2'])) 72417 h['pool4'] = _max_pooling(h['conv4_3']) 73418 74419 h['conv5_1'] = F.relu(self.conv5_1(h['pool4'])) 75420 h['conv5_2'] = F.relu(self.conv5_2(h['conv5_1'])) 76421 h['conv5_3'] = F.relu(self.conv5_3(h['conv5_2'])) 77422 h['pool5'] = _max_pooling(h['conv5_3']) 78423 79424 h['fc6'] = self.fc6(h['pool5']) 80425 h['relu6'] = F.relu(h['fc6']) 81426 h['dp6'] = F.dropout(h['relu6']) 82427 h['fc7'] = self.fc7(h['dp6']) 83428 h['relu7'] = F.relu(h['fc7']) 84429 h['dp7'] = F.dropout(h['relu7']) 85430 h['fc8'] = self.fc8(h['dp7']) 86431 87 88各layerの推論処理の続きを行っている。 89 90501 91502 #if t is None: 92503 # return h 93504 #else: 94505 # loss = F.softmax_cross_entropy(h, t) 95506 # top1 = F.accuracy(h,t) 96507 # top5 = accuracy_top_num(h, t, 5) 97508 # chainer.report({'loss': loss, 'top1': top1, 'top5': top5}, self) 98509 # return loss 99510 else: 100511 raise NameError("Invalid layer name: {}" .format(self.layer)) 101512 102513 y = softmax(h['fc8']) 103514 if oversample: 104515 n = len(y) // 10 105516 y_shape = y.shape[1:] 106517 y = reshape(y, (1, 10) + y_shape) 107518 y = sum(y, axis=1) / 10 108519 return y 109 110 111886 def _max_pooling(h): <- 問題のmaxpooling 112887 return F.max_pooling_2d(h, 2).to_gpu() 113

試したこと

887行目の.to_gpu()をなくすと以下のerrorが出ます

Traceback (most recent call last): File "ele_predict_partial.py", line 190, in <module> main() File "ele_predict_partial.py", line 175, in main top1, top5 = predict_image(model, labels, x, i) File "ele_predict_partial.py", line 55, in predict_image pre = model(x) File "/home/VGG16/vgg.py", line 398, in __call__ def __call__(self, x, t=None, oversample=False): File "/usr/local/lib/python3.5/dist-packages/chainer/link.py", line 242, in __call__ out = forward(*args, **kwargs) File "/usr/local/lib/python3.5/dist-packages/chainer/links/connection/linear.py", line 138, in forward return linear.linear(x, self.W, self.b, n_batch_axes=n_batch_axes) File "/usr/local/lib/python3.5/dist-packages/chainer/functions/connection/linear.py", line 289, in linear y, = LinearFunction().apply(args) File "/usr/local/lib/python3.5/dist-packages/chainer/function_node.py", line 237, in apply ', '.join(str(type(x)) for x in in_data))) TypeError: incompatible array types are mixed in the forward input (LinearFunction). Actual: <class 'numpy.ndarray'>, <class 'cupy.core.core.ndarray'>, <class 'cupy.core.core.ndarray'>

補足情報(FW/ツールのバージョンなど)

chainer version 5.1.0
cuda9.2-cudnn7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

python

1def __call__(self, x, t=None, oversample=False): 2    x = xp.asnumpy(x) 3 以下推論処理

で通りました。

投稿2019/01/18 16:52

Lizard_knight

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問