代码写作套路【3】使用pytorch构建模型的2种方法

PyTorch深度学习实践:模型构建与训练详解
本文介绍了如何使用PyTorch构建深度学习网络,包括Class方法和Sequential方式,详细讲解了数据准备、模型设计、损失函数选择、训练过程及模型细节查看。还涵盖了保存模型和关键参考资料链接。
部署运行你感兴趣的模型镜像

在这里插入图片描述

pytorch是深度学习训练的常用框架,其代码书写有一些可以学习的套路。这个系列的博客将总结pytorch构建深度学习网络并训练的几种套路。

数据准备

实验数据中的x是特征,y是标签,二者均维1维标量,方便对实验结果进行查看。

x = torch.unsqueeze(torch.linspace(-1,1,100),dim=1)
y = x.pow(3)+0.1*torch.randn(x.size())

模型构建

方法1 Class

这里创建一个Net类,此类继承自nn.Module,因而在第一行需要写上super(Net,self).__init__()。模型中一共包括2个隐藏层,2个激活层,1个输出层。

class Net(nn.Module):
    def __init__(self,n_input,n_hidden,n_output):
        super(Net,self).__init__()
        self.hidden1 = nn.Linear(n_input,n_hidden)
        self.hidden2 = nn.Linear(n_hidden,n_hidden)
        self.predict = nn.Linear(n_hidden,n_output)
    def forward(self,input):
        out = self.hidden1(input)
        out = F.relu(out)
        out = self.hidden2(out)
        out = F.sigmoid(out)
        out =self.predict(out)
        return out

方法2 Sequential

这里的模型model通过Sequential方法构建,这种方法相较于上一种方法更加简单。

x = torch.unsqueeze(torch.linspace(-1,1,100),dim=1)
y = x.pow(3)+0.1*torch.randn(x.size())

n_input = 1
n_hidden = 10
n_output = 1
model = nn.Sequential(
    nn.Linear(n_input,n_hidden),
    nn.ReLU(),
    nn.Linear(n_hidden,n_hidden),
    nn.ReLU(),
    nn.Linear(n_hidden,n_output),
)
# loss_func = torch.nn.MSELoss()
# optimizer = torch.optim.SGD(model.parameters(),lr = 0.1)

损失函数与训练

损失函数一般都使用pytorch自己定义的一些损失函数,例如cross entropy等等。对于想要自己设计损失函数的情况,需要查看源码中的损失函数的写法,新的损失函数需要按照老损失函数进行定义。2种模型构建方法训练方法一致。

optimizer = torch.optim.SGD(net.parameters(),lr = 0.1)
loss_func = torch.nn.MSELoss()

for t in range(5000):
    prediction = net(x)
    loss = loss_func(prediction,y)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

训练结束后可以打印实验结果

plt.scatter(x.data.numpy(), y.data.numpy())
plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
plt.text(0.5, 0, 'Loss = %.4f' % loss.data, fontdict={'size': 20, 'color': 'red'})

请添加图片描述

查看模型细节

查看参数

采用方法1构建的模型,可以调用list(net.named_parameters())查看参数。该指令可以把模型的参数按照层数存储起来。
请添加图片描述
⚠️该指令只能打印命了名的层,没命名的层无法打印,所以在模型构造的时候尽量给每一层命名。

采用方法2构建的模型,模型是以list的形式存储的,可以像遍历列表那样遍历模型,并打印。Sequential格式进行构建的模型还可以打印中间结果。
请添加图片描述

保存模型

torch.save(net,'net.pkl')

参考

  1. pytorch 实现打印模型的参数值
  2. Pytorch获取中间层输出的几种方法
  3. 官网上的tutorial帖子BUILD THE NEURAL NETWORK
  4. Pytorch搭建简单神经网络(一)——回归
  5. 十分钟掌握Pytorch搭建神经网络的流程

您可能感兴趣的与本文相关的镜像

PyTorch 2.6

PyTorch 2.6

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值