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

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

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

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

Python 3.x

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

解決済

chainerで推論をするときに,データを入れようとすると次元の問題でエラーが起こる

misogil
misogil

総合スコア13

Chainer

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

Python 3.x

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

1回答

0リアクション

0クリップ

8561閲覧

投稿2017/02/23 04:25

###前提・実現したいこと
chainerで出力層の結果(10次元のベクトル)を得たいです.
そのために、cifar-10やmnistの時と同じようにデータを(3HW){チャンネル,高さ,幅}にしたのですが,
いざ学習したネットワークに流しこむ時にエラーが発生してしまいます.

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

Invalid operation is performed in Convolution2DFunction (Forward) Expect: in_types[0].ndim == 4 Actual: 3 != 4

###該当のソースコード

python

import chainer import chainer.functions as F import chainer.links as L from chainer import training from chainer.training import extensions from chainer.datasets import tuple_dataset from chainer import Variable from chainer import serializers import numpy as np import _pickle as cpickle import os import random xp = chainer.cuda.cupy def load_pickle(): base_path = os.path.dirname(os.path.abspath(__file__)) hair_path = os.path.normpath(os.path.join(base_path, '../result/result_pickle')) imageData = [] labelData = [] test_tuple = [] af_imageData = [] af_labelData = [] for directory in os.listdir(hair_path): if directory.find('.DS_Store') > -1: continue file_path = hair_path + '/' + directory for img in os.listdir(file_path): if img.find('_DS_Store') > -1 or img.find('.DS_Store') > -1: continue pickle_dt = np.load(file_path + '/' + img).reshape(3, 5625) r, g, b = pickle_dt[0], pickle_dt[1], pickle_dt[2] rImg = np.asarray(np.float32(r) / 255.0).reshape(75, 75) gImg = np.asarray(np.float32(g) / 255.0).reshape(75, 75) bImg = np.asarray(np.float32(b) / 255.0).reshape(75, 75) all_ary = np.asarray([rImg, gImg, bImg]) test_tuple.append((all_ary, np.int32(int(directory)))) imageData.append(all_ary) labelData.append(np.int32(int(directory))) random.shuffle(test_tuple) for tuple in test_tuple: af_imageData.append(tuple[0]) af_labelData.append(tuple[1]) return af_imageData, af_labelData def load_result_pickle(): base_path = os.path.dirname(os.path.abspath(__file__)) result_path = os.path.normpath(os.path.join(base_path, '../result/result_pickle')) imageData = [] # labelData = [] for image in os.listdir(result_path): if image.find('.DS_Store') > -1: continue np_pickle = np.load(result_path + '/' + image).reshape(3, 5625) r, g, b = np_pickle[0], np_pickle[1], np_pickle[2] rImg = np.asarray(np.float32(r) / 255.0).reshape(75, 75) gImg = np.asarray(np.float32(g) / 255.0).reshape(75, 75) bImg = np.asarray(np.float32(b) / 255.0).reshape(75, 75) all_ary = np.asarray([rImg, gImg, bImg]) imageData.append(all_ary) # labelData.append(np.int32(0)) return imageData class AlexNet(chainer.Chain): def __init__(self): super(AlexNet, self).__init__( conv1 = L.Convolution2D(None, 96, 6, stride=3), conv2 = L.Convolution2D(None, 128, 3, pad=2), # conv3 = L.Convolution2D(None, 256, 3, pad=1), conv4 = L.Convolution2D(None, 128, 3, pad=1), fc6 = L.Linear(None, 6400), fc7 = L.Linear(None, 6400), fc8 = L.Linear(None, 1000), #fc9 = L.Linear(None, 20) ) # self.vector = 0 def __call__(self, x): h = F.max_pooling_2d(F.local_response_normalization(F.relu(self.conv1(x))), 3, stride=1) h = F.max_pooling_2d(F.local_response_normalization(F.relu(self.conv2(h))), 3, stride=1) # h = F.relu(self.conv3(h)) h = F.max_pooling_2d(F.relu(self.conv4(h)), 3, stride=2) h = F.dropout(F.relu(self.fc6(h))) h = F.dropout(F.relu(self.fc7(h))) h = self.fc8(h) # self.vector = h return h # ベクトル化するために全データを配列へ入れる imgData = load_result_pickle() # モデルのロード model = AlexNet() chainer.serializers.load_npz('smaller_alex_not_Classifier', model) optimizer = chainer.optimizers.Adam() optimizer.setup(model) for img in imgData: y = model(img)

###試したこと
学習時はデータをL.Classifier()に入れて学習させました。
http://qiita.com/Worldforward/items/f72d907cbe2760b72c2a
ここを参考に,AlexNet単体と,L.Classifier(AlexNet())のパラメータは別々に保存してあります。
4つ目の次元についてが分かりません。バッチサイズなのか,正解ラベルなのか..?と思っています。
学習時にはtrainerを利用して,データをtuple_datasetにすることによって学習させました。
GPUを利用していて,GTX1070を使っています。

よろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Chainer

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

Python 3.x

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