Pytorch深度学习(四):用Pytorch实现线性回归

2023-10-29

一、概念

在这里插入图片描述
上图主要介绍了使用Pytorch解决问题的四个步骤:

1.准备数据集

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

在这里插入图片描述

2.使用Class设计模型

#2.使用Class设计模型
class LinearModel(torch.nn.Module):
    #构造函数,初始化
    def __init__(self):
        super(LinearModel,self).__init__()
        self.liner = torch.nn.Linear(1,1)  #(1,1)表示输入和输出的维度
        
    #前向传播函数
    #forward()相当于对父类_init_()进行重载   
    def forward(self,x):
        y_pred = self.liner(x)
        return y_pred
    
model = LinearModel()  #创建类LinearModel的实例

在这里插入图片描述
我们的模型类应继承自nn.Module(所有神经网络模块的基类)。成员方法__init __()和forward()必须实现。nn.Linear类包含两个Tensor:权重和偏差。nn.Linear类已实现magic method __call __(),该方法使类的实例可以像函数一样被调用。 通常将调用forward()。

其中关于class torch.nn.Linear的用法:
在这里插入图片描述
在这里插入图片描述

3.构建损失函数和优化器的选择

#3.构建损失函数和优化器的选择
criterion = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

这一部分主要使用pytorch进行损失函数以及优化器的选择

4.进行训练的迭代。

#4.进行训练迭代
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print(epoch,loss.item())  #.item()获取数值大小
    
    #由.backward()计算的grad将被累积。 因此,在反向传播之前,记住将梯度设置为0。
    optimizer.zero_grad()
    loss.backward()    
    optimizer.step()  #进行更新update

二、完整代码如下:

import torch

#loss  必须是一个标量才可以用backward。

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

#2.使用Class设计模型
class LinearModel(torch.nn.Module):
    #构造函数,初始化
    def __init__(self):
        super(LinearModel,self).__init__()
        self.liner = torch.nn.Linear(1,1)  #(1,1)表示输入和输出的维度
        
    #前向传播函数
    #forward()相当于对父类_init_()进行重载   
    def forward(self,x):
        y_pred = self.liner(x)
        return y_pred
    
model = LinearModel()  #创建类LinearModel的实例

#3.构建损失函数和优化器的选择
criterion = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

#4.进行训练迭代
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print(epoch,loss.item())  #.item()获取数值大小
    
    #由.backward()计算的grad将被累积。 因此,在反向传播之前,记住将梯度设置为0。
    optimizer.zero_grad()
    loss.backward()    
    optimizer.step()  #进行更新update
    
#输出权重w和偏置b
print('w=',model.liner.weight.item())
print('b=',model.liner.bias.item())

#测试模型
x_test = torch.Tensor([4.0])
y_test = model(x_test)
print('y_pred = ',y_test.data)

运行结果:
在这里插入图片描述
参考学习链接:https://www.bilibili.com/video/BV1Y7411d7Ys?t=1699&p=5

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch深度学习(四):用Pytorch实现线性回归 的相关文章

  • 人工智能 机器学习实验总结

    答案仅供参考 1 数据预处理 给定数据集datingTest 实验任务 读取DatingTest的数据文件 1 并输出第一列数据的最大 最小和均值 2 输出该文件有多少数据 3 计算第一条数据和第二条数据的欧式距离 import panda
  • 面试题 v-if跟v-show的区别

    v if v show 区别 展示形式不同 v if是 创建一个dom节点 V show 是 display none block 使用场景不同 初次加载 v if 要 比v show 好 页面不会做加载盒子 频繁切换 v show 要比
  • JDK8新特性(七)之Stream流的count()、filter()、limit()、skip()方法

    1 Stream流的count 方法 Stream流提供count方法来统计其中的元素格式 long count 该方法返回一个long值代表元素个数 基本使用 import java util ArrayList import java
  • cmake

    cmake的常用命令 cmake minimum required message project set add executable add compile options add subdirectory add library ta

