

ChainerのサンプルコードにあるMNIST 画像データの学習を行うプログラム  
<https://github.com/pfnet/chainer/blob/master/examples/mnist/train_mnist.py>  
を参考に自分でプログラムを書いたのですが、学習が始まって数秒のところでエラーが出てしまいます。  
エラーの内容が

[code]

    'int' object is not callable
    
[/code]

これが発生しているのが、

[code]

    self.trainer.run()
    
[/code]

という部分でした。以下に全プログラムを掲載します。

main.py

[code]

    from __future__ import print_function
    
    import MultiLayerPerceptron
    
    import chainer
    import chainer.functions as F
    import chainer.links as L
    from chainer import training
    from chainer.training import extensions
    
    GPU = 0
    UNIT = 1000
    O_UNIT = 10
    BACTHSIZE = 100
    EPOCH = 20
    OUT = 'result'
    RESUME = ''
    
    
    
    def main():
    
        setParams = MultiLayerPerceptron.SetParams(UNIT, O_UNIT, GPU, BACTHSIZE, EPOCH, OUT, RESUME)
        setParams.SetGPU()
        setParams.SetOptimizer()
        setParams.SetMNISTData()
        setParams.SetTrainer()
        setParams.SetExtension()
        setParams.RunTrainer()
    
    if __name__ == '__main__':
        main()
    
[/code]

MultiLayerPerceptron.py

[code]

    # -*- coding: utf-8 -*-
    
    import chainer
    import chainer.links as L
    import chainer.functions as F
    from chainer import training
    from chainer.training import extensions
    
    
    class MLP(chainer.Chain):
    
        def __init__(self,n_units,n_out):
            super(MLP, self).__init__(
                l1=L.Linear(None,n_units),
                l2=L.Linear(None,n_units),
                l3=L.Linear(None,n_out),
            )
        def __call__(self,x):
            h1 = F.relu(self.l1(x))
            h2 = F.relu(self.l2(h1))
            return self.l3(h2)
    
    class SetParams:
        def __init__(self,unit, o_unit, gpu,batchSize,epoch,out,resume):
            self.model = L.Classifier(MLP(unit, o_unit))
            self.gpu = gpu
            self.batchSize = batchSize
            self.epoch = epoch
            self.out = out
            self.resume = resume
            self.optimiszer = None
            self.train = None
            self.test = None
            self.trainIter = None
            self.testIter = None
            self.trainer = None
    
        #GPUの設定       
        def SetGPU(self):
            if self.gpu >= 0:
                chainer.cuda.get_device(self.gpu).use()
                self.model.to_gpu()
            print "Set GPU - OK"
    
        #最適化関数の設定
        def SetOptimizer(self):
            self.optimizer = chainer.optimizers.Adam()
            self.optimizer.setup(self.model)
            print "Set Optimizer - OK"
    
        #MNIST画像データの取得
        def SetMNISTData(self):
            self.train,self.test = chainer.datasets.get_mnist() #ラベル付きデータセット、1次元、データType=float32、ラベルType=int32
            #ミニバッチの設定
            self.trainIter = chainer.iterators.SerialIterator(self.train, self.batchSize) #繰り返し有り、順番入れ替えあり
            self.testIter = chainer.iterators.SerialIterator(self.test, self.batchSize, False, False) #繰り返しなし、順番入れ替えなし
            print "Set MNIST Image - OK"
    
    
        def SetTrainer(self):
            self.updater = training.StandardUpdater(self.trainIter, self.optimizer, device = self.gpu)
            self.trainer = training.Trainer(self.updater, (self.epoch, 'epoch'), out = self.out) #*****　不明　*****
    
        def SetExtension(self):
            self.trainer.extend(extensions.Evaluator(self.testIter, self.model, self.gpu))
            self.trainer.extend(extensions.dump_graph('main/loss'))
            self.trainer.extend(extensions.snapshot(), trigger=(self.epoch, 'epoch'))
            self.trainer.extend(extensions.LogReport())
            self.trainer.extend(extensions.PrintReport(
                ['epoch', 'main/loss', 'validaton/main/loss', 
                 'main/accuracy', 'validation/main/accuracy', 'elapsed_time']))
            self.trainer.extend(extensions.ProgressBar())
            print "Set Extension - OK"
    
        def RunTrainer(self):
            if self.resume:
                chainer.serializers.load_npz(self.resume, self.trainer)
            self.trainer.run()
    
[/code]


CC BY-SA 3.0
2016-12-05T22:37:09.283
30937
2016-12-06T07:03:21.877
2016-12-05T22:42:41.267
19825
19825
question
python chainer
Chainerのサンプルコードについて


Evaluatorの引数が間違っています。  
可変の引数を取るものはちゃんと引数名を指定しないと意図しない変数を渡すことになります。  
`self.trainer.extend(extensions.Evaluator(self.testIter, self.model, device
=self.gpu))`


CC BY-SA 3.0
2016-12-06T07:03:21.877
30950
2016-12-06T07:03:21.877
525
30937
answer