PyTorch深度学习实践1——线性回归和Logistic回归

PyTorch的风格

  • 准备数据集
  • 使用类设计模型
  • 计算损失函数和优化器
  • 训练【前向、反向和更新】

线性回归

import torch# 准备数据集
# x,y是矩阵,3行1列 也就是说总共有3个数据,每个数据只有1个特征
x_data = torch.tensor([[1.0], [2.0], [3.0]])
y_data = torch.tensor([[2.0], [4.0], [6.0]])#LinearModel类继承torch的Module模块
class LinearModel(torch.nn.Module):#需要事先__init__和forward两个函数def __init__(self):#父类初始化super(LinearModel, self).__init__()# (1,1)是指输入x和输出y的特征维度,这里数据集中的x和y的特征都是1维的# 该线性层需要学习的参数是w和b  获取w/b的方式分别是~linear.weight/linear.biasself.linear = torch.nn.Linear(1, 1)#linear相当于一个类def forward(self, x):y_pred = self.linear(x)return y_pred#构造模型
model = LinearModel()# 构造损失函数和优化器
#损失函数
criterion = torch.nn.MSELoss(size_average = False)
#size_average=false表示不将最后结果求平均值#优化器SGD
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# model.parameters()自动完成参数的初始化操作 lr学习率# training cycle forward, backward, update
#每一次的epoch过程总结就是
#1、前向传播计算y_pred值【预测值】
#2、根据预测值和测试值计算损失
#3、反向传播backward【计算梯度】
#4、根据梯度更新参数for epoch in range(100):y_pred = model(x_data)  # forward:predictloss = criterion(y_pred, y_data)  # forward: loss#loss.item()表示直接输出数值print(epoch, loss.item())optimizer.zero_grad()  # the grad computer by .backward() will be accumulated. so before backward, remember set the grad to zeroloss.backward()  # backward: autograd,自动计算梯度optimizer.step()  # update 参数,即更新w和b的值#输出偏置值和权重
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)

Logistic回归模型

如下图所示,与线性回归模型不同的是,Logistic回归是对线性回归计算的值使用sigmoid函数对其进行变换,映射在0-1之间
在这里插入图片描述

在这里插入图片描述

Logistic回归损失函数计算公式
在这里插入图片描述
在这里插入图片描述
说明:预测与标签越接近,BCE损失越小。

对比线性回归和Logistic回归构造的类,Logistic回归是使用torch.nn.functional模块中的sigmoid函数
在这里插入图片描述
Logistic回归的损失函数为BCELoss
在这里插入图片描述
构建Logistic回归模型
第一步:准备数据
在这里插入图片描述
第二步:设计类模型
在这里插入图片描述
第三步:设置损失函数和优化器
在这里插入图片描述
第四步:训练
在这里插入图片描述
在这里插入图片描述
可视化
在这里插入图片描述

import torch
# import torch.nn.functional as F# prepare dataset
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])#design model using class
class LogisticRegressionModel(torch.nn.Module):def __init__(self):super(LogisticRegressionModel, self).__init__()self.linear = torch.nn.Linear(1,1)def forward(self, x):# y_pred = F.sigmoid(self.linear(x))y_pred = torch.sigmoid(self.linear(x))return y_pred
model = LogisticRegressionModel()# construct loss and optimizer
# 默认情况下,loss会基于element平均,如果size_average=False的话,loss会被累加。
criterion = torch.nn.BCELoss(size_average = False) 
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)# training cycle forward, backward, update
for epoch in range(1000):y_pred = model(x_data)loss = criterion(y_pred, y_data)print(epoch, loss.item())optimizer.zero_grad()loss.backward()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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构和算法之插入排序

一、插入排序 插入排序是一种简单直观的排序算法。它的原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 #mermaid-svg-v2YbPqchr8qWCPvn {font-family:"trebuchet ms",verdana,arial,san…

Modelsim仿真问题解疑二:ERROR: [USF-ModelSim-70]

现象:在Vivado中已配置modelsim为仿真工具后,运行仿真,报错USF-ModelSim-70和ERROR: [Vivado 12-4473] 详细报错内容如下 ERROR: [USF-ModelSim-70] compile step failed with error(s) while executing C:/Users/ZYP_PC/Desktop/verilog_t…

python趣味编程-恐龙克隆游戏

Python 中使用 Turtle 的恐龙克隆游戏免费源代码 使用 Turtle 的恐龙克隆游戏是一个用Python编程语言编码的桌面游戏应用程序。该项目包含在 Chrome 浏览器中克隆实际恐龙游戏的多种功能。该项目可以使正在修读 IT 相关课程的学生受益。这个应用程序非常有趣,可以帮助您学习创…

LeetCode题-回文数-2023/9/11

LeetCode题:回文数 提示 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如…

前端代码优化散记

把import Button from xxx 的引入方式,变成import {Button} from xxx 的方式引入,以利于按需打包。原生监听事件、定时器等,必须在componentWillUnmount中清除,大型项目会发生内存泄露,极度影响性能。使用PureComponen…

