前提
http://lovedata.main.jp/2019/06/15/startdeeplearning/
を参考にニューラルネットによる予測モデルを作成しています
実現したいこと
trainerをrunさせたい
発生している問題・エラーメッセージ
Exception in main training loop: 'NN' object has no attribute 'forward' Traceback (most recent call last): File "/usr/local/lib/python3.7/dist-packages/chainer/training/trainer.py", line 343, in run update() File "/usr/local/lib/python3.7/dist-packages/chainer/training/updaters/standard_updater.py", line 240, in update self.update_core() File "/usr/local/lib/python3.7/dist-packages/chainer/training/updaters/standard_updater.py", line 253, in update_core optimizer.update(loss_func, *in_arrays) File "/usr/local/lib/python3.7/dist-packages/chainer/optimizer.py", line 874, in update loss = lossfun(*args, **kwds) File "/usr/local/lib/python3.7/dist-packages/chainer/link.py", line 286, in __call__ forward = self.forward # type: ignore Will finalize trainer extensions and updater before reraising the exception.
該当のソースコード
python
1#ニューラルネットワークのクラスを作成 2class NN(chainer.Chain): 3 4 #モデルの構造 5 def __init__(self,n_mid_units,n_out=1): 6 super().__init__() 7 8 #パラメータを持つ層の登録 9 with self.init_scope(): 10 self.fc1=L.Linear(None,n_mid_units) 11 self.fc2=L.Linear(None,n_out) 12 self.bn=L.BatchNormalization(x_num) 13 14 15 #損失関数の計算 16 def __call__(self,x,t): 17 y=self.predictor(x) 18 loss=F.mean_squared_error(t,y) 19 chainer.report({'loss':loss},self) 20 return loss 21 22 #順伝搬 23 def predictor(self,x): 24 h=self.bn(x) 25 h=self.fc1(h) 26 h=F.relu(h) 27 h=self.fc2(h) 28 return h 29 30#中間層のノード数、バッチサイズを変化させながら誤差の変化を確認 31for i in [1,3,5,10,20]: 32 print('n_mid_units={}'.format(i)) 33 34 #中間層の数を変える 35 model =NN(n_mid_units=i) 36 37 optimizer=chainer.optimizers.Adam() 38 optimizer.setup(model) 39 40 batchsize=10 41 train_iter=chainer.iterators.SerialIterator(train,batchsize) 42 test_iter=chainer.iterators.SerialIterator(train,batchsize,repeat=False,shuffle=False) 43 44 from chainer import training 45 updater=training.StandardUpdater(train_iter,optimizer,device=-1) 46 47 epoch=20 48 trainer=training.Trainer(updater,(20,'epoch'),out='result/electricpower_n_mid_units{}'.format(i)) 49 from chainer.training import extensions 50 51 trainer.extend(extensions.Evaluator(test_iter,model,device=-1)) 52 trainer.extend(extensions.LogReport(trigger=(1,'epoch'))) 53 trainer.extend(extensions.PrintReport(['epoch','main/loss','validation/main/loss','elapsed_time']),trigger=(1,'epoch')) 54
試したこと
上記コードまではうまく行っており、trainer.run()をその次に行うとエラーが出てしまいます。コード自体はurlの通りだと思います。
他の方の質問にあったself._done=Falseを試しに行いましたがうまく行きませんでした。
補足情報(FW/ツールのバージョンなど)
Googleコラボ使用中

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。