如何在本地或全局保存经过训练的神经网络权重



我目前正在使用TensorFlow源来保存和恢复训练的NN模型权重:

# Save the weights
model.save_weights('./checkpoints/my_checkpoint')
# Create a new model instance
model = create_model()
# Restore the weights
model.load_weights('./checkpoints/my_checkpoint')

我也熟悉训练中的检查站,但我的问题是:

在训练模型时,我们可以本地或全局保存模型/权重,而不是将其保存到文件中吗?

我使用的是类似网格搜索的东西,但我有一个循环,在每次迭代中,我都会在数据集的某个部分上部分训练我的模型,然后保存训练/学习的权重,并在另一组数据集上继续训练/学习?

我工作的伪代码示例:

for i in range(1,10):
- use dataset A1 for training
- train model on dataset A1
- test on the testing dataset X
- save model weights
- restore model weights
- now use dataset A2
- run model on trained weights to see initial accuracy
- retrain the model on dataset A2 and keep previously saved weights
- save model weights
end

我已经看了其他类似的帖子,但它没有回答我的问题。

是的,你可以。方法是创建一个自定义回调。在回调中,创建了一个名为best_weights的类变量。如果验证损失是迄今为止产生的最低损失,则在每个历元结束时更新该类变量。下面是一个代码。

class LRA(keras.callbacks.Callback):
def __init__(self,model, verbose ):
super(LRA, self).__init__()
self.model=model
self.lowest_vloss=np.inf # set lowest validation loss to infinity        
best_weights=self.model.get_weights() # set a class vaiable so weights can be loaded after training is completed           

def on_epoch_end(self, epoch, logs=None):  # method runs on the end of each epoch
v_loss=logs.get('val_loss')  # get the validation loss for this epoch
if v_loss< self.lowest_vloss: # check if the validation loss improved
if verbose==1:
msg=f' validation loss improved from {self.lowest_vloss:8.5f} to {v_loss:8.5}, saving best weights' 
print (msg)
self.lowest_vloss=v_loss # replace lowest validation loss with new validation loss                
LRA.best_weights=self.model.get_weights() # validation loss improved so save the weights

在模型中。它包括回调=[LRA(模型,verbose=1(]

回调使类变量LRA.best_weights可用。它包含实现最低验证损失的epoch的模型权重。您可以在例如model.set_weights(LRA.best_weight(中使用它。在回调参数中,model是您的模型。参数verbose是一个整数。如果设置为1,则在历元结束时,如果验证损失有所改善,则会打印一条消息,说明已保存了最佳权重。如果verbose不等于1,则不打印任何消息。

相关内容

  • 没有找到相关文章

最新更新