torch.save(model.state_dict(), ‘best_model.pth‘)

文章介绍了在PyTorch中如何使用`torch.save()`和`model.state_dict()`来保存和加载模型的参数。通过保存模型的参数字典,可以实现模型的持久化,便于在后续训练或预测时恢复模型状态。加载时需确保创建与原始模型结构相同的实例,再调用`load_state_dict()`加载参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

torch.save(model.state_dict(), 'best_model.pth') 是一个将模型的参数字典保存到文件的操作。在这个示例中,model.state_dict() 返回了当前模型的参数字典,然后使用 torch.save() 函数将参数字典保存到名为 "best_model.pth" 的文件中。

这种方式是一种常见的保存模型的方法,它将模型的参数保存为一个二进制文件,以便在需要时进行加载和恢复。保存参数字典而不是整个模型的原因是模型的结构和计算图不需要保存,只需要保存模型的权重和偏置等可学习参数即可。

要加载保存的模型参数,可以使用以下代码:

model = MyModel()  # 创建一个与保存模型参数相同的模型实例
model.load_state_dict(torch.load('best_model.pth'))  # 加载参数字典到模型中

通过这样的加载方式,可以将保存的模型参数加载到一个与原始模型结构相同的模型实例中,从而恢复模型的参数。这样可以在训练过程中保存最佳模型,或在需要时加载模型并进行预测或继续训练。

model.state_dict()

model.state_dict() 是一个方法,用于返回模型的参数字典(state_dict)。模型的参数字典是一个Python字典对象,其中包含了模型的所有可学习参数(权重和偏置)及其对应的张量数值。

在深度学习中,模型的参数通常由各个层的权重和偏置组成。model.state_dict() 方法会返回一个字典,其中键是每个参数的名称,值是对应参数的张量数值。

使用 model.state_dict() 的主要目的是保存和加载模型的参数。通过调用 model.state_dict() 可以获取当前模型的参数字典,然后可以将其保存到文件中。保存模型的参数字典后,可以使用 torch.load() 加载字典,并将其加载到模型中,从而恢复模型的参数。

以下是一个示例代码,演示了如何使用 model.state_dict() 保存和加载模型的参数:

# 保存模型的参数
torch.save(model.state_dict(), 'model.pth')

# 加载模型的参数
model = MyModel()  # 创建一个空白模型
model.load_state_dict(torch.load('model.pth'))

这样,模型的参数就可以从保存的文件中加载回来,并应用于新的模型实例。这在训练过程中保存和加载模型,或者在不同的会话中迁移模型等场景中非常有用。

#LSTM #from tqdm import tqdm import os os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:128" import time #GRUmodel=GRU(feature_size,hidden_size,num_layers,output_size) #GRUmodel=GRUAttention(7,5,1,2).to(device) model=lstm(7,20,2,1).to(device) model.load_state_dict(torch.load("LSTMmodel1.pth",map_location=device))#pytorch 导入模型lstm(7,20,4,1).to(device) loss_function=nn.MSELoss() lr=[] start=time.time() start0 = time.time() optimizer=torch.optim.Adam(model.parameters(),lr=0.5) scheduler = ReduceLROnPlateau(optimizer, mode='min',factor=0.5,patience=50,cooldown=60,min_lr=0,verbose=False) #模型训练 trainloss=[] epochs=2000 best_loss=1e10 for epoch in range(epochs): model.train() running_loss=0 lr.append(optimizer.param_groups[0]["lr"]) #train_bar=tqdm(train_loader)#形成进度条 for i,data in enumerate(train_loader): x,y=data optimizer.zero_grad() y_train_pred=model(x) loss=loss_function(y_train_pred,y.reshape(-1,1)) loss.backward() optimizer.step() running_loss+=loss.item() trainloss.append(running_loss/len(train_loader)) scheduler.step(trainloss[-1]) #模型验证 model.eval() validation_loss=0 validationloss=[] with torch.no_grad(): #validation_bar=tqdm(validation_loader) for j,data in enumerate(validation_loader): x_validation,y_validation=data y_validation_pred=model(x_validation) validationrunloss=loss_function(y_validation_pred,y_validation.reshape(-1,1)) validation_loss+=validationrunloss #validation_bar.desc="loss:{:.4f}".format(validation_loss/len(validation_loader)) validation_loss=validation_loss/len(validation_loader) validationloss.append(validation_loss) end=time.time() print("learningrate:%.5f,epoch:[%5d/%5d]time:%.2fs, train_loss:%.5f,validation_loss:%.6f" % (lr[-1],epoch, epochs, (end - start),trainloss[-1],validationloss[-1])) start = time.time() if validationloss[-1]<best_loss: best_loss=validationloss[-1] torch.save(model.state_dict,"LSTMmodel1.pth") #torch.save(model.state_dict,"LSTMmodel.pth") end0 = time.time() print("the total training time is :%.2fmin" % ((end0 - start0) / 60)) 报错:Expected state_dict to be dict-like, got <class 'method'>.
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高山莫衣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值