Tensorflow使用预训练模型时预测时BN层的问题
2020-07-14 06:28
92 查看
这是今晚同学在答疑群群提到的一个问题。
问题表现为模型训练时表现很好,之后在测试数据上表现很差,和预期的差距很大。
这是tensorflow的BN层带来的一个问题, 对于BN层,在训练时,是对每一批的训练数据进行归一化,也即用每一批数据的均值和方差。
而在测试时,比如进行一个样本的预测,就并没有batch的概念,因此,这个时候用的均值和方差是全量训练数据的均值和方差,这个可以通过移动平均法求得。
如果待预测的图片分布与训练图片的分布有大的差别时,直接使用训练数据的均值和方差可能会导致预测结果准确率比较糟糕。
解决办法比较简单,如果你的待预测数据量比较大,直接调用 model(test) 进行预测就行了,这样就使用训练模式,会直接从待预测数据计算其对应的均值和方差。
如果是单个数据或数据分布差异不大,就需要保存BN 层的参数,特别是移动均值和方差,然后直接预测(model.predict)。
来自 日月光华
Tensorflow深度学习入门与实战 - 网易云课堂
课程答疑
相关文章推荐
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
- Tensorflow保存模型,恢复模型,使用训练好的模型进行预测和提取中间输出(特征)
- Tensorflow训练完模型model使用 Redis并发加载 造成内存泄露问题,详细讲解如何查找问题以及解决方法
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
- win7下使用C++调用Tensorflow训练好的模型pb文件进行预测采用指针赋值Tensor
- Tensorflow保存模型,恢复模型,使用训练好的模型进行预测和提取中间输出(特征)【转】
- TensorFlow学习实践(一):使用TFRecord格式数据和队列进行模型训练和预测
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
- Tensorflow使用的预训练的resnet_v2_50,resnet_v2_101,resnet_v2_152等模型预测
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测(tf.graph_util.convert_variables_to_constants函数)
- Tensorflow使用的预训练的resnet_v2_50,resnet_v2_101,resnet_v2_152等模型预测,训练
- TensorFlow学习实践(二):使用TFRecord格式数据和tf.data API进行模型训练和预测
- TensorFlow学习实践(三):使用TFRecord格式数据和tf.estimator API进行模型训练和预测
- 使用opencv python导入tensorflow训练的Object Detection模型并进行预测
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
- TensorFlow学习实践(四):使用TFRecord格式数据和tf.contrib.slim API进行模型训练和预测
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
- 简单数据预测—使用Python训练回归模型并进行预测(转自蓝鲸网站分析博客)
- TensorFlow实操之—保存训练模型,并用训练模型进行实际预测应用
- tensorflow训练的模型在java中的使用