【问题标题】:Test accuracy evaluation Callback测试精度评估回调
【发布时间】:2021-04-16 14:05:01
【问题描述】:

我想在神经网络训练期间计算每个 epoch 之后的测试准确度。简单的解决方案是:

for i in range(NUM_EPOCHS): 
    model.fit(train_dataset,epochs=1)
    accuracy = model.evaluate(test_dataset)
    test_accuracy_list.append(accuracy)

有没有更多使用回调的模块化解决方案?

【问题讨论】:

    标签: tensorflow keras tensorflow2.0


    【解决方案1】:

    你需要的是on_epoch_end

    class EvaluateEpochEnd(tf.keras.callbacks.Callback):
        def __init__(self, test_data):
            self.test_data = test_data
    
        def on_epoch_end(self, epoch, logs={}):
            x, y = self.test_data
            scores = self.model.evaluate(x, y, verbose=False)
            print('\nTesting loss: {}, accuracy: {}\n'.format(scores[0], scores[1]))
    

    用法:

    model.fit(x_train, y_train, epochs=5, callbacks=[EvaluateEpochEnd((x_test, y_test))])
    

    将给予:

    Epoch 1/5
    1875/1875 [==============================] - 6s 3ms/step - loss: 0.4784 - accuracy: 0.8619
    
    Testing loss: 0.14208272099494934, accuracy: 0.9574000239372253
    

    【讨论】:

    • 谢谢!我认为这是最优雅的解决方案
    【解决方案2】:

    您可以使用自定义训练循环,例如 this

    您提到的方法不正确,您指定的方法不会做要求的事情。相反,它会多次调用 fit 函数。

    keras fit 函数只返回 step loss/acc 而不是 epoch loss/acc

    【讨论】:

    • 你能扩展你的答案吗?我相信以 epochs=1 运行适合 100 次与以 epochs=100 运行一次适合是相同的。关于您的回答,我确实需要一个自定义训练循环,但我不知道如何编写返回测试准确度向量的自定义回调
    猜你喜欢
    • 2023-03-21
    • 2018-09-05
    • 1970-01-01
    • 2020-05-28
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多