显示器配置信息删除

显示器配置信息删除 1 介绍2 操作参考 1 介绍 笔记本屏幕坏了,手头的拓展显示器都是配置成拓展显示,需要先找一台没配置过的显示器将系统中显示器配置信息删除,这样就能复制屏幕显示到拓展屏幕上了。 2 操作 Windows 的显示器配置位于注册…

flutter开发实战-video_player播放多个视频MediaCodecVideoRenderer error问题

flutter开发实战-video_player播放多个视频MediaCodecVideoRenderer error问题 在开发过程中,我这里使用video_player播放多个视频的时候,出现了MediaCodecVideoRenderer error 一、使用video_player播放视频 使用video_player播放单个视频请查看 htt…

python基础语法(二)

目录 注释注释的语法注释行文档字符串 注释的规范 输入输出和用户的交互通过控制台输出通过控制台的输入 注释 注释的语法 注释行 python的注释:使用#开通的行都是注释 # 这是一行注释C语言的注释:使用//的都是注释 // 这是一行注释文档字符串 使用三引号引起来的称为文档…

人工智能安全-4-小样本问题

0 提纲 小样本学习问题数据增强基于模型的小样本学习基于算法的小样本学习相关资源1 小样本学习问题 在小样本监督分类中,通常将问题表述为 N-way-K-shot分类, 当K = 1,称为one-shot learning;当K = 0时,成为zero-shot learning(ZSL)。ZSL就要求学习的问题具备充足的先…

Mybatis-plus 抽象-接口方法类

Model pojo 类继承 Model 抽象类,即可获得 CRUD(增删改查)功能。Model 使用映射类 pojo 继承 Model 抽象类,直接使用该类可以进行 CRUD,但是必须存在对应的 xxMapper 继承 BaseMapper。 Mapper Mapper 用于 service…

算法AB实验平台进化历程和挑战

1 AB 平台简介 AB 实验平台这几年在互联网公司得到了越来越广泛的应用,采用 AB 实验来评估产品和技术迭代效果也成为主流的业务新功能效果评估方式,数据驱动的文化在这几年得到了不少公司的广泛的认同,通过数据和指标来说明产品效果也得到了…

ROM是什么? 刷ROM是什么意思?

文章目录 ROM是什么?刷ROM是什么意思 ROM是什么? ROM是只读内存(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的…

大数据组件-Flink环境搭建

🥇🥇【大数据学习记录篇】-持续更新中~🥇🥇 个人主页:beixi 本文章收录于专栏(点击传送):【大数据学习】 💓💓持续更新中,感谢各位前辈朋友们支持…

Nacos使用和注册部分源码介绍

Nacos简单介绍 Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构 (例…

汇编:lea 需要注意的一点

lea和mov的效用上不一样,如果当前%rsi的值是0, lea 0x28(%rsi),%rax ,这个只是计算一个地址,而不是去做地址访问。 mov 0x8(%rsi),%rsi,而这个mov,在计算完地址,还要访问内存地址。如果rsi是0&a…

NLP信息抽取全解析:从命名实体到事件的PyTorch实战指南

目录 引言背景和信息抽取的重要性文章的目标和结构 信息抽取概述什么是信息抽取信息抽取的应用场景信息抽取的主要挑战 实体识别什么是实体识别实体识别的应用场景PyTorch实现代码输入、输出与处理过程 关系抽取什么是关系抽取关系抽取的应用场景PyTorch实现代码输入、输出与处…

超高真空度精密控制解决方案设计中百度“文心一言”的具体应用

摘要:本文采用国产版本ChatGPT百度“文心一言”作为一种辅助工具,针对超高真空度精密控制装置的开发进行了初期的技术路线设计,对话调研的重点是了解可调节式微流量进气阀门和可用于连接非线性输出信号型真空计的PID控制器。总体而言&#xf…

Google Hacking搜索

Google Hacking概述 GoogleHacking基本用法逻辑或OR逻辑与And逻辑非NOT完整匹配 GoogleHacking高级用法sitefiletypeinurlintitleintext Google Hacking DataBaseGoogle Hacking概述 GoogleHacking:利用搜索引擎有争对性的搜索信息来对网络入侵的技术和行为。搜索引…

异步请求库的实际应用案例:爬取豆瓣经典电影

在日常爬虫过程中,你有没有遇到过需要爬取大量数据的情况,但是传统的同步请求方式让您等得焦头烂额? 这个问题的根源在于传统的同步请求方式。当我们使用同步请求时,程序会一直等待服务器的响应,直到数据返回后才能继续…

【juc】ReentrantReadWriteLock之缓存(仅当学习)

目录 一、说明二、代码示例2.1 pom依赖2.2 示例代码2.3 实体类 三、示例截图 一、说明 1.针对于读多写少的情况 2.先查缓存&#xff0c;没有再去查库 二、代码示例 2.1 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"h…