Pytorch设计一个简单的线性模型神经网络

使用pytorch设计一个简单的线性模型,在此之前,需要小伙伴们学习或了解损失函数、梯度下降算法、正向传播、反向传播等神经网络基本的概念和原理

使用pytorch设计神经网络有四个步骤:1.准备数据集 2.设计神经网络 3.构建损失函数和优化器 4.编写训练周期

1.准备数据集

我们使用一组简单的数据即可,定义线性模型需要的数据集

x_data = torch.Tensor([[1.0],[2.0],[3.0]])  #3*1的矩阵
y_data = torch.Tensor([[2.0],[4.0],[6.0]])  #3*1的矩阵

2.设计神经网络

在pytorch中,每一个神经网络都是一个类,而定义该类时,必须继承torch.nn.Module,在这儿我们定义一个LinearModel的线性模型类,且必须至少定义两个函数,构造函数__init__()和正向传播函数forward()

# 所有的模型都以类的形式定义,且必须继承torch.nn.Module
class LinearModel(torch.nn.Module):
    # 每个模型必须至少定义两个函数 构造函数init 和 正向传播函数forward
    def __init__(self):
        super(LinearModel, self).__init__()
        # 定义 一个线性模型对象linear  类nn.Linear包含两个成员tensor,权重weight、偏移量bias
        '''
        torch.nn.Linear(in_features,out_features,bias=True)
        in_features 和 out_features是输入和输出的维度  bias=True要不要设置偏移量
        '''
        self.linear = torch.nn.Linear(1, 1)

    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred

3.构造损失函数和优化器

先定义一个线性模型LinearModel的类对象model

model = LinearModel()

#构造损失函数 只需要y_pred和y就能算出损失总和或者损失平均值
criterion = torch.nn.MSELoss(size_average=False)
#构造优化器 有众多的优化器 优化器就是对权重进行更新的一个工具
#class  torch.optim.Adagrad、Adam、Adamax、ASGD、LBFGS、RMSprop、Rprop、SGD
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)  #优化器对象  model.parameters()模型的权重、 lr是学习率

4.编写训练过程

#训练过程:前馈、反馈、更新
# 四个步骤:1.算y_hat 2.根据y_hat和y计算损失(正向传播) 3.梯度的所有权重归零后反向传播  4.更新梯度的所有权重
for epoch in range(100): 
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)  #计算损失的过程就是构建计算图的过程
    print(epoch,loss)  #打印loss时,会自动调用loss的__str__()函数
    optimizer.zero_grad()  #让所有梯度的所有权重都归零后才能进行反向传播,即让上一次反向传播生成的梯度都归零

    loss.backward() #反向传播 计算梯度
    optimizer.step()  #更新梯度  如 w = w - lr*损失对w的偏导数

5.打印权重weight和偏移量bias以及测试模型

#打印weight和bias
print('w=',model.linear.weight.item())  # .item()获取权重的值 否则就是一个weight的矩阵
print('b=',model.linear.bias.item())  #

#测试模型
x_test = torch.Tensor([[4.0],[10.0]])  #这是一个2*1的矩阵
y_test = model(x_test)
print('y_pred = ',y_test.data)  #根据线性模型输入是2*1的矩阵,那么得到的也是2*1的矩阵
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值