调用 fit() 是不是应该保持模型的权重?
Posted
技术标签:
【中文标题】调用 fit() 是不是应该保持模型的权重?【英文标题】:Is calling fit() supposed to keep the model's weights?调用 fit() 是否应该保持模型的权重? 【发布时间】:2022-01-21 04:22:15 【问题描述】:目前,我正在使用一个自定义生成器,它不是作为类编写的,而是作为函数编写的。要重置我的生成器并将其内容重新洗牌,我只需要再次调用它。
所以,为了训练新的纪元,我在重启我的生成器后调用model.fit()
:
batches = 32
split_ratio = 0.8
epochs = 10
for i in range(epochs):
train_set = dataset_generator(clean_path, noisy_path, denoised_path, noise_data, batch_size=batches, shuffle=True,
partition="training", split=True, split_size=split_ratio, seed= batches+i,
image_dimension = [256,256,3])
valid_set = dataset_generator(clean_path, noisy_path, denoised_path, noise_data, batch_size=batches, shuffle=True,
partition="validation", split=True, split_size=split_ratio, seed= batches+i,
image_dimension = [256,256,3])
model.fit(train_set, validation_data=valid_set, batch_size=batches, verbose=1, )
model.save("./model_run" + str(i) + ".h5")
问题是:训练从准确度 0 开始,就像是从头开始训练一样。一个纪元结束和另一个纪元开始的 keras 输出:
#1st epoch:
757/Unknown - 754s 996ms/step - loss: 1.7376 - accuracy: 0.8544
#2nd epoch:
2/Unknown - 2s 919ms/step - loss: 1.5388 - accuracy: 0.6328
fit()
不应该保留权重吗?这里发生了什么?
【问题讨论】:
【参考方案1】:您可以自定义 fit() 方法:https://www.tensorflow.org/guide/keras/customizing_what_happens_in_fit/
但我认为您不应该生成数据集并拟合每个时期。
您需要为您的 TensorFlow 模型定义自己的训练循环。我曾经在我的估算器上调用过 train(input_fn=) 。 train 和 input_fn 方法包含用于训练的数据集解包和迭代。我在https://www.tensorflow.org/api_docs/python/tf/estimator/train_and_evaluate找到了一个例子
【讨论】:
以上是关于调用 fit() 是不是应该保持模型的权重?的主要内容,如果未能解决你的问题,请参考以下文章
是否再次调用 model.fit 方法重新初始化已经训练的权重?
调用 XGBoost .fit 后的 Python sklearn NotFittedError