Pytorch深度学习实践笔记4

news2024/10/7 16:27:08

🎬个人简介:一个全栈工程师的升级之路!
📋个人专栏: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 * w

def loss(x,y_true,w):
    y_pred = forward(x,w)

    return (y_pred-y_true)**2

w = torch.Tensor([1.0])
w.requires_grad = True

lr = 0.00001

epoch_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.data
    w.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)**2

w1 = 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 = True

lr = 0.001

epoch_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.data
    w2.data -= lr*w2.grad.data
    b.data -= lr*b.grad.data
    w1.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.coloradmin.cn/o/1688024.html

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

相关文章

机器视觉HALCON:2.HALCON的预备环境和数据结构

目录 下载基础语法HALCON的数据结构图像和数据类型区域的存储区域的存储连通区域 亚像素轮廓&#xff08;XLD&#xff09;亚像素轮廓介绍亚像素轮廓数据结构 数组数组的赋值与创建数组的存储与读取 字典字典介绍字典的创建和操作 句柄 下载 HALCON的官方网站 下载时需要注册登…

react antd中transfer穿梭框组件中清除搜索框内容

如图&#xff1a;需要清除search搜索框内容 antd的transfer穿梭框组件未提供入口修改input框的值。 2种方法修改。 1、直接操作dom元素设置值&#xff08;不推荐&#xff09; useEffect(() > {const searchInput document.querySelector(.ant-transfer-list-search input)…

Redis常用命令——String篇

前面我们讲解了一些 Redis 的全局命令&#xff08;Redis常用基本全局命令&#xff09;。所谓全局命令&#xff0c;就是可以匹配任意一个数据结构进行使用。但是不同的数据结构&#xff0c;也有自己的操作命令。本篇文章主要讲解的是 String 的操作命令&#xff0c;希望会对你有…

2024电工杯B题:大学生平衡膳食食谱的优化设计及评价

大学时代是学知识长身体的重要阶段&#xff0c;同时也是良好饮食习惯形成的重要时期。这一特 定年龄段的年轻人&#xff0c;不仅身体发育需要有充足的能量和各种营养素&#xff0c;而且繁重的脑力劳动和 较大量的体育锻炼也需要消耗大量的能源物质。大学生中饮食结构不合理以及…

在抖音怎么开店?抖音小店开店步骤详解!建议收藏!

大家好&#xff0c;我是电商小V 想在抖音上面开一家属于自己的抖音店铺去卖点商品赚取个商品的差价&#xff0c;那么开通抖音小店的步骤是什么呢&#xff1f;主要分为几步呢&#xff1f;关于这个问题咱们就来详细的说一下&#xff1a; 开店之前的准备工作&#xff0c;首先需要准…

核心四:线程的一生

4、核心四&#xff1a;线程的一生&#x1f49f; 4.1 New 已创建但还未启动的新线程。 我们new Thread之后&#xff0c;线程已经实现了一些准备工作。但没有运行run方法&#xff0c;因为没有使用start来开启线程。此时&#xff0c;线程处于New状态。 4.2 Runnable&#xff08…

Python模块、包和异常处理

大家好&#xff0c;在当今软件开发领域&#xff0c;Python作为一种简洁、易读且功能强大的编程语言&#xff0c;被广泛应用于各种领域。作为一名测试开发工程师&#xff0c;熟练掌握Python的模块、包和异常处理是提高代码可维护性和错误处理能力的关键。本文将和大家一起探讨Py…

Linux —— 信号量

Linux —— 信号量 什么是信号量P操作&#xff08;Wait操作&#xff09;V操作&#xff08;Signal操作&#xff09;信号量的类型 一些接口POSIX 信号量接口&#xff1a;其他相关命令&#xff1a; 基于循环队列的生产者和消费者模型同步关系 多生产多消费 我们今天接着来学习信号…

5.22R语言初步学习-1

今天上课讲R语言&#xff0c;要干什么没讲&#xff0c;分析什么&#xff0c;目的是什么没讲。助教基本上就是让我们打开窗口&#xff0c;按要求抄代码指令&#xff0c;代码原理也没讲......再加上最近正好在学概率论与数理统计&#xff0c;肯定是有用的&#xff0c;所以还是学习…

