You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

训练前保存TensorFlow模型导致训练失效的原因咨询

训练前保存TensorFlow模型导致训练效果暴跌的原因

我发现训练前保存TensorFlow模型会导致训练效果极差。虽然知道解决办法是训练后再保存,但想搞懂这一现象的根本原因。


正常运行的代码及输出

以下代码训练MNIST数据集时表现正常:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0


model = tf.keras.Sequential([
    layers.Flatten(input_shape=(28,28)),
    layers.Dense(16, activation='relu'),
    layers.Dense(16, activation='relu'),
    layers.Dense(10)
])

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer='adam',
             loss=loss_fn,
             metrics=['accuracy'])

### model.save('my_model') ###
model.fit(x_train, y_train, epochs=3, verbose=1)

训练输出:

Epoch 1/3
1875/1875 [==============================] - 3s 1ms/step - loss: 0.4513 - accuracy: 0.8688
Epoch 2/3
1875/1875 [==============================] - 2s 1ms/step - loss: 0.2326 - accuracy: 0.9333
Epoch 3/3
1875/1875 [==============================] - 2s 1ms/step - loss: 0.1974 - accuracy: 0.9432

取消注释后的异常情况

取消倒数第二行model.save('my_model')的注释后,训练效果严重恶化:

修改后的关键代码:

# ... 其余代码与上述一致 ...
model.save('my_model')
model.fit(x_train, y_train, epochs=3, verbose=1)

训练输出:

INFO:tensorflow:Assets written to: my_model\assets
Epoch 1/3
1875/1875 [==============================] - 3s 1ms/step - loss: 0.4156 - accuracy: 0.0948
Epoch 2/3
1875/1875 [==============================] - 2s 1ms/step - loss: 0.2149 - accuracy: 0.1000
Epoch 3/3
1875/1875 [==============================] - 2s 1ms/step - loss: 0.1840 - accuracy: 0.0998

根本原因分析

这是因为Keras在保存模型时会触发模型计算图的构建流程,而部分TensorFlow/Keras版本存在bug:训练前保存会重置模型权重与优化器状态。

具体逻辑:

  • 调用model.compile后,模型完成了优化器、损失函数的配置,但权重仍为随机初始化状态,且未执行过任何前向/反向传播。
  • 调用model.save时,Keras会将模型序列化为SavedModel格式,这个过程中会强制构建模型的计算图,但此时会意外触发权重的重新随机初始化,同时优化器的内部状态(比如Adam的动量项、学习率调度参数)也会被重置。
  • 后续model.fit实际是在使用一套全新的、未与优化器正确绑定的随机权重训练,模型完全无法收敛,准确率接近随机猜测的10%(对应MNIST的10个类别)。

简单来说:训练前保存模型会打乱刚配置好的模型状态,相当于重新初始化了一遍,自然训不出正常效果。

内容的提问来源于stack exchange,提问作者Jonomyster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:09:24