「データサイエンス教本」という書籍でchainerを用いてAND理論演算子をコードで実装するという内容なのですが、
下記のコードをかくとAttributeError: 'MyChain' object has no attribute 'forward'のエラーコードが発生してしまうのですが、どのように解決すれば良いかご教示いただけますでしょうか。
よろしくお願いいたします。
〜コード〜
python
1 2import numpy as np 3import chainer 4import chainer.functions as F 5import chainer.links as L 6import chainer.initializers as I 7from chainer import training 8from chainer.training import extensions 9 10class MyChain(chainer.Chain): 11 def __init__(self): 12 super(MyChain, self).__init__() 13 14 with self.init_scope(): 15 self.l1 = L.Linear(None, 3) 16 self.l2 = L.Linear(None, 2) 17 18 def __call__(self, x): 19 h = F.relu(self.l1(x)) 20 h = self.l2(h) 21 return h 22 23trainx = np.array(([0,0],[0,1],[1,0],[1,1]),dtype=np.float32) 24trainy = np.array([0,1,1,0],dtype=np.int32) 25train = chainer.datasets.TupleDataset(trainx,trainy) 26test = chainer.datasets.TupleDataset(trainx,trainy) 27 28model = L.Classifier(MyChain(),lossfun=F.softmax_cross_entropy) 29optimizer = chainer.optimizers.Adam() 30optimizer.setup(model) 31 32batchsize = 4 33train_iter = chainer.iterators.SerialIterator(train,batchsize) #学習用 34test_iter = chainer.iterators.SerialIterator(test,batchsize,repeat=False,shuffle=False) #評価用 35 36updater = training.StandardUpdater(train_iter,optimizer) 37 38epoch = 500 39trainer = training.Trainer(updater,(epoch,'epoch')) 40 41trainer.extend(extensions.LogReport()) #ログ 42trainer.extend(extensions.Evaluator(test_iter,model)) #エポック数の表示 43trainer.extend(extensions.PrintReport(['epoch','main/loss','validation/main/loss','main/accuracy','validation/main/accuracy','elapsed_time'])) #計算状態の表示 44trainer.extend(extensions.PlotReport(['main/loss','validation/main/loss'],'epoch',file_name='loss.png')) #誤差グラフ 45trainer.extend(extensions.PlotReport(['main/accuracy','validation/main/accuracy'],'epoch',file_name='accuracy.png')) #精度グラフ 46 47trainer.run() 48 49chainer.serializers.save_npz("result/out.model",model)
<追記>
python
1class MyChain(chainer.Chain): 2def init(self): 3super(MyChain, self).init() 4 5with self.init_scope(): 6self.l1 = L.Linear(None, 3) 7self.l2 = L.Linear(None, 2)
おそらくこの下の箇所が問題かと思っているのですが、
python
1def call(self, x): 2h = F.relu(self.l1(x)) 3h = self.l2(h) 4return h
・書き方1
python
1def call(self, x): 2h1 = F.relu(self.l1(x)) 3y = self.l2(h1) 4return y
・書き方2
python
1def call(self, x): 2h1 = F.relu(self.l1(x)) 3h2 = self.l2(h1) 4return h2
・書き方3
python
1def call(self, x): 2h = F.relu(self.l1(x)) 3return self.l2(h)
などの書き方をしても解消されない状態です。。
回答2件
あなたの回答
tips
プレビュー