pytorch 搭建网络步骤

pytorch 搭建网络步骤

  1. 准备数据
  2. 定义网络结构model
  3. 定义损失函数
  4. 定义优化算法 optimizer
  5. (有是还要定义更新学习率:scheduler=StepLR() )
  6. 训练
      5.1 准备好tensor形式的输入数据和标签(可选)
      5.2 前向传播计算网络输出output 和 计算损失函数loss
      5.3 反向传播更新参数
        以下三句话一句也不能少:
        5.3.1 optimizer.zero_grad() 将上次迭代计算的梯度值清0
        5.3.2 loss.backward() 反向传播,计算梯度值
        5.3.3 optimizer.step() 更新权值参数
       ( schedule.step(episode) 更新学习率)
      5.4 保存训练集上的loss和验证集上的loss以及准确率以及打印训练信息。(可选
  7. 图示训练过程中loss和accuracy的变化情况(可选)
  8. 在测试集上测试

示例代码:

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt

# 1.准备数据 generate data
x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)
print(x.shape)
y=x*x+0.2*torch.rand(x.size())
#显示数据散点图
plt.scatter(x.data.numpy(),y.data.numpy())

# 2.定义网络结构 build net
class Net(torch.nn.Module):
    #n_feature:输入特征个数  n_hidden:隐藏层个数 n_output:输出层个数
    def __init__(self,n_feature,n_hidden,n_output):
        # super表示继承Net的父类,并同时初始化父类的参数
        super(Net,self).__init__()
        # nn.Linear代表线性层 代表y=w*x+b  其中w的shape为[n_hidden,n_feature] b的shape为[n_hidden]
        # y=w^T*x+b 这里w的维度是转置前的维度 所以是反的
        self.hidden =torch.nn.Linear(n_feature,n_hidden)
        self.predict =torch.nn.Linear(n_hidden,n_output)
        print(self.hidden.weight)
        print(self.predict.weight)
    #定义一个前向传播过程函数
    def forward(self, x):
        #         n_feature  n_hidden  n_output
        #举例(2,5,1)   2         5         1
        #                    -  **  -
        #             ** - - -  **  - -
        #                    -  **  - - - **
        #             ** - - -  **  - -
        #                    -  **  -
        #            输入层    隐藏层    输出层
        x=F.relu(self.hidden(x))
        x=self.predict(x)
        return x
# 实例化一个网络为net
net = Net(n_feature=1,n_hidden=10,n_output=1)
print(net)
# 3.定义损失函数 这里使用均方误差(mean square error)
loss_func=torch.nn.MSELoss()
# 4.定义优化器 这里使用随机梯度下降
optimizer=torch.optim.SGD(net.parameters(),lr=0.2)
#定义300遍更新 每10遍显示一次
plt.ion()
# 5.训练
for t in range(100):
    prediction = net(x)     # input x and predict based on x
    loss = loss_func(prediction, y)     # must be (1. nn output, 2. target)
    # 5.3反向传播三步不可少
    optimizer.zero_grad()   # clear gradients for next train
    loss.backward()         # backpropagation, compute gradients
    optimizer.step()        # apply gradients

    if t % 10 == 0:
        # plot and show learning process
        plt.cla()
        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.numpy(), fontdict={'size': 20, 'color':  'red'})
        plt.show()
        plt.pause(0.1)

plt.ioff()

参考:pytorch基础-搭建网络

PyTorch是一个开源的深度学习框架,可以用于搭建深度网络。下面是使用PyTorch搭建深度网络的一般步骤: 1. 导入必要的库和模块:首先,我们需要导入PyTorch库和模块,包括torch、torch.nn和torch.optim。 2. 创建网络模型:使用torch.nn模块定义一个自定义的网络模型类,在这个类中定义网络的结构,包括网络层、激活函数和其他运算。 3. 初始化网络模型:实例化上一步中定义的网络模型类,得到网络模型的对象。 4. 定义损失函数:根据任务的特点选择适当的损失函数,例如分类任务可以使用交叉熵损失函数。 5. 定义优化器:选择合适的优化算法,例如随机梯度下降(SGD)或者Adam优化器等。 6. 训练网络:使用训练数据集对网络模型进行训练。循环遍历训练数据集,将输入数据输入网络模型,得到输出,并与标签进行比较计算损失,然后使用反向传播将损失传递给网络模型,优化模型参数。 7. 测试网络:使用测试数据集对训练好的网络模型进行性能评估。输入测试数据集到网络模型中,得到输出,并与标签进行比较,评估模型的准确率或其他性能指标。 8. 保存和加载模型:可以将训练好的模型保存到文件中,以便后续使用。也可以从文件中加载已经训练好的模型。 以上是使用PyTorch搭建深度网络的基本步骤。在实际应用中,还可以根据具体情况对网络模型进行调参、使用数据增强技术提高模型性能等。通过灵活运用PyTorch的强大功能,可以快速搭建深度网络,并进行训练和评估。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值