深度学习 第五讲 pytorch实现线性回归

训练过程
在这里插入图片描述
在这里会使用 mini-batch风格!!!
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
其中_init_函数必须实现,第一句调用父类方法

第二句,用自带的Linear(1,1)构造w = 1,b = 1的函数

forward方法必须实现

在这里插入图片描述在其中实现__call__方法相当于重载了 (),在pythorch的__call__方法中定义了forward。所以我们继承父类,需要将froward方法实例化
在这里插入图片描述

这里面的model可以直接被调用
代码如下

import torch

##准备训练数据
x_data = torch.Tensor([[1.0],[2.0],[3.0]])
y_data = torch.Tensor([[2.0],[4.0],[6.0]])

###确定模型
class LinearModel(torch.nn.Module):
    ###继承torch.nn.Module
    def __init__(self):
        super(LinearModel,self).__init__()
        self.linear = torch.nn.Linear(1,1)
        ###对象初始化的时候,就是w = 1 ,b = 1的线性模型
        ###获取w/b的方式分别是~linear.weight/linear.bias

    def forward(self,x):
        #Module实现了魔法函数__call__(),call()里面有一条语句是要调用forward()。因此新写的类中需要重写forward()覆盖掉父类中的forward()
        #call函数的另一个作用是可以直接在对象后面加(),例如实例化的model对象,和实例化的linear对象。相当于重载了()
        #本算法的forward体现是通过以下语句实现的:
        #y_pred = model(x_data)
        y_pred = self.linear(x)
        return y_pred


###定义模型
model = LinearModel()
# 构造 loss and optimizer
criterion = torch.nn.MSELoss(size_average = False)
#criterion = torch.nn.MSEloss(reduction = 'sum')
###
optimizer = torch.optim.SGD(model.parameters(),lr = 0.01)

for epoch in range(1000):
    y_pred = model(x_data)
    #相当于调用了forward(),计算出了y_pred = w*x + b
    loss = criterion(y_pred,y_data)
    #计算loss,如果size_average = True,则会计算平均值
    print(epoch,loss.item())
    #由于这个loss是一个计算图
    optimizer.zero_grad()
    #一轮之后将梯度降为0
    loss.backward()
    #计算图中的梯度全部放在optimizer中
    optimizer.step()
    #更新!

print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())

x_test = torch.tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值