Pytorch神经网络-区分类型和保存提取

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'))

该方法比提取整个神经网络要快。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 小时候,我穿梭在田间野花野草里。奔跑着、歌唱着、嬉戏着,那时候无忧无虑,每朵花儿都很可爱。 慢慢长...
    夕子一一阅读 608评论 13 3
  • 性能问题是开发到后期一直要做的东西。现在我在着手准备一个新的项目,由于是菜鸟,对于一些性能相关的一直没有深入的了解...
    Zax_Smile阅读 274评论 0 1