"""读写TENSOR""" #我们可以直接使用save函数和load函数分别存储和读取Tensor。 #save函数使用Python的pickle实用程序将对象进行序列化,然后将序列化对象保存在disk,使用save可以保存各种对象,包括模型、张量和字典等。 #load函数使用pickle unpickle工具将pickle的对象文件反序列化为内存。
import torch
from pyexpat import model
from torch import nn
#创建tensor变量x,并将其存在文件名同为下x.pt的文件里。
x=torch.ones(3)
torch.save(x,'x.pt')
#然后将数据从存储的文件读回内存
x2=torch.load('x.pt')
print(x2)
#存储一个tensor列表并读回内存
y=torch.zeros(4)
torch.save([x,y],'xy.pt')
xy_list=torch.load('xy.pt')
print(xy_list)
#存储并读取一个从字符串映射到tensor的字典
torch.save({'x':x,'y':y},'xy_dict.pt')
xy=torch.load('xy_dict.pt')
print(xy)
输出:
"""读写模型"""
class MLP(nn.Module):
def __init__(self):
super(MLP, self).__init__()
self.hidden=nn.Linear(3,2)
self.act=nn.ReLU()
self.output=nn.Linear(2,1)
def forward(self,x):
a=self.act(self.hidden(x))
return self.output(a)
net=MLP()
print(net.state_dict())
#只有具有可以学习的参数的层(卷积层、线性层等)才有state_dict中的条目。优化器(optim)也有一个state_dict,其中包含关于优化器状态以及使用的超参数的信息。
optimizer=torch.optim.SGD(net.parameters(),lr=0.01,momentum=0.9)
print(optimizer.state_dict())
输出:
"""保存和加载模型 #保存和加载state_dict(推荐方式) torch.save(model.state_dict(),PATH) #加载 model=TheModelClass(*args,**kwargs) model.load_state_dict(torch.load(PATH))"""
X=torch.randn(2,3)
Y=net(X)
PATH="./net.pt"
torch.save(net.state_dict(),PATH)
net2=MLP()
net2.load_state_dict(torch.load(PATH))
Y2=net2(x)
Y2==Y
print(Y2)
输出: