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

训练后TensorFlow模型磁盘占用未变化的问题排查求助

TensorFlow模型重训后保存,磁盘占用无变化问题

加载已保存的TensorFlow模型并拟合新数据后重新保存,发现磁盘占用空间未发生变化。先检查目录中是否存在模型,若存在则加载并拟合新数据,但重新保存后磁盘空间仍无变化。

代码片段

df = df[['y', 'h', 'o', 'l']]  
df2 = df.values

training = int(np.ceil(len(df) * .95)) 
# 准备TensorFlow数据
# MinMaxScaler要求单特征输入
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(df)
print(f"scaled_data {len(scaled_data)}")

# 使用过去多少天的数据预测次日价格
prediction_days = 500
train_data = scaled_data[0:int(training), :]
print(f"train_data {len(train_data)}")
# 准备训练数据
X_train = []
y_train = []

X_test = []
y_test = []

for x in range(prediction_days, len(train_data)):
    X_train.append(scaled_data[x - prediction_days:x, 0])
    y_train.append(scaled_data[x, 0])

    X_test.append(scaled_data[x - prediction_days:x, 0])
    y_test.append(scaled_data[x, 0])

X_train, y_train = np.array(X_train), np.array(y_train)
X_test, y_test = np.array(X_test), np.array(y_test)

# 重塑数据以适配神经网络
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))


print("Files")
print(os.path.isfile('model.h5'))
if os.path.isfile('model.h5') is False:
    model = Sequential()
    model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
    model.add(Dropout(0.2))
    model.add(LSTM(units=50, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(units=50))
    model.add(Dropout(0.2))
    model.add(Dense(units=60))
    # 定义优化算法
    opt = SGD(learning_rate=0.01, momentum=0.9)
    model.compile(optimizer="adam", loss='mean_squared_error')
    model.fit(X_train, y_train,  epochs=5, validation_data=(X_test, y_test))

    # 评估模型
    model.save('model.h5') 
    model = load_model('model.h5')

    model_json = model.to_json()
    with open("model.json", "w") as json_file:
        json_file.write(model_json)

    model.save_weights('model_weight.h5')
    model.load_weights('model_weight.h5')

else:
    # 加载json并创建模型
    json_file = open('model.json', 'r')
    loaded_model_json = json_file.read()
    json_file.close()
    model = model_from_json(loaded_model_json)

    # 加载权重到新模型
    model.load_weights("model.h5")
    print("Loaded model from disk")
    model.compile(optimizer='adam', loss='mean_squared_error')
    # 训练模型,分批迭代数据
    model.fit(X_train, y_train, epochs=5, validation_data=(X_test, y_test))

    # 检查模型是否在学习
    model_json = model.to_json()
    with open("model.json", "w") as json_file:
        json_file.write(model_json)

    model.save_weights('model_weight.h5')
    model.load_weights('model_weight.h5')

模型文件占用情况

模型文件占用情况


问题原因及解决方案

核心问题

  1. 权重加载错误:在else分支中,加载权重时错误使用了完整模型文件model.h5,而非专门的权重文件model_weight.h5,导致模型未正确加载原有训练权重。
  2. 未更新完整模型文件:重训后仅保存了权重文件model_weight.h5和结构文件model.json,但未更新完整模型文件model.h5——而磁盘占用的主要部分正是model.h5,因此磁盘空间无变化。另外,模型结构在训练过程中不会改变,重复保存model.json毫无意义。

修正后的else分支代码

else:
    # 加载json并创建模型
    json_file = open('model.json', 'r')
    loaded_model_json = json_file.read()
    json_file.close()
    model = model_from_json(loaded_model_json)

    # 修正:加载权重文件而非完整模型文件
    model.load_weights("model_weight.h5")
    print("Loaded model from disk")
    model.compile(optimizer='adam', loss='mean_squared_error')
    # 训练模型
    model.fit(X_train, y_train, epochs=5, validation_data=(X_test, y_test))

    # 新增:保存更新后的完整模型,覆盖原model.h5
    model.save('model.h5')
    # 保存更新后的权重
    model.save_weights('model_weight.h5')
    # 模型结构未变,无需重复保存model.json

说明

  • 加载权重时必须指定权重文件model_weight.h5,确保模型基于原有训练状态继续训练。
  • 重训完成后调用model.save('model.h5'),会覆盖原完整模型文件,更新其中的权重参数,磁盘上的model.h5大小会反映训练后的状态。
  • 模型结构文件仅在模型层结构修改时需要重新保存,训练过程不会改变结构,无需重复操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:45:31