随机推荐

  • python -- 替换netcdf文件中的时间

    最近 在处理nc文件时 在时间上存在部分缺失的数据 为了避免影响后续操作 这里通过复制前一时刻的nc数据进行替代 但是虽然缺失时刻的数据得到了填充 但是填充的数据的时间属性本质上仍然是前一时刻的 为了保证时间的一致性 这里通过一个更新时间的
  • ARM(IMX6U)裸机C语言蜂鸣器驱动实验(BSP+SDK)

    参考 Linux之ARM IMX6U 裸机C语言蜂鸣器驱动实验 驱动编写 编译 作者 一只青木呀 发布时间 2020 08 16 14 47 23 网址 https blog csdn net weixin 45309916 article
  • android adb常用指令

    Android 调试桥 adb 是多种用途的工具 该工具可以帮助你你管理设备或模拟器 的状态 可以通过下列几种方法加入adb 在设备上运行shell命令 通过端口转发来管理模拟器或设备 从模拟器或设备上拷贝来或拷贝走文件 下面对adb进行了
  • C++数组的正确释放方式

    include
  • mariadb日志报错:error while loading shared libraries: libjemalloc.so.2处理办法

    Linux下找不到so文件的解决办法 rznice 2016 03 11 16 39 27 19494 收藏 1 分类专栏 linux 版权 最近在安装完tengine 在启动tengine时报找不到libjemalloc so 2的提示
  • # Odoo丨Odoo框架源码研读一:前后端交互

    Odoo丨Odoo框架源码研读一 前后端交互 本期内容 Odoo框架源码研读之 前后端交互 Odoo框架是一款企业应用快速开发平台 适用于各种规模的企业应用 安装与使用十分广泛 Odoo框架源码的第一篇研读内容 前后端交互 源码文件结构 O
  • 浅析Python中“if __name__ == __main__”的意义

    首先可以用一句话概括 if name main 语句的意义是为了使当前脚本可以正常执行 在被其他脚本调用时也可以执行 举个栗子 print py 文件中的代码如下 print the first if name main print the
  • uniapp 子组件向父组件传值

    使用组件可以减少代码的重复率 提高写代码的效率 改起来也方便 最近在使用uni app做项目 一套代码多端实现 做些简单的项目还是可以的 废话少说 说说子组件向父组件传值 子组件获取到值的时候 使用 emit传给父组件 this emit
  • c++函数为什么带imp_二次函数含参最值问题,老师怎么讲学生都不明白,试试这九张动图...

    一入函数深似海 从此数学是路人 很多同学都有这样的感觉 问 数学是从什么开始听不懂了 答 学函数的时候 函数问题作为中学阶段数学重要的知识点 真的是难倒了很多同学 数学老师也非常的痛苦 每次讲完函数问题 看到大家一脸茫然的表情 都会狠狠心再
  • Mac M1 Xcode创建动态链接库dylib(c++)——JNA-JNI(三)

    Mac M1 Xcode创建动态链接库dylib c JNA JNI 三 系列文章 Java通过JNI调用C 动态链接库dll 并打在jar包内 JNA JNI 一 Java使用JNA调用C 动态链接库 JNA JNI 二 Mac M1 X
  • 学1个月python爬虫就月赚6000?告诉你爬虫的真实情况!

    用爬虫赚外快的事情我也干了很多年 爬虫自然不在话下 那么今天我来说说5个深入一点的爬虫问题 让你清楚爬虫的真实情况 1 现在的爬虫接单真能1个月赚6000的快外 2 初级爬虫只能接一些小单 怎样才算初级爬虫水平 3 中级爬虫是职业爬虫工程师
  • 自学c++笔记(三)

    笔记记录本人学习C 路上的一些摘要与总结 供本人阅读同时也分享与他人 转义序列 换行符 n 水平制表符 t 退格 b 回车 r 振铃 a wchar t 宽字符类型 是一种整型类型 使用wcin和wcout来处理wchar t流 const
  • 动态规划-砝码称重问题

    动态规划 Dynamic Programming 这个词乍一听感觉甚是高大上 初次学习或者使用的时候会感觉难以理解 这是正常的 毕竟凡事都是一回生二回熟 其实它也不难的 大家要明白一个道理 能写到课本上给学生学习的东西必然属于不难的东西 因
  • java中emptyMap()方法具有什么功能呢?

    转自 java中emptyMap 方法具有什么功能呢 下文笔者讲述emptyMap 方法的功能简介说明 如下所示 emptyMap 方法的功能 返回一个不变的空map emptyMap的语法 public static final Map
  • 物联网 MQTT 服务质量级别

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 翻译人 Tnecesoc 该成员来自云 社区翻译社 消息队列遥测传输 MQTT 是一种客户端服务器发布 订阅消息传输协议 它轻量 开放 简单 其设计也易于实施 这些特性使其非常适合用
  • DETR系列:RT-DETR实战部署

    上篇文章介绍RT detr的论文内容 RT DETR 论文解析 本篇文章介绍算法复现 tensorRT加速 python代码部署tensorRT测试单张图片或文件夹 RT DETR实战部署 1 复现模型详情 2 环境准备 3 训练 4 部署
  • VirtualBox 共享文件夹设置 及 开机自动挂载

    鉴于支付宝等服务无视我们Linux用户的存在 没办法 那只好在Linux上用VirtualBox虚拟一个Windows系统了 系统装好了 在日常使用过程中 往往要从 VirtualBox的客户机 guest system 中使用主机 hos
  • 第一列有0时存成csv0消失的解决方法

    df 带零列 t df 带零列
  • python初学者(四)---键值对

    这篇文章先来说一下python的键值对 即字典形式 举个栗子 info stu110 tengxun stu112 baidu stu113 alibaba 这就是python的键值对形式 前面为key 后面为values 声明一点的是 键
  • Pytorch深度学习(四):用Pytorch实现线性回归

    用Pytorch实现线性回归 一 概念 1 准备数据集 2 使用Class设计模型 3 构建损失函数和优化器的选择 4 进行训练的迭代 二 完整代码如下 一 概念 上图主要介绍了使用Pytorch解决问题的四个步骤 1 准备数据集 1 准备