【深度学习】详解如何保存训练好的最优模型

目录

 

保存最佳模型的两种方式:

第一种:

第二种:

完整代码展示: 


保存最佳模型的两种方式:

第一种:

'''保存模型权重'''
torch.save(model.state_dict(),'model_parameter.pt')

他的读取model方式为

'''1.读取权重'''
model=cnn().to(device)
model.load_state_dict(torch.load("model_parameter.pt"))

详细如何读取可以看我的这篇博客: Pytorch——模型的读取_AI_dataloads的博客-CSDN博客

第二种:

'''保存完整模型'''
torch.save(model,'best_model.pt')

他的读取model方式为

'''2.读取完整模型'''
model=torch.load('best_model.pt')

详细如何读取模型可以看我的这篇博客: Pytorch——模型的读取_AI_dataloads的博客-CSDN博客

完整代码展示: 

  1. 首先我们通过定义一个变量 best_acc,用于追踪最佳准确率。
  2. 然后在我们的test函数中 声明 best_acc 为全局变量,以便在函数内部修改使用它。
  3. 通过计算出的准确率correct,best_acc比较,如果correct>best_acc:,则将此时的模型通过torch.save()保存下来。
  4. 通过多轮训练与测试,找到准确率最高的模型,并保存下来生成pt文件,这样我们的模型也就保存下来了。
  5. 后续如何使用我们已保存在pt文件可以查看我的这篇博客
# best_acc=0:定义一个变量 best_acc,用于追踪最佳准确率。
best_acc=0
# 定义一个函数,用于测试模型在给定数据集上的性能。
def test(dataloader, model, loss_fn):
    # 声明 best_acc 为全局变量,以便在函数内部修改它。
    global best_acc
    size = len(dataloader.dataset)  # 获取总数据
    num = len(dataloader)
    model.eval()  # 进入测试模式
    test_loss, correct = 0, 0
    with torch.no_grad():
        for X, y in dataloader:
            X, y = X.to(device), y.to(device)
            pred = model.forward(X)
            test_loss += loss_fn(pred, y).item()
            correct += (pred.argmax(1) == y).type(torch.float).sum().item()
    test_loss /= num
    # 计算准确率。
    correct /= size
    acc_s.append(correct)
    loss_s.append(test_loss)
    '''保存最好的模型'''
    if correct>best_acc:
        best_acc=correct
        print(model.state_dict().keys())
        '''保存模型权重'''
        torch.save(model.state_dict(),'model_parameter.pt')
        '''保存完整模型'''
        torch.save(model,'best_model.pt')
    print(f'Test result:\nAccuracy:{correct * 100:.4f}%,Avg loss :{test_loss}')

在Keras中,训练深度学习模型保存最优模型通常是通过回调函数`ModelCheckpoint`来实现的。这是一个内置的Keras回调,它允许你在训练过程中定期检查点模型,并保存当前最佳验证指标对应的模型。 以下是使用`ModelCheckpoint`的基本步骤: 1. **创建模型**: ```python model = ... # 创建你的Keras模型 ``` 2. **配置保存策略**: ```python from tensorflow.keras.callbacks import ModelCheckpoint checkpoint_path = "path/to/checkpoint/{epoch:02d}-{val_loss:.2f}.hdf5" checkpoint_callback = ModelCheckpoint( filepath=checkpoint_path, monitor='val_loss', # 监控验证损失(val_loss) save_best_only=True, # 只保存最佳模型 mode='auto', # 'min' 或 'max',这里是减小验证损失 ) ``` 3. **编译模型训练**: ```python model.compile(...) history = model.fit(X_train, y_train, validation_data=(X_val, y_val), epochs=num_epochs, callbacks=[checkpoint_callback]) ``` 4. **加载最优模型**: 训练结束后,你可以通过`load_model()`函数从文件系统加载最佳模型: ```python best_model = load_model(checkpoint_path.format(epoch=history.epoch[-1], val_loss=history.history['val_loss'][-1])) ``` `ModelCheckpoint`会在每个epochs结束时检查验证指标的变化,如果发现一个新的最优值,就会自动保存模型。如果你需要手动停止训练并恢复最优模型,可以在训练过程中使用`EarlyStopping`回调结合`ModelCheckpoint`一起使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值