训练后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')
模型文件占用情况

问题原因及解决方案
核心问题
- 权重加载错误:在
else分支中,加载权重时错误使用了完整模型文件model.h5,而非专门的权重文件model_weight.h5,导致模型未正确加载原有训练权重。 - 未更新完整模型文件:重训后仅保存了权重文件
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
相关产品推荐
相关产品推荐

