CrossEntropyLoss针对多分类问题使用的损失函数。计算的是Softmax,就是概率。最后输出的是每一个类型的概率。其它操作和回归几乎一样。
磊神经层
net2 = torch.nn.Sequential(
torch.nn.Linear(2, 10),
torch.nn.ReLU(),
torch.nn.Linear(10, 2),
)
该方法与直接用类定义神经网络方法不同的地方在于激励函数的类型。在该方法中激励函数是一个类。而使用类方法构建神经网络的时候激励函数是一个功能。
保存提取
假设我们已经搭好并训练好了神经网络,我们想保存它此时的状态明后天提取它并继续使用它。
假设我们已经搭建好了一个神经网络,之后要做的就是保存该神经网络。
torch.save(net1, 'net.pkl')
将参数传入torch中,以.pkl的形式进行保存。
另一种保留方式。不保留整个图,只保留图中的结点。
torch.save(net1.state_dict(), 'net_params.pkl')
net1.state_dict()是神经网络中的各种参数。
保存神经网络:
def save():
net1 = torch.nn.Sequential(
torch.nn.Linear(1, 10),
torch.nn.ReLU(),
torch.nn.Linear(10, 1),
)
optimizer = torch.optim.SGD(net1.parameters(), lr=0.02)
loss_func = torch.nn.MSELoss()
for t in range(100):
out = net(x)
#计算prediction和y之间的误差。prediction是预测值,y是真实值。顺序一定要对。位置不同,结果也会不同。
loss = loss_func(out, y)
#优化步骤
#将神经网络所有参数的梯度降为0
optimizer.zero_grad()
#计算出梯度
loss.backward()
#优化梯度
optimizer.step()
torch.save(net1, 'net.pkl')
torch.save(net1.state_dict(), 'net_params.pkl')
提取神经网络
使用torch的load方法,参数是之前创建的神经网络的文件。
def restore_net():
#将要提取的神经网络放入net2中
net2 = torch.load('net.pkl')
提取神经网络的参数。在提取参数前需要建立一个完整的和net1的神经网络一样的神经网络,之后再将参数复制到net3中。
def restore_params():
net3 = torch.nn.Sequential(
torch.nn.Linear(1, 10),
torch.nn.ReLU(),
torch.nn.Linear(10, 1),
)
net3.load_state_dict(torch.load('net_params.pkl'))
该方法比提取整个神经网络要快。
网友评论