pytroch--保存和提取神经网络

本文介绍如何在PyTorch中保存已训练的神经网络模型,并详细讲解了模型的加载过程,确保可以恢复训练状态。

我们想要保存神经网络的模型,就需要知道保存和提取我们已经训练好的模型:

在这里插入代码片
import torch
import numpy as np
import matplotlib.pyplot as plt
from torch.nn.functional as F  #获得神经网络的激励函数
from torch.autograd import Variable  #变量(将张量数据变量化,神经网络只能处理变量)

x = torch.unsqueeze(torch.linspace(-1,1,100),dim=1)  #使用unsqueeze将数据转换为二维数据,需要用上dim参数
y = x.pow(2) + 0.2*torch.rand(x.size())
x, y = Variable(x,requires_grad=False), Variable(y,requires_grad=False)


#搭神经网络
def save():
	net = torch.nn.Sequential(
		torch.nn.Linear(1,10),
		torch.nn.ReLU(),
		torch.nn.Linear(10,1),
	)
	

	
	#优化
	optimizer = torch.optim.SGD(net.parameters(), lr=0.5)
	loss_func = torch.nn.MSELoss()   #均方差足以解决回归问题中的误差
	
	#训练
	for t in range(100):
		prediction = net(x)
		loss = loss_func(prediction, y)
		optimizer.zero_grad()
		loss.backward()
		optimizer.step()
	
		torch.save(net,'net.pkl')  #保存在整个神经网络
		torch.save(net.state_dict(),'net_params.pkl')    #只保存神经网络的参数
		
		#以下为画图代码:
		plt.figure(figsize=(10,3))
		plt.sunplot(131)
		plt.title('net')
	    plt.scatter(x.data.numpy(), y.data.numpy())
	    plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
	    plt.show()


#提取整个神经网络
def restore_net():
	net1 = torch.load('net.pkl')
	prediction = net1(x)
	plt.sunplot(132)
	plt.title('net1')
	plt.scatter(x.data.numpy(), y.data.numpy())
	plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
	plt.show()

#提取神经网络的参数(这个方法比较快,但是需要重新建立一个一样的神经网络)
def restore_params():
	net2 = torch.nn.Sequential(
		torch.nn.Linear(1,10),
		torch.nn.ReLU(),
		torch.nn.Linear(10,1)
	)
	net2 = torch.load_state_dict(torch.load('net_params.pkl'))
	prediction = net2(x)
	plt.sunplot(133)
	plt.title('net2')
	plt.scatter(x.data.numpy(), y.data.numpy())
	plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
	plt.show()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值