(全面)Nginx格式化插件,Nginx生产工具,Nginx常用命令

目录 &#x1f3ab; 前言 &#x1f389; 开篇福利 &#x1f381; 开篇福利 x2 Double happiness # 介绍 # 地址 # 下载 &#x1f4bb; 命令及解析 # 整个文件系统中搜索名为nginx.conf的文件 # 编辑nginx.conf文件 # 重新加载配置文件 # 快速查找nginx.conf文件并使…

HTTP协议请求报头(header)

目录 目录 User-Agent与Referer User-Agent Referer Cookie HTTP报头&#xff08;header&#xff09;的结构是“键值对”结构&#xff0c;每个键值对占一行&#xff0c;键和值之间使用分号分隔。 报头的种类有很多&#xff0c;本次介绍几个重要的。 Host&#xff1a;表示请…

中电金信:从系统升级入手 看这些银行如何激活信贷业务

近期&#xff0c;我国金融机构围绕科技金融、绿色金融、普惠金融、养老金融、数字金融五篇大文章&#xff0c;持续优化信贷结构&#xff0c;不断增强金融服务实体经济作用。金融业认真落实国家经济发展目标&#xff0c;不断优化资金投向结构&#xff0c;持续加大重大战略、重点…

robosuite导入自定义机器人

目录 目的&#xff1a;案例一&#xff1a;成果展示具体步骤&#xff1a;URDF文件准备xml文件生成xml修改机器人构建 目的&#xff1a; 实现其他标准/非标准机器人的构建 案例一&#xff1a; 成果展示 添加机器人JAKA ZU 7 这个模型 具体步骤&#xff1a; URDF文件准备 从…

解决小皮面版搭建php网站数据库连接不了

首先进入mysql bin目录下 并执行cmd mysql -u root -pCREATE USER userlocalhost IDENTIFIED BY pass;GRANT ALL PRIVILEGES ON *.* TO userlocalhost;GRANT SELECT, INSERT, UPDATE ON database_name.* TO xxwlocalhost;FLUSH PRIVILEGES;select host ,user from mysql.user…

数据防泄漏系统哪个好用,给文件加密的软件

数据防泄露&#xff08;Data Leakage Prevention&#xff0c;DLP&#xff09;是指通过一定的技术手段&#xff0c;防止组织指定&#xff08;重要或敏感的&#xff09;数据或信息资产以违反安全策略规定的形式流出组织的一种策略。 信息防泄露以文档加密技术为核心&#xff0c;…

urllib_post请求_百度翻译

打开百度翻译&#xff0c;并打开控制台&#xff0c;输入spider&#xff0c;然后在网络中找到对应的接口&#xff0c;可以看出&#xff0c;该url是post请求 在此案例中找到的接口为sug&#xff0c;依据为&#xff1a; 可以看到&#xff0c;传递的数据为kw : XXX&#xff0c; 所…

Excel 下划线转驼峰

Excel 下划线转驼峰 LOWER(LEFT(SUBSTITUTE(PROER(A1),"_",""),1))&RIGHT(SUBSTITUTE(PROPER(A1),"_",""),LEN(SUBSTITUTE(PROPER(A1),"_",""))-1)

内脏油脂是什么?如何减掉?

真想减的人&#xff0c;减胖是很容易的&#xff0c;但想要形体美又健康&#xff0c;还是得从减内脏油脂开始&#xff0c;那么&#xff0c;问题来了&#xff0c;什么是内脏油脂&#xff1f; 油脂它分部于身体的各个角落&#xff0c;四肢、腹部、腰、臀部、脸、脖子...等&#xf…

Nginx实现负载均衡与故障检查自动切换

创作灵感来源于个人项目的一个稳定性规划&#xff0c;单节点的项目稳定性方面可能有很大的缺漏&#xff0c;因此需要升级为多节点&#xff0c;保证服务故障后&#xff0c;依然有其他服务可用&#xff0c;不会给前端用户造成影响。 &#xff08;前面讲选型&#xff0c;想直接看…