[深度学习实战]基于PyTorch的深度学习实战(上)[变量、求导、损失函数、优化器](一)

简介: 笔记

一、前言


 用了Matlab搭建神经网络才愈发感觉"人生苦短,我用PyTorch“是多么正确。毕竟新的神经网络架构还是得自己一点点敲,现在是一点都笑不出来了,指望Matlab提供的老框架和训练算法也做不出什么算法方法的突破,顶多就是在实现功能上方便点罢了。

 本博文要求读者有一定的Python编程基础!,对机器学习和神经网络有一定的了解!。如果是零基础学习人群,请参看我之前的Python基础语法博文和人工智能相关博文。读完它们不会花费你太多的时间,并且如果你能做到简单地阅览完这些博文,就完全有足够的知识储备来彻底搞懂这篇博文的全部内容了。


二、深度学习框架——PyTorch


2.1 PyTorch介绍

 PyTorch是 Facebook 发布的一款深度学习框架,和Tensorflow,Keras,Theano等其他深度学习框架都不同。作为动态计算图模式,其应用模型支持在运行过程中根据运行参数动态改变,而其他几种框架都是静态计算图模式,其模型在运行之前就已经确定。

 Python模块可以通过pip安装,临时使用时可以使用下述命令:

pip install pythonModuleName -i
https://pypi.douban.com/simple


 也可以永久更改:/root/.pip/pip.conf:

[global]
index-url = https://pypi.douban.com/simple


2.2 Python安装详解

 安装Python就略去不写了,都是可视化界面也没什么可说的。安装后查看当前版本

1.png

[root@iZ25ix41uc3Z ~]# python --version
Python 3.10.9

下载 setuptools:

wget --no-check-certificate 
http://pypi.python.org/packages/source/s/setuptools/setuptools-
解压之后进入目录setuptools-0.6c11
安装python setup.py install

安装 pip,和 setuptools 过程类似:

wget --no-check-certificate 
https://github.com/pypa/pip/archive/1.5.5.tar.gz
解压之后进入目录pip-1.5.5
安装python setup.py install

看看 pip 安装是否成功,执行:

pip list

2.png

如果显示的不是上方的画面,则我们先安装 openssl:

yum install openssl openssl-devel -y

 然后再重新安装 python,别的不用重新安装了。

[root@iZ25ix41uc3Z Python-3.10.9]# pip list
pip (1.5.4)
setuptools (27.3.0)
wsgiref (0.1.2)

最后我们就可以安装 numpy,scipy 等科学计算库了。

pip install numpy
pip install scipy

3.png

最后验证一下 numpy

4.png

大功告成,如此一来我们已经成功安装 numpy


2.3 PyTorch安装详解

  先试试看 pip 安装能不能成功。输入命令 pip install pytorch,显示结果如下:

5.png

看来PyTorch不支持pip安装,这里提示到 pytorch.org 下载安装,同时,浏览器自动打开网址:

http://pytorch.org/#pip-install-pytorch

 跟着上面的安装步骤安装就是了,这里也可以去网上找找安装教程。因为这里不是我们的重点,讲多了也没什么意思。

 安装完成后,我们输入命令 python,进入 python 交互环境,写一段 pytorch 程序验证一下是不是安装成功了,这段代码调用 torch 的ones 方法,看看能不能正常显示结果:

6.png

看来没什么问题,安装成功了。下面,我们来一步步学习 pytorch 吧。


三、变量


 先看看 Tensor,pytorch 中的数据都是封装成 Tensor 来引用的,Tensor实际上就类似于 numpy 中的数组,两者可以自由转换。

 我们先生成一个3*4维的数组:

import torch
x = torch.Tensor(3,4)
print("x Tensor: ",x)


7.png

可以看到 torch.Tensor() 方法生成制定维度的随机数。

 下面看看 Variable 的基本操作,引用 Variable:

import torch
from torch.autograd import Variable
x=Variable(torch.Tensor(2,2))
print("x variable: ",x)

8.png

Variable 不光包含了数据,还包含了其他东西,那么,还包含什么东西呢?

 默认 Variable 是有导数 grad 的,x.data 是数据,这里 x.data 就是 Tensor。x.grad 是计算过程中动态变化的导数。

print ("x.data: ",x.data, ",x.grad: ",x.grad)

 此时 Variable 还未进行计算,因此 x.grad 为 None。


四、求导


 神经网络中的求导的作用是用导数对神经网络的权重参数进行调整。

 Pytorch 中为求导提供了专门的包,包名叫autograd。如果用autograd.Variable 来定义参数,则 Variable 自动定义了两个变量:data代表原始权重数据;而 grad 代表求导后的数据,也就是梯度。每次迭代过程就用这个 grad 对权重数据进行修正。

9.png

