Week1:[任务三] 第二节 autograd与逻辑回归

2023-11-20 12:50

本文主要是介绍Week1:[任务三] 第二节 autograd与逻辑回归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【目录】

  • 自动求导系统

  • 逻辑回归 

1、自动求导系统

  • torch.autograd.backward()方法

张量中的y.backward方法实际调用的是torch.autograd.backward()方法

同一个张量反向传播的迭代,需要将y.backward(retain_graph)设置为True

  • tensors为用于求导的张量,如loss;loss.background(),用于对requires_grad为true的叶子节点进行梯度自动求解;
  • retain_graph用于保存计算图,因为pytorch为动态图机制,每次自动求导运算后都会释放掉,如果想要迭代使用计算图,需要将其置为true;
  • create_graph创建导数的计算图,通常用于高阶求导,如二阶、三阶;
  • grad_tensors:多梯度权重设置,当有多个loss需要计算梯度时,需要设置各个loss的权重;

# retain_graph用处不多,一般迭代计算梯度,将loss表达式和loss.back一同放入for循环中即可

# ====================================== retain_graph ==============================================
flag = True
# flag = False
if flag:w = torch.tensor([1.], requires_grad=True)x = torch.tensor([2.], requires_grad=True)a = torch.add(w, x)b = torch.add(w, 1)y = torch.mul(a, b)y.backward(retain_graph=True)print(w.grad)y.backward(retain_graph=True)print(w.grad)

# grad_tensors多权重求梯度

#多权重求loss梯度
import torchw = torch.tensor([1.],requires_grad = True)
x = torch.tensor([2.],requires_grad = True)a = torch.add(w,x)
b = torch.add(w,1)
y0 = torch.mul(a,b)
y1 = torch.add(a,b)loss = torch.cat([y0,y1],dim = 0)#拼接
print(loss)
grad_tensors = torch.tensor([1.,1.])loss.backward(gradient = grad_tensors)#y0对w的梯度*权重+y1对w的梯度*权重
print(w.grad)#运行结果输出
runfile('C:/Users/cheny/Desktop/untitled0.py', wdir='C:/Users/cheny/Desktop')
tensor([6., 5.], grad_fn=<CatBackward>)
tensor([7.])
  • torch.autograd.grad()方法

output为Y,input为X,求取的是Y对X的偏导,即求X的梯度

下划线表示原地操作in-place操作,在原始地址上直接进行改变,例如a+=1,a的地址没有变化

#求高阶导数,create_graph = True设置
import torch
x = torch.tensor([3.],requires_grad=True)
y = torch.pow(x,2)#y=x²grad_1 = torch.autograd.grad(y,x,create_graph=True)#一阶导数为y=2x=6
print(grad_1)grad_2 = torch.autograd.grad(grad_1[0],x)#二阶导数为y=2
print(grad_2)#运行结果输出
runfile('C:/Users/cheny/Desktop/untitled0.py', wdir='C:/Users/cheny/Desktop')
(tensor([6.], grad_fn=<MulBackward0>),)
(tensor([2.]),)

叶子张量不能执行in-place操作,因为前向传播保存的地址数据不能有变化,否则反向传播会出错

注意:

  • 梯度在自动求导过程中不会自动清零,每次都会自动叠加上去,需要手动清零。e.g w.grad.zero_()进行清零
  • 依赖于叶子结点的结点,requires_grad默认为True(是否需要梯度)
  • 叶子结点不可执行in-place
#梯度不会自动清零,需要手动清零
import torchw = torch.tensor([1.],requires_grad = True)
x = torch.tensor([2.],requires_grad = True)for i in range(2):a = torch.add(w,x)b = torch.add(w,1)y = torch.mul(a,b)y.backward()print(w.grad)#w.grad.zero_() #手动清空#运行结果输出
runfile('C:/Users/cheny/Desktop/untitled0.py', wdir='C:/Users/cheny/Desktop')
tensor([5.])
tensor([10.])

2、逻辑回归

  • sigmoid函数的作用就是将输入的数据映射到0-1之间,输出的Y就能用来做二分类

  • 逻辑回归是在线性回归的基础上增加了一个激活函数,增加激活函数是为了更好的描述,用概率来描述,同时更好的拟合,避免梯度消失现象

  • 逻辑回归又叫对数几率回归,几率即为y/1-y(概率取值y除以1-y)表示样本x为正样本的可能性。线性回归用wx+b去拟合Y,而逻辑回归是用wx+b去拟合一个对数几率

  • 机器学习训练步骤(五步)

这篇关于Week1:[任务三] 第二节 autograd与逻辑回归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394718

相关文章

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你