【Pytorch】使用Pytorch简单实现一个线性模型

举报
海轰Pro 发表于 2022/09/29 23:21:02 2022/09/29
【摘要】 目录 简介前言例子1:线性模型参考资料结语 简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~   ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程...

在这里插入图片描述

简介

Hello!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
 
ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
 
唯有努力💪
 
本文仅记录自己感兴趣的内容

前言

通过一下小例子,梳理一下Pytorch中模型的搭建、训练、测试等…

加深理解

例子1:线性模型

模型 y = 2 ∗ x y = 2 * x y=2x

设置的时候 就设置为 y = w ∗ x y = w * x y=wx

简单一点 便与理解

import torch

# 自定义一个Pytorch线性模型的类
class LinerModel(torch.nn.Module):
    def __init__(self):
        # super 父类,调用父类的构造,这一步必须有
        # 第一个参数为定义类的名称,第二个为self
        super(LinerModel, self).__init__()
        '''构造一个对象,包含了权重与偏置Tensor
        Linear是属于Module的,因此可以自动实现前馈和反馈的计算
        nn:neural network的简写'''
        self.linear = torch.nn.Linear(1, 1)

    def forward(self, x):
        # 实际上是类的重写,该函数实际上已经在里面被写入了,这里需要重写一下
        # 当类中有"__call__"时才可调用
        y_pred = self.linear(x)  # 实现一个可调用的对象
        return y_pred


def train(times, lr):
    # 实例化类 ,该类为callable
    model = LinerModel()  # 是一个含有"__call__"的类,因此可以直接调用
    # model(x) # x 就会送入至forward的函数里,然后对x进行计算
    # 需要的数据是"\hat y" 与"y"
    criterion = torch.nn.MSELoss(size_average=False)
    # 构建优化器
    optimizer = torch.optim.SGD(model.parameters(), lr=lr)

    aa = []
    for epoch in range(times):
        # 前馈计算出 \hat y,即y_pred
        y_pred = model(x_data)
        # 前馈计算出 loss
        loss = criterion(y_pred, y_data)
        aa.append(loss.data.item())
        # 查看损失,loss输出的时候回自动变为标量
        # print(epoch,loss.data.item())
        # 所有的梯度归零
        optimizer.zero_grad()
        # 反馈,方向传播
        loss.backward()
        # 更新,根据所有参数和学习率来更新
        optimizer.step()

    # 输出权重(weight)和偏置(bias)
    print(f"w={model.linear.weight.item()}")
    print(f"b={model.linear.bias.item()}")

    # 测试模型(Test Model)
    x_test = torch.Tensor([[4]])
    y_test = model(x_test)
    print(f"y_pred={y_test.data}")

    return aa

if __name__ == '__main__':
    name = ["SGD"]
    # Pytorch中的数据等均为Tensor变量,即矩阵
    x_data = torch.Tensor([[1],[2],[3]]) # 相当于一个numpy.array
    y_data = torch.Tensor([[2],[4],[6]])
    # 训练200次 学习率:0.01 
    print(train(200,0.01))
    print("执行结束")

在这里插入图片描述

参考:https://blog.csdn.net/qq_44285092/article/details/108047578


Note

在这里插入图片描述
optimizer.zero_grad()的作用:
在这里插入图片描述

参考:https://blog.csdn.net/bigbigvegetable/article/details/114674793

参考资料

  • https://blog.csdn.net/qq_44285092/article/details/108047578
  • https://blog.csdn.net/bigbigvegetable/article/details/114674793

结语

文章仅作为个人学习笔记记录,记录从0到1的一个过程

希望对您有一点点帮助,如有错误欢迎小伙伴指正

在这里插入图片描述

文章来源: haihong.blog.csdn.net,作者:海轰Pro,版权归原作者所有,如需转载,请联系作者。

原文链接:haihong.blog.csdn.net/article/details/127090768

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。