如何边训练边预测

现在想要,在每个batch训练前测一下这个batch的准确率,
然后训练完这个batch,再测一下这个batch的准确率,
如何操作

只要在with ag.record()外面做forward,BatchNorm层的参数就是稳定的,那么可以简单地预测一遍,训练,再预测一遍,这样就行了。

for i, batch in enumerate(train_data):
    data = gluon.utils.split_and_load(batch[0], ctx_list=ctx, batch_axis=0)
    label = gluon.utils.split_and_load(batch[1], ctx_list=ctx, batch_axis=0)

    # 训练之前测试
    before_batch_score = test(net, data, label)
    # 训练
    with ag.record():
        outputs = [net(X) for X in data]
        loss = [L(yhat, y) for yhat, y in zip(outputs, label)]
    for l in loss:
        l.backward()
    trainer.step(batch_size)
    # 训练之后测试
    after_batch_score = test(net, data, label)
    # 比较前后的分数变化
    ......

这里的 test 就是个预测的函数,比如可以这么写

def test(net, data, label):
    acc_top1 = mx.metric.Accuracy()
    acc_top1.reset()

    outputs = [net(X) for X in data]
    acc_top1.update(label, outputs)

    _, top1 = acc_top1.get()
    return top1
2赞

好的,十分感谢,我去试试