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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

5823閲覧

DeepLearning Chainer predictの時に __call__() missing 1 required positional argument: 'x'

_Victorique__

総合スコア1392

Chainer

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/08/30 10:39

Chainerで学習させたモデルを読み込んでpredictしようとしているのですがタイトルのようなエラーが出てしまいます。
引数の数もあっているはずなので原因がわかりません。
どこがまずいのでしょうか?

python

1def predict(model, dataset): 2 img, label = dataset 3 y = 0 4 with chainer.using_config('train', False), chainer.using_config('enable_backprop', False): 5 y = model(img) #ここでエラー 6 print("Predict : ", y.argmax(axis=1)[0], "Answer : ", label) 7 if y.argmax(axis=1)[0] == label: 8 return 1 9 else: 10 return 0 11 12def main(): 13 model = L.Classifier(NIN(args.classes)) 14 serializers.load_npz(args.model, model) 15 p_imgs = ######## #chainer用に画像を読み込む処理(tuple_dataset) 16 correct, total = 0, 0 17 for dataset in p_imgs: 18 correct += predict(model, dataset) 19 total += 1 20 print("Accuracy : ", correct*1.0/total) 21 return

python

1class NIN(chainer.Chain): 2 3 def __init__(self, n_out): 4 super(NIN, self).__init__() 5 conv_init = I.HeNormal() # MSRA scaling 6 self.n_out = n_out 7 with self.init_scope(): 8 self.mlpconv1 = L.MLPConvolution2D( 9 None, (96, 96, 96), 11, stride=4, conv_init=conv_init) 10 self.mlpconv2 = L.MLPConvolution2D( 11 None, (256, 256, 256), 5, pad=2, conv_init=conv_init) 12 self.mlpconv3 = L.MLPConvolution2D( 13 None, (384, 384, 384), 3, pad=1, conv_init=conv_init) 14 self.mlpconv4 = L.MLPConvolution2D( 15 None, (1024, 1024, self.n_out), 3, pad=1, conv_init=conv_init) 16 17 def __call__(self, x): 18 h = F.max_pooling_2d(F.relu(self.mlpconv1(x)), 3, stride=2) 19 h = F.max_pooling_2d(F.relu(self.mlpconv2(h)), 3, stride=2) 20 h = F.max_pooling_2d(F.relu(self.mlpconv3(h)), 3, stride=2) 21 h = self.mlpconv4(F.dropout(h)) 22 h = F.reshape(F.average_pooling_2d(h, 6), (len(x), self.n_out)) 23 return h

error

1Traceback (most recent call last): 2 File "predict.py", line 98, in <module> 3 main() 4 File "predict.py", line 91, in main 5 print(model(dataset[0])) 6 File "/Users/username/.pyenv/versions/3.7.0/lib/python3.7/site-packages/chainer/links/model/classifier.py", line 134, in __call__ 7 self.y = self.predictor(*args, **kwargs) 8TypeError: __call__() missing 1 required positional argument: 'x'

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

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

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

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

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

guest

回答1

0

ベストアンサー

http://docs.chainer.org/en/stable/reference/generated/chainer.links.Classifier.html#chainer.links.Classifier.call

Computes the loss value for an input and label pair.

chainer.links.Classifierをcallableなオブジェクトとして呼び出した時の機能は「入力と正解ラベルの両方を渡してロスを計算する」なので、入力だけ渡しても駄目です。

https://github.com/chainer/chainer/blob/4ce120d09b6543ae60a6d18830b4345992f1322d/chainer/links/model/classifier.py#L101

最後の引数を正解だと思ってよけておいて、残りをpredictorに渡すので、NINが引数なしで呼び出されています。

ここではロスを計算したいのではないので、predictorをコールしたらいいんじゃないでしょうか。
(なぜ駄目なのかはわかりますが、どうすればいいかはすみませんがあやふやです。)

投稿2018/08/30 14:14

quickquip

総合スコア11038

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

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

_Victorique__

2018/09/06 04:05

遅くなりました!ありがとうございます!おかげで解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問