使用 Chainer 进行扩展甚至观察为空
extensions or even observation empty with Chainer
我是 Chainer 的新手,最近我一直在为一种奇怪的情况而苦苦挣扎。
我有一个链来计算一个 CNN,我用一个 labeledDataSet 提供它。
但是当我使用扩展时没有结果出现。当我显示观察值时,它是空的。但是loss确实算出来了,参数也更新了(至少是变了)所以不知道是哪里的连接问题
def convert(batch, device):
return chainer.dataset.convert.concat_examples(batch, device, padding=0)
def print_obs(t):
print("trainer.observation", trainer.observation)
print("updater.loss", updater.loss_func)
print("conv1", model.predictor.conv1.W[0][0])
print("conv20", model.predictor.conv20.W[0][0])
model.predictor.train = True
model.predictor.finetune = False ####or True ??
cuda.get_device(0).use()
model.to_gpu()
optimizer = optimizers.MomentumSGD(lr=learning_rate, momentum=momentum)
optimizer.use_cleargrads()
optimizer.setup(model)
optimizer.add_hook(chainer.optimizer.WeightDecay(weight_decay))
train, test = imageNet_data.train_val_test()
train_iter = iterators.SerialIterator(train, batch_size)
test_iter = iterators.SerialIterator(test, batch_size, repeat=False,shuffle=False)
with chainer.using_config('debug', True):
# Set up a trainer
updater = training.StandardUpdater(train_iter, optimizer, loss_func=model, converter=convert)
trainer = training.Trainer(updater, (10, 'epoch'), out="./backup/result")
trainer.extend(print_obs, trigger=(3, 'iteration'))
trainer.extend(extensions.LogReport())
trainer.extend(extensions.PrintReport(
['epoch', 'main/loss', 'validation/main/loss',
'main/accuracy', 'validation/main/accuracy', 'elapsed_time']))
trainer.run()
也许这是完全遗漏的东西,而且很明显..谢谢你所有对我有很大帮助的评论。
Chainer4.1, Ubuntu16
如果您将自己的 Link 与 Trainer 一起使用,则需要自己使用 chainer.report
报告指标。
有关说明,请参阅 https://docs.chainer.org/en/stable/guides/report.html。
您可以在 Chainer 存储库中查看一些示例:
我是 Chainer 的新手,最近我一直在为一种奇怪的情况而苦苦挣扎。 我有一个链来计算一个 CNN,我用一个 labeledDataSet 提供它。 但是当我使用扩展时没有结果出现。当我显示观察值时,它是空的。但是loss确实算出来了,参数也更新了(至少是变了)所以不知道是哪里的连接问题
def convert(batch, device):
return chainer.dataset.convert.concat_examples(batch, device, padding=0)
def print_obs(t):
print("trainer.observation", trainer.observation)
print("updater.loss", updater.loss_func)
print("conv1", model.predictor.conv1.W[0][0])
print("conv20", model.predictor.conv20.W[0][0])
model.predictor.train = True
model.predictor.finetune = False ####or True ??
cuda.get_device(0).use()
model.to_gpu()
optimizer = optimizers.MomentumSGD(lr=learning_rate, momentum=momentum)
optimizer.use_cleargrads()
optimizer.setup(model)
optimizer.add_hook(chainer.optimizer.WeightDecay(weight_decay))
train, test = imageNet_data.train_val_test()
train_iter = iterators.SerialIterator(train, batch_size)
test_iter = iterators.SerialIterator(test, batch_size, repeat=False,shuffle=False)
with chainer.using_config('debug', True):
# Set up a trainer
updater = training.StandardUpdater(train_iter, optimizer, loss_func=model, converter=convert)
trainer = training.Trainer(updater, (10, 'epoch'), out="./backup/result")
trainer.extend(print_obs, trigger=(3, 'iteration'))
trainer.extend(extensions.LogReport())
trainer.extend(extensions.PrintReport(
['epoch', 'main/loss', 'validation/main/loss',
'main/accuracy', 'validation/main/accuracy', 'elapsed_time']))
trainer.run()
也许这是完全遗漏的东西,而且很明显..谢谢你所有对我有很大帮助的评论。
Chainer4.1, Ubuntu16
如果您将自己的 Link 与 Trainer 一起使用,则需要自己使用 chainer.report
报告指标。
有关说明,请参阅 https://docs.chainer.org/en/stable/guides/report.html。
您可以在 Chainer 存储库中查看一些示例: