一文带你入门神经网络需要的PyTorch基础

简介: PyTorch 是一个开源的机器学习库,提供了强大的计算能力和灵活的用于构建和训练神经网络的工具。

1 PyTorch简介



01d978d399f848a7aebaff24cd28155c.png

PyTorch 是一个开源的机器学习库,提供了强大的计算能力和灵活的用于构建和训练神经网络的工具。它的核心特点包括:


动态图计算:与其他机器学习库(如 TensorFlow)不同,PyTorch 允许在运行时动态构建计算图,这使得可以使用 Python 控制流操作(如 if、for、while)来构建模型。


快速 GPU 加速:PyTorch 提供了与 CUDA 相关的 API,可以使用 GPU 加速计算。这使得可以使用 PyTorch 训练大型深度学习模型,而无需太多编码工作。


简单易用:PyTorch 提供了丰富的 API 和数据结构,使得机器学习任务变得简单易用。同时,它还与其他机器学习库(如 NumPy)相集成,使得可以方便地将 PyTorch 与其他库集成在一起。


PyTorch 适用于各种机器学习任务,包括图像分类、自然语言处理、生成对抗网络(GAN)等。它已被广泛应用于学术界和工业界,并被许多公司和组织用于实际应用中。


2 PyTorch张量


正常情况下,我们会直接定义一个变量以及进行变量的加减。


x = 10
y = 2*x*x+3
print(x,y)
# 10 103


但如果使用Pytorch定义变量的话,会以张量(tensor)的形式存在。使用张量进行赋值计算的新变量,也会成为张量。


x = torch.tensor(10)
print(x)
#tensor(10)
y = 2*x*x+3
print(y)
#tensor(203)


在深度学习里,Tensor实际上就是一个多维数组(multidimensional array)。而Tensor的目的是能够创造更高维度的矩阵、向量。


3 PyTorch的自动求导机制


3.1单变量求导

自动求导机制是PyTorch相比numpy的最重要区别之一。我们在创建张量的时候,需要给Torch一个额外的参数:require_grad=True。这个参数的意思是:梯度反传时对该 Tensor 计算梯度。


x = torch.tensor(10.0, requires_grad=True)
print(x)
1


此时的打印结果是tensor(10., requires_grad=True)。可以发现上面的代码输入的还是10,这次我改成了10.0,是因为如果进行求导的话,torch要求的数据格式是float类型而不能是int类型。


y = 2*x*x+3
print(y)


此时的打印结果是tensor(203., grad_fn=),可以看到y也随之发生了变化。接下来我们来计算梯度。

y.backward()
print(x.grad)


此时的打印结果是tensor(200.),这里backward函数完成了计算梯度工作,而x.grad则为在x点的梯度值。


3.2多变量求导与链式求导

在实际的神经网络建模中,一定不只一个节点和一个中间层,因此多变量求导与链式求导是常态,Torch对此也是完美支持。

假设此时我们增加一个变量z,z是y的函数,y是x的函数,那么当我们需要求dz/dx时,就需要用来链式求导法则。


import torch
x = torch.tensor(10.0, requires_grad=True)
y = 2*x*x+3
z = 5*y+6
z.backward()
print(x.grad)
# tensor(200.)



这个结果与dz/dy * dy/dx 完全相同。

接下来让上面的函数变的更复杂些,加入变量a与b,函数间的关系如下:



c692e2efe5274551af0f3322be96e37b.png


这同时也和神经网络更像了,可以把x和a想象成输入层,y和b想象成隐含层,z想象成输出层。如果我们需要求dz/dx,那需要对所有的途径分别求导并相加,也就是:


image.png


d z d x = d z d y ∗ d y d x + d z d b ∗ d b d x \frac{dz}{dx}=\frac{dz}{dy}*\frac{dy}{dx}+\frac{dz}{db}*\frac{db}{dx}
dx
dz
 = 
dy
dz
dx
dy
 + 
db
dz
dx
db


Torch同样可以轻松完成以上操作。


import torch
a = torch.tensor(5.0,requires_grad=True)
x = torch.tensor(10.0, requires_grad=True)
y = 2*x*x+3*a
b = 6*x*a
z = y*y+1/(b*y)
z.backward()
print(x.grad)
# tensor(17200.)


可以看到,PyTorch会根据我们输入的变量关系,计算出z对x的导数。


以上内容并未覆盖Pytorch的全部内容,但是包含了神经网络建模的大多知识点与相关思想。如果希望进一步了解Pytorch,可以查看下一篇博文,如何使用Pytorch搭建一个简单的三层神经网络模型(撰写中)。


相关文章
|
2天前
|
机器学习/深度学习 人工智能 PyTorch
【深度学习】使用PyTorch构建神经网络:深度学习实战指南
PyTorch是一个开源的Python机器学习库,特别专注于深度学习领域。它由Facebook的AI研究团队开发并维护,因其灵活的架构、动态计算图以及在科研和工业界的广泛支持而受到青睐。PyTorch提供了强大的GPU加速能力,使得在处理大规模数据集和复杂模型时效率极高。
112 59
|
6天前
|
机器学习/深度学习 PyTorch TensorFlow
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
29 1
|
6天前
|
机器学习/深度学习 人工智能 PyTorch
AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比
AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比
20 1
|
13天前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
|
1月前
|
网络协议 网络安全 数据中心
|
17天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【8月更文挑战第3天】踏入人工智能领域,神经网络是开启智慧之门的钥匙。它不仅是一种技术,更是模仿人脑学习与推理的思维方式。从理解神经元间的连接到构建神经网络的基本概念,再到使用Python与TensorFlow搭建手写数字识别模型,每一步都揭示着机器学习的奥秘。随着深入学习,我们将探索更高级的主题,比如深度神经网络、卷积神经网络和循环神经网络,以及如何优化模型性能。掌握背后的数学原理,将帮助我们设计更高效准确的模型。在这个旅程中,Python将是我们的得力助手,引领我们探索AI世界的无限可能。
23 2
|
22天前
|
机器学习/深度学习 并行计算 数据挖掘
🎓PyTorch深度学习入门课:编程小白也能玩转的高级数据分析术
【7月更文挑战第29天】踏入深度学习世界,新手也能用PyTorch解锁高级数据分析。
16 2
|
2天前
|
运维 网络协议 API
入门网络,少不了这份详细的网络基础学习指南!
入门网络,少不了这份详细的网络基础学习指南!
|
8天前
|
监控 安全 网络虚拟化
智能家居安全入门:保护你的网络家园
在数字化浪潮的推动下,智能家居设备已走进千家万户,带来便捷的同时,也引入了新的安全隐患。本文将带你了解智能家居安全的基本知识,教你如何打造一道坚固的数字防线,保卫你的网络家园免受黑客侵害。
21 0
|
13天前
|
存储 PyTorch API
Pytorch入门—Tensors张量的学习
Pytorch入门—Tensors张量的学习
8 0