import torch
from torch.autograd import Variable
x = Variable(torch.ones(2, 2), requires_grad=True)
print(x)

 输出为:10.png

y=x+2
print(y)

 输出为:

11.png

z = y * y * 3
out = z.mean()
print(z, out)

12.png

输出为:

16.png

out.backward()

反向传播,也就是求导数的意思。输出 out 对 x 求导:

print(x.grad)

0.png


4.5 是怎么算出来的呢,从前面的公式可以看出 z=(x+2) * (x+2) * 3,它的导数是 3 * (x+2) / 2,当 x=1 时导数的值就是 3 * (1+2) / 2=4.5,和 pytorch 计算得出的结果是一致的。

 权值更新方法:


weight = weight + learning_rate * gradient
learning_rate = 0.01
for f in model.parameters():
f.data.sub_(f.grad.data * learning_rate)


 learning_rate 是学习速率,多数时候就叫做 lr,是学习步长,用步长 * 导数就是每次权重修正的 delta 值,lr 越大表示学习的速度越快,相应的精度就会降低。

相关文章
|
8天前
|
机器学习/深度学习
小土堆-pytorch-神经网络-损失函数与反向传播_笔记
在使用损失函数时,关键在于匹配输入和输出形状。例如,在L1Loss中,输入形状中的N代表批量大小。以下是具体示例:对于相同形状的输入和目标张量,L1Loss默认计算差值并求平均;此外,均方误差(MSE)也是常用损失函数。实战中,损失函数用于计算模型输出与真实标签间的差距,并通过反向传播更新模型参数。
|
4天前
|
机器学习/深度学习 自动驾驶 搜索推荐
深度学习之探索神经网络、感知器与损失函数
在当今的数字化时代,深度学习作为一种强大的机器学习技术,正在迅速改变着我们的生活方式。无论是智能推荐系统、自动驾驶车辆还是语音识别应用,深度学习都在背后默默地发挥作用。
13 1
|
1月前
|
存储 机器学习/深度学习 算法
Adam-mini:内存占用减半,性能更优的深度学习优化器
论文提出一种新的优化器Adam-mini,在不牺牲性能的情况下减少Adam优化器的内存占用。
85 10
Adam-mini:内存占用减半,性能更优的深度学习优化器
|
1天前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
在数据驱动时代,Python凭借简洁的语法和强大的库支持,成为数据分析与机器学习的首选语言。Pandas和NumPy是Python数据分析的基础,前者提供高效的数据处理工具,后者则支持科学计算。TensorFlow与PyTorch作为深度学习领域的两大框架,助力数据科学家构建复杂神经网络,挖掘数据深层价值。通过Python打下的坚实基础,结合TensorFlow和PyTorch的强大功能,我们能在数据科学领域探索无限可能,解决复杂问题并推动科研进步。
11 0
|
1月前
|
机器学习/深度学习 编解码 算法
《零基础实践深度学习》2.5 手写数字识别之损失函数
这篇文章详细探讨了手写数字识别任务中损失函数的选择和优化,解释了为何均方误差不适用于分类任务,并介绍了Softmax函数和交叉熵损失函数在分类问题中的应用,以及如何使用PaddlePaddle框架实现这些概念来提升模型性能。
 《零基础实践深度学习》2.5 手写数字识别之损失函数
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
76 1
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
揭秘深度学习——从理论到实战
【8月更文挑战第31天】 本文将深入探讨深度学习的奥秘,从基础理论到实际应用,带你领略深度学习的魅力。我们将通过一个简单的代码示例,展示深度学习在图像识别领域的应用,让你对深度学习有更直观的认识。
|
1月前
|
机器学习/深度学习 人工智能 算法
探索深度学习:从理论到实战
【8月更文挑战第3天】本文将深入探讨深度学习的理论基础,并通过实际案例展示如何应用这些理论。我们将从神经网络的基础概念出发,逐步引入反向传播算法和优化技术,最后通过一个具体的图像识别项目来实践所学知识。无论你是初学者还是有经验的开发者,都能从中获得新的洞见和灵感。
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习在图像识别中的应用:一个实战案例
【8月更文挑战第1天】 本文将通过一个实际案例,深入探讨深度学习在图像识别领域的应用。我们将介绍如何利用卷积神经网络(CNN)进行图像分类,并展示一个简单的代码示例。通过本文,您将了解到深度学习技术在解决实际问题中的潜力和挑战。
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
【7月更文挑战第31天】在数据驱动时代,Python凭借其简洁性与强大的库支持,成为数据分析与机器学习的首选语言。**数据分析基础**从Pandas和NumPy开始,Pandas简化了数据处理和清洗,NumPy支持高效的数学运算。例如,加载并清洗CSV数据、计算总销售额等。
47 2