一文带你入门神经网络需要的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搭建一个简单的三层神经网络模型(撰写中)。


相关文章
|
7天前
|
JSON Dart 前端开发
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
41 8
|
12天前
|
机器学习/深度学习 算法 PyTorch
基于Pytorch Gemotric在昇腾上实现GraphSage图神经网络
本文详细介绍了如何在昇腾平台上使用PyTorch实现GraphSage算法,在CiteSeer数据集上进行图神经网络的分类训练。内容涵盖GraphSage的创新点、算法原理、网络架构及实战代码分析,通过采样和聚合方法高效处理大规模图数据。实验结果显示,模型在CiteSeer数据集上的分类准确率达到66.5%。
|
28天前
|
机器学习/深度学习 资源调度 算法
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
75 3
图卷积网络入门:数学基础与架构设计
|
18天前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
69 2
|
25天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
62 3
|
1月前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
1月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
1月前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
162 0
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
148 1
|
2月前
|
弹性计算 人工智能 运维
Terraform从入门到实践:快速构建你的第一张业务网络(上)
本次分享主题为《Terraform从入门到实践:快速构建你的第一张业务网络》。首先介绍如何入门和实践Terraform,随后演示如何使用Terraform快速构建业务网络。内容涵盖云上运维挑战及IaC解决方案,并重磅发布Terraform Explorer产品,旨在降低使用门槛并提升用户体验。此外,还将分享Terraform在实际生产中的最佳实践,帮助解决云上运维难题。
177 1
Terraform从入门到实践:快速构建你的第一张业务网络(上)

热门文章

最新文章