Pytorch深度学习实践笔记4(b站刘二大人)

🎬个人简介:一个全栈工程师的升级之路!
📋个人专栏:pytorch深度学习
🎀CSDN主页 发狂的小花
🌄人生秘诀:学习的本质就是极致重复!

视频来自【b站刘二大人】

1 反向传播


Back propagation (BP),训练神经网络的目标是优化代价函数cost,使得cost找到以一个全局或者局部最优值。让cost尽可能的接近0,这样得到的weights和bias是最好的,由于需要不断的调整参数让cost收敛,cost在梯度的相反反向下降最快,所以提出了BP算法,就是来计算weights和bias的梯度(偏导数的,加速训练时的收敛速度,避免无效的训练
反向传播求梯度用到了链式求导,很好理解,高中就学习过了。

  • 反向传播的优点:尽力用一次前向传播和一次反向传播,就同时计算出所有参数的偏导数。 反向传播计算量和前向传播差不多,并且有效利用前向传播过程中的计算结果,前向传播的主要计算量 在 权重矩阵和input vector的乘法计算, 反向传播则主要是 矩阵和input vector 的转置的乘法计

2 链式求导

 

神经网络反向传播理解_反向传播的作用-CSDN博客​


3 计算图


计算图可以减轻网络构建的难度,以前需要为每一个神经网络写反向传播算法。
(1)计算图为有向无环图
(2)Pytorch为动态计算图,Tensorflow为静态计算图,后来也改进支持动态计算图
(3)Pytorch的动态计算图,为了节约内存,一轮迭代完后计算图就被在内存释放,因此每次都需要构建新的计算图,计算图代表程序中变量之间的关系
(4)pytorch计算图中,只有两种元素:数据(Tensor)和运算。tensor可以分为两种:叶子节点和非叶子节点。使用backward()函数反向传播计算tensor的梯度时,并不计算所有tensor的梯度,而是只计算满足这几个条件的tensor的梯度:1.类型为叶子节点、2.requires_grad=True、3.依赖该tensor的所有tensor的requires_grad=True。
自己定义的tensor中,requires_grad属性默认是False,而神经网络中的权重w的tensor中requires_grad属性默认为True。
(5)autograd包提供Tensor所有操作的自动求导方法。
torch.Tensor是这个包里面最重要的类。如果设置了requires_grad为True,那么它开始追踪所有在它上面的操作。当你完成了计算,可以使用调用backward(),回自动计算所有的梯度。然后这个tensor的梯度会被自动累积到grad属性上。

pytorch计算图_pytorch 计算图-CSDN博客​

Pytorch快速入门系列---(二)动态计算图、自动微分、torch.nn模块_pytorch计算图训练-CSDN博客​

blog.csdn.net/qq_42681787/article/details/129394170​编辑


4 tensor




Tensor 中指定需要计算梯度,requires_grad = True




w是Tensor(张量类型),Tensor中包含data和grad,data和grad也是Tensor。grad初始为None,调用l.backward()方法后w.grad为Tensor,故更新w.data时需使用w.grad.data。如果w需要计算梯度,那构建的计算图中,跟w相关的tensor都默认需要计算梯度。
调用backward()会将所有的需要计算梯度的都求出来,存储待对应的w.grad.data中。
 

  • torch.tensor() 和 torch.Tensor():

【PyTorch】Tensor和tensor的区别_pytorch tensor tensor-CSDN博客​

torch.FloatTensor和torch.Tensor、torch.tensor-CSDN博客​

  • torch.FloatTensor()


5 代码
 

import matplotlib.pyplot as plt
import torch
import numpy as np# SGD随机梯度下降x_data = np.arange(1.0,200.0,1.0)
y_data = np.arange(2.0,400.0,2.0)def forward(x,w):return x * wdef loss(x,y_true,w):y_pred = forward(x,w)return (y_pred-y_true)**2w = torch.Tensor([1.0])
w.requires_grad = Truelr = 0.00001epoch_list = []
loss_list = []print("Before train 4: ",forward(torch.Tensor([400.]),w).data.item())
for epoch in range(100):seed = np.random.choice(range(len(x_data)))loss_val = loss(x_data[seed],y_data[seed],w)loss_val.backward()w.data -= lr*w.grad.dataw.grad.data.zero_()print("epoch: ",epoch," loss: ",loss_val.data.item()," w: ",w.data.item())epoch_list.append(epoch)loss_list.append(loss_val.data.item())if (loss_val < 1e-7):break
print("After train 4: ",forward(torch.Tensor([400.]),w).data.item())plt.plot(epoch_list,loss_list)
plt.xlabel("epoch")
plt.ylabel("loss")
plt.savefig("./data/pytorch3.png")

import numpy as np
import matplotlib.pyplot as plt
import torch# 假设 3 * x^2 + 2 * x + 2 
x_data = [1.0,2.0,3.0]
y_data = [7.0,18.0,35.0]def forward(x,w1,w2,b):return (w1 * x **2 + w2 *x +b)def loss(x,y_true,w1,w2,b):y_pred = forward(x,w1,w2,b)return (y_pred-y_true)**2w1 = torch.Tensor([1.0])#初始权值
w1.requires_grad = True#计算梯度,默认是不计算的
w2 = torch.Tensor([1.0])
w2.requires_grad = True
b = torch.Tensor([1.0])
b.requires_grad = Truelr = 0.001epoch_list = []
loss_list = []print("Before train 4: ",forward(torch.Tensor([4.]),w1,w2,b).data.item())
for epoch in range(10000):seed = np.random.choice(range(len(x_data)))loss_val = loss(x_data[seed],y_data[seed],w1,w2,b)loss_val.backward()w1.data -= lr*w1.grad.dataw2.data -= lr*w2.grad.datab.data -= lr*b.grad.dataw1.grad.data.zero_()w2.grad.data.zero_()b.grad.data.zero_()print("epoch: ",epoch," loss: ",loss_val.data.item()," w1: ",w1.data.item()," w2: ",w2.data.item()," b: ",b.data.item())epoch_list.append(epoch)loss_list.append(loss_val.data.item())if (loss_val < 1e-7):break
print("After train 4: ",forward(torch.Tensor([4.]),w1,w2,b).data.item())plt.plot(epoch_list,loss_list)
plt.xlabel("epoch")
plt.ylabel("loss")
plt.savefig("./data/pytorch3_1.png")

🌈我的分享也就到此结束啦🌈
如果我的分享也能对你有帮助,那就太好了!
若有不足,还请大家多多指正,我们一起学习交流!
📢未来的富豪们:点赞👍→收藏⭐→关注🔍,如果能评论下就太惊喜了!
感谢大家的观看和支持!最后,☺祝愿大家每天有钱赚!!!欢迎关注、关注!

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

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

相关文章

FFMPEG+ANativeWinodow渲染播放视频

前言 学习音视频开发&#xff0c;入门基本都得学FFMPEG&#xff0c;按照目前互联网上流传的学习路线&#xff0c;FFMPEGANativeWinodow渲染播放视频属于是第一关卡的Boss&#xff0c;简单但是关键。这几天写了个简单的demo&#xff0c;可以比较稳定进行渲染播放&#xff0c;便…

【运维】Linux 端口管理实用指南,扫描端口占用

在 Linux 系统中&#xff0c;你可以使用以下几种方法来查看当前被占用的端口&#xff0c;并检查 7860 到 7870 之间的端口&#xff1a; 推荐命令&#xff1a; sudo lsof -i :7860-7870方法一&#xff1a;使用 netstat 命令 sudo netstat -tuln | grep :78[6-7][0-9]这个命令…

全球痛风年轻化趋势明显 别嘌醇制剂需求增多

全球痛风年轻化趋势明显 别嘌醇制剂需求增多 别嘌醇制剂包括片剂和缓释胶囊两种剂型&#xff0c;别嘌醇片剂吸收快&#xff0c;可能会出现胃肠道反应&#xff1b;别嘌醇缓释胶囊释放比较缓慢&#xff0c;作用更持久&#xff0c;对胃肠道损害比较小。别嘌醇制剂是抑制尿酸合成的…

Java内存空间

Java内存空间划分 Java虚拟机在执行Java程序的过程中会把他管理的内存划分为若干个不同的数据区域&#xff0c;如图所示1.7和1.8两个版本的Java内存空间划分。 JDK1.7: JDK1.8: 线程私有&#xff1a; 程序计数器虚拟机栈本地方法栈 线程共享 &#xff1a; 堆方法区直接内…

股价飙升:AI PC大变革,联想的“联想时刻”正在缔造?

按照产业的传导逻辑&#xff0c;在颠覆式技术到来之时&#xff0c;当引发这场变革的最核心技术及产品真正进入了产品化、商业化阶段&#xff0c;此时直触需求端的终端厂商&#xff0c;其成长性估算将得到市场的重新预估。 眼下AI PC之于联想就是如此。 5月27日&#xff0c;联…

mysql中InnoDB的统计数据

大家好。我们知道&#xff0c;mysql中存在许多的统计数据&#xff0c;比如通过SHOW TABLE STATUS 可以看到关于表的统计数据&#xff0c;通过SHOW INDEX可以看到关于索引的统计数据&#xff0c;那么这些统计数据是怎么来的呢&#xff1f;它们是以什么方式收集的呢&#xff1f;今…

vscode:如何解决”检测到include错误,请更新includePath“

vscode:如何解决”检测到include错误&#xff0c;请更新includePath“ 前言解决办法1 获取includePath路径2 将includePath路径添加到指定文件3 保存 前言 配置vscode是出现如下错误&#xff1a; 解决办法 1 获取includePath路径 通过cmd打开终端&#xff0c;输入如下指令&a…

【第8章】SpringBoot之单元测试

文章目录 前言一、准备1. 引入库2. 目录结构 二、测试代码1. SpringBoot3ApplicationTests2.测试结果 总结 前言 单元测试是SpringBoot项目的一大利器&#xff0c;在SpringBoot我们可以很轻松地测试我们的接口。 一、准备 1. 引入库 <dependency><groupId>org.s…

Java基于saas模式云MES制造执行系统源码Spring Boot + Hibernate Validation什么是MES系统?

Java基于saas模式云MES制造执行系统源码Spring Boot Hibernate Validation 什么是MES系统&#xff1f; MES制造执行系统&#xff0c;通过互联网技术实现从订单下达到产品完成的整个生产过程进行优化管理。能有效地对生产现场的流程进行智能控制&#xff0c;防错防呆防漏&…

大模型时代的具身智能系列专题(五)

stanford宋舒然团队 宋舒然是斯坦福大学的助理教授。在此之前&#xff0c;他曾是哥伦比亚大学的助理教授&#xff0c;是Columbia Artificial Intelligence and Robotics Lab的负责人。他的研究聚焦于计算机视觉和机器人技术。本科毕业于香港科技大学。 主题相关作品 diffusio…

【FISCO BCOS 3.0】一、新版本搭链介绍

目录 一、区块链种类的变化 二、搭链演示 1.单群组区块链&#xff08;Air版本&#xff09; 2.多群组区块链&#xff08;Pro版本&#xff09; 3.可扩展区块链&#xff08;Max版本&#xff09; FISCO BCOS的发展速度如日中天&#xff0c;对于稳定的2.0版本而言&#xff0c;偶…

058.最后一个单词的长度

题意 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 难度 简单 示例 1&#xff1a; 输入&#xff1a;s "Hello World" 输…

JavaWeb基础(一)-IO操作

Java I/O工作机制&#xff1a; 注&#xff1a;简要笔记&#xff0c;示例代码可能较少&#xff0c;甚至没有。 1、Java 的 I/O 类库的基本架构。 ​ Java 的 I/O 操作类在包 java.io 下&#xff0c;大概有将近80个类&#xff0c;这些类大概可以分为如下四组。 基于字节操作的…

UE5中绘制饼状图

饼状图 使用UE绘制前提完整的创建过程123456678 附录代码.h代码.c代码 使用UE绘制前提 EPIC Game使用的版本是Unreal Engine 5.0.3。 没有使用其他额外的插件&#xff0c;使用的是C和Ui共同绘制。 C编译器使用的是VS2019。 完整的创建过程 1 首先在UE中随意一种项目的白色。…

服务器端请求伪造--SSRF

SSRF 简介 ##SSRF定义 SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由 攻击者构造形成&#xff0c;由服务端发起请求 的一个安全漏洞。一般情况下&#xff0c;SSRF攻击的目标是从 外网无法访问的内部系统&#xff08;正是因为它是由服务端发起的&#xff0c;所…

一个小技巧轻松提升量化精度!IntactKV:保持关键词元无损的大语言模型量化方法

目录 摘要关键词元&#xff08;Pivot Tokens&#xff09;方法概述实验验证1. 权重量化2. KV Cache 量化3. 权重和激活值量化 参考文献 本文介绍我们针对大语言模型量化的工作 IntactKV&#xff0c;可以作为插件有效提升 GPTQ、AWQ、QuaRot 等现有主流量化方法效果。论文作者来自…

海外社媒账号如何运营安全稳定?

由于设备与网络原因&#xff0c;通常一个海外社媒账号尤其是多账号的稳定性都有一定限制&#xff0c;错误的操作或者网络都可能使得账号被封&#xff0c;前功尽弃。本文将为大家讲解如何通过IP代理来维持账号稳定与安全&#xff0c;助力海外社媒矩阵的搭建。 一、社媒账号关联…

深入理解计算机系统 家庭作业4.52

练习题4.3 p.254 \sim\seq\seq-full.hcl文件内已经说的很清楚了哪些不能更改,哪些是题目要求更改的控制逻辑块. 依据家庭作业4.51的答案,在seq-full.hcl文件内更改对应的HCL描述即可 以下答案注释了#changed的就是更改部分 #/* $begin seq-all-hcl */ ######################…

Redis 中 Set 数据结构详解

用法 Redis 中的 Set 是一个无序&#xff0c;不重复集合&#xff08;里面的元素为字符串&#xff09;&#xff0c;支持常用的集合操作。 常见命令 1. 增 添加一个或多个元素到 set 中 SADD key member [ member ... ] 返回值&#xff1a; 添加成功的元素个数 将一个元素移到…

数据结构(1):线性表

1 线性表的顺序实现 创建的新项目是cpp类型哦&#xff01; 1.1 初始化 1.1.1 静态分配 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #define MaxSize 10 //定义顺序表的长度 typedef struct {int data[MaxSize];//用静态的数组存放元素&#xff01;int lengt…