TensorFlow Hub与tf.keras.applications迁移学习使用差异咨询
TensorFlow Hub与tf.keras.applications预训练模型迁移学习结果差异原因
首先你提供的第二段代码存在致命笔误,这是结果差异极大的首要排查点:调用create_model方法时你传入的参数是未定义的efficientnet_model,而非预先声明的权重链接efficientnet_url,会导致模型无法加载正确的预训练权重,正确写法如下:
efficientnet_model = create_model(efficientnet_url, num_classes = len(class_names))
排除笔误问题后,二者结果存在差异的核心原因如下:
- 输入预处理逻辑不匹配
tf.keras.applications.EfficientNetB0要求输入图像先经过tf.keras.applications.efficientnet.preprocess_input做归一化处理,若直接传入原始0-255像素值或提前自行做了归一化,输入分布和模型训练时的分布不一致,会直接导致特征提取错误。而TensorFlow Hub上的EfficientNet feature vector版本已经内置了预处理逻辑,直接接受0-255范围的原始RGB输入即可,若你的输入已经提前做了归一化,也会导致输入分布不符合要求。两个模型如果没有适配各自的预处理要求喂入数据,结果必然出现巨大差异。 - 预训练权重的训练策略存在差异
二者虽然架构完全一致,均基于ImageNet数据集训练得到权重,但训练过程的超参数、数据增强策略、正则化设置都有区别,最终得到的权重参数本身就存在差异,特征提取能力也会有区别。 - 随机波动影响
两个模型的输出层Dense权重都是随机初始化的,如果你没有固定全局随机种子,训练过程的随机波动(比如批次数据的顺序、梯度更新的微小差异)也会导致最终结果有区别,不过这种差异不会达到“极大”的程度,一般仅为个位数的准确率差异。
内容的提问来源于stack exchange,提问作者Calessla
相关产品推荐
相关产品推荐

