所以我有一个由子类化API编写的模型,调用签名看起来像call(x,training),其中需要训练参数来区分训练和非训练,当做batchnorm和dropout时。当我使用model.fit时,如何让模型向前传递知道我处于训练模式或评估模式?
谢谢!
发布于 2019-07-18 07:14:31
实际上,在文档https://www.tensorflow.org/beta/guide/keras/custom_layers_and_models中,它说“一些层,特别是BatchNormalization层和Dropout层,在训练和推理期间有不同的行为。对于这些层,在调用方法中公开训练(布尔)参数是标准做法。
通过在call中公开这个参数,你可以让内置的训练和评估循环(例如fit)正确地使用训练和推理中的层。“所以我认为keras会自动传入训练参数。我试图删除训练参数的默认值,但没有抛出错误,所以很可能是keras内置的循环完成了这件事。
发布于 2019-07-18 07:05:33
据我所知,这是无可争辩的。Model.fit只是根据所提供的任何训练数据来训练模型,并在每个时代结束时评估所提供的验证数据或通过使用validation_split的训练。
https://stackoverflow.com/questions/57088786
复制