已训练的TensorFlow自编码器保存时出现compiled metrics未构建警告如何解决
警告产生原因
你完成编译、全量训练的对象是完整的自编码器model,后续单独定义的encoder是全新的独立Keras模型,既没有执行compile编译操作,也没有单独针对它做训练,直接调用save方法保存时,TensorFlow检测到该模型无编译相关状态配置,就会触发该警告。
处理方案
- 如果你保存encoder仅用于后续特征提取推理,不需要再训练,该警告完全不影响正常使用,可以直接忽略。
- 如果你需要消除警告,可二选其一操作:
- 保存时关闭优化器状态存储:修改save语句为
encoder.save('drive/MyDrive/encoder_rf.h5', include_optimizer=False),不需要存储训练相关的优化器信息,自然不会触发编译状态检查。 - 若后续需要对encoder做微调训练,可在保存前对它执行编译:增加一行代码
encoder.compile(optimizer='adam', loss='binary_crossentropy')后再保存即可。
- 保存时关闭优化器状态存储:修改save语句为
额外代码问题提醒
你当前的模型结构代码存在逻辑错误:
编码器的四层全连接层输入都接了初始输入visible,属于并行结构,最终只有最后一层50神经元的输出有效,前面三层代码完全不生效;解码器同理,所有全连接层输入都接了bottleneck,也只有最后一层300神经元的输出有效。如果你设计的是串行堆叠结构,需要将每层输入改为上一层的输出,修改示例如下:
# 编码器正确串行写法 e = Dense(300)(visible) e = ReLU()(e) e = Dropout(0.05)(e) # 下一层输入是上一层的输出e,不是visible e = Dense(200)(e) e = ReLU()(e) e = Dropout(0.05)(e) # 后续编码器层、解码器层都按照该逻辑修改即可
你提供的训练过程截图如下:
内容的提问来源于stack exchange,提问作者ubuntu_noob
相关产品推荐
相关产品推荐

