PyTorch 深度学习入门

news2024/11/17 1:40:37
  • 💂 个人网站:【 海拥】【萌怪大冒险】【2048】
  • 🤟 风趣幽默的前端学习课程:👉28个案例趣学前端
  • 💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼大军】
  • 💬 免费且实用的计算机相关知识题库:👉进来逛逛

给大家安利一个免费且实用的前端刷题(面经大全)网站,👉点击跳转到网站。

直接跳到末尾 参与评论送书

深度学习是机器学习的一个分支,其中编写了模仿人脑功能的算法。深度学习中最常用的库是 Tensorflow 和 PyTorch。由于有各种可用的深度学习框架,人们可能想知道何时使用 PyTorch。以下是人们可能更喜欢将 Pytorch 用于特定任务的原因。

Pytorch 是一个开源深度学习框架,带有 Python 和 C++ 接口。Pytorch 位于 torch 模块中。在 PyTorch 中,必须处理的数据以张量的形式输入。

安装 PyTorch

如果您的系统中安装了 Anaconda Python 包管理器,那么通过在终端中运行以下命令来安装 PyTorch:

conda install pytorch torchvision cpuonly -c pytorch

如果您想使用 PyTorch 而不将其显式安装到本地计算机中,则可以使用 Google Colab。

PyTorch 张量

Pytorch 用于处理张量。张量是多维数组,例如 n 维 NumPy 数组。但是,张量也可以在 GPU 中使用,但在 NumPy 数组的情况下则不然。PyTorch 加速了张量的科学计算,因为它具有各种内置功能。

向量是一维张量,矩阵是二维张量。在 C、C++ 和 Java 中使用的张量和多维数组之间的一个显着区别是张量在所有维度上应该具有相同的列大小。此外,张量只能包含数字数据类型。

张量的两个基本属性是:

形状:指数组或矩阵的维数
Rank:指张量中存在的维数

代码:

# 导入 torch
import torch

# 创建张量
t1=torch.tensor([1, 2, 3, 4])
t2=torch.tensor([[1, 2, 3, 4],
				[5, 6, 7, 8],
				[9, 10, 11, 12]])

# 打印张量:
print("Tensor t1: \n", t1)
print("\nTensor t2: \n", t2)

# 张量的秩
print("\nRank of t1: ", len(t1.shape))
print("Rank of t2: ", len(t2.shape))

# 张量的形状
print("\nRank of t1: ", t1.shape)
print("Rank of t2: ", t2.shape)

输出:

在这里插入图片描述

在 PyTorch 中创建张量

在 PyTorch 中有多种创建张量的方法。张量可以包含单一数据类型的元素。我们可以使用 python 列表或 NumPy 数组创建张量。Torch 有 10 种用于 GPU 和 CPU 的张量变体。以下是定义张量的不同方法。

  • torch.Tensor() :它复制数据并创建其张量。它是 torch.FloatTensor 的别名。
  • torch.tensor() :它还复制数据以创建张量;但是,它会自动推断数据类型。
  • torch.as_tensor() :在这种情况下,数据是共享的,在创建数据时不会被复制,并接受任何类型的数组来创建张量。
  • torch.from_numpy() :它类似于 tensor.as_tensor() 但它只接受 numpy 数组。

代码:

# 导入 torch 模块
import torch
import numpy as np

# 存储为张量的值列表
data1 = [1, 2, 3, 4, 5, 6]
data2 = np.array([1.5, 3.4, 6.8,
				9.3, 7.0, 2.8])

# 创建张量和打印
t1 = torch.tensor(data1)
t2 = torch.Tensor(data1)
t3 = torch.as_tensor(data2)
t4 = torch.from_numpy(data2)

print("Tensor: ",t1, "Data type: ", t1.dtype,"\n")
print("Tensor: ",t2, "Data type: ", t2.dtype,"\n")
print("Tensor: ",t3, "Data type: ", t3.dtype,"\n")
print("Tensor: ",t4, "Data type: ", t4.dtype,"\n")

输出:

在这里插入图片描述

在 Pytorch 中重构张量

我们可以在 PyTorch 中根据需要修改张量的形状和大小。我们还可以创建一个 nd 张量的转置。以下是根据需要更改张量结构的三种常用方法:

.reshape(a, b) :返回一个大小为 a,b 的新张量
.resize(a, b) :返回大小为 a,b 的相同张量
.transpose(a, b) :返回在 a 和 b 维中转置的张量

在这里插入图片描述
一个 23 矩阵已被重新整形并转置为 32。在这两种情况下,我们都可以可视化张量中元素排列的变化。

代码:

# 导入 torch 模块
import torch

# 定义张量
t = torch.tensor([[1, 2, 3, 4],
				[5, 6, 7, 8],
				[9, 10, 11, 12]])

# 重塑张量
print("Reshaping")
print(t.reshape(6, 2))

# 调整张量的大小
print("\nResizing")
print(t.resize(2, 6))

# 转置张量
print("\nTransposing")
print(t.transpose(1, 0))

在这里插入图片描述

PyTorch 中张量的数学运算

我们可以使用 Pytorch 对张量执行各种数学运算。执行数学运算的代码与 NumPy 数组的代码相同。下面是在张量中执行四种基本操作的代码。

# 导入 torch 模块
import torch

# 定义两个张量
t1 = torch.tensor([1, 2, 3, 4])
t2 = torch.tensor([5, 6, 7, 8])

# 添加两个张量
print("tensor2 + tensor1")
print(torch.add(t2, t1))

# 减去两个张量
print("\ntensor2 - tensor1")
print(torch.sub(t2, t1))

# 将两个张量相乘
print("\ntensor2 * tensor1")
print(torch.mul(t2, t1))

# 将两个张量相除
print("\ntensor2 / tensor1")
print(torch.div(t2, t1))

输出:

在这里插入图片描述

Pytorch 模块

PyTorch 库模块对于创建和训练神经网络至关重要。三个主要的库模块是 Autograd、Optim 和 nn。

  1. Autograd 模块: autograd 提供了轻松计算梯度的功能,无需显式手动实现所有层的前向和后向传递。

为了训练任何神经网络,我们执行反向传播来计算梯度。通过调用 .backward() 函数,我们可以计算从根到叶的每个梯度。

代码:

# 导入 torch
import torch

# 创建张量
t1=torch.tensor(1.0, requires_grad = True)
t2=torch.tensor(2.0, requires_grad = True)

# 创建变量和渐变
z=100 * t1 * t2
z.backward()

# 打印渐变
print("dz/dt1 : ", t1.grad.data)
print("dz/dt2 : ", t2.grad.data)

输出:

在这里插入图片描述

  1. Optim Module: PyTorch Optium Module,有助于实现各种优化算法。该软件包包含最常用的算法,如 Adam、SGD 和 RMS-Prop。要使用 torch.optim,我们首先需要构造一个 Optimizer 对象,该对象将保留参数并相应地更新它。首先,我们通过提供我们想要使用的优化器算法来定义优化器。我们在反向传播之前将梯度设置为零。然后为了更新参数,调用 optimizer.step()。

optimizer = torch.optim.Adam(model.parameters(), lr=0.01) #定义优化器

optimizer.zero_grad() #将梯度设置为零

optimizer.step() #参数更新

  1. nn 模块:这个包有助于构建神经网络。它用于构建图层。

为了创建一个单层模型,我们可以简单地使用 nn.Sequential() 来定义它。

model = nn.Sequential(nn.Linear(in, out), nn.Sigmoid(), nn.Linear(_in,
_out), nn.Sigmoid())

对于不在单个序列中的模型的实现,我们通过继承 nn.Module 类来定义模型。

class Model (nn.Module) :

		def __init__(self):

			super(Model, self).__init__()

			self.linear = torch.nn.Linear(1, 1)

	def forward(self, x):

			y_pred = self.linear(x)

			return y_pred

PyTorch 数据集和数据加载器

torch.utils.data.Dataset 类包含所有自定义数据集。我们需要实现两个方法,__len__()__get_item__(),来创建我们自己的数据集类。

PyTorch 数据加载器具有一个惊人的特性,即与自动批处理并行加载数据集。因此,它减少了顺序加载数据集的时间,从而提高了速度。

语法: DataLoader(dataset, shuffle=True, sampler=None,
batch_sampler=None, batch_size=32)

PyTorch DataLoader 支持两种类型的数据集:

地图样式数据集:数据项映射到索引。在这些数据集中,__get_item__() 方法用于检索每个项目的索引。
可迭代式数据集:在这些数据集中实现了 __iter__() 协议。数据样本按顺序检索。

使用 PyTorch 构建神经网络

我们将在逐步实现中看到这一点:

1.数据集准备:由于 PyTorch 中的一切都以张量的形式表示,所以我们应该首先使用张量。
2.构建模型:为了构建中性网络,我们首先定义输入层、隐藏层和输出层的数量。我们还需要定义初始权重。权重矩阵的值是使用torch.randn()随机选择的。Torch.randn() 返回一个由来自标准正态分布的随机数组成的张量。
3.前向传播:将数据馈送到神经网络,并在权重和输入之间执行矩阵乘法。这可以使用手电筒轻松完成。
4.损失计算: PyTorch.nn 函数有多个损失函数。损失函数用于衡量预测值与目标值之间的误差。
5.反向传播:用于优化权重。更改权重以使损失最小化。

现在让我们从头开始构建一个神经网络:

# 导入 torch
import torch

# 训练 input(X) 和 output(y)
X = torch.Tensor([[1], [2], [3],
				[4], [5], [6]])
y = torch.Tensor([[5], [10], [15],
				[20], [25], [30]])

class Model(torch.nn.Module):

	# defining layer
	def __init__(self):
		super(Model, self).__init__()
		self.linear = torch.nn.Linear(1, 1)
	
	# 实施前向传递
	def forward(self, x):
		y_pred = self.linear(x)
		return y_pred

model = torch.nn.Linear(1 , 1)

# 定义损失函数和优化器
loss_fn = torch.nn.L1Loss()
optimizer = torch.optim.Adam(model.parameters(), lr = 0.01 )

for epoch in range(1000):
	
	# 使用初始权重预测 y
	y_pred = model(X.requires_grad_())

	# 损失计算
	loss = loss_fn(y_pred, y)

	# 计算梯度
	loss.backward()

	# 更新权重
	optimizer.step()

	optimizer.zero_grad()

# 测试新数据
X = torch.Tensor([[7], [8]])
predicted = model(X)
print(predicted)

输出:

在这里插入图片描述

🎁参与评论送书

本次送书 8 本,以后每周新文评论区至少抽三位朋友送书,大家可持续关注我:海拥

在这里插入图片描述
内容简介

本书主要介绍人工智能研究领域中神经网络的PyTorch架构,对其在多个领域的应用进行系统性的归纳和梳理。书中的案例有风景图分类、人像前景背景分割、低光照图像增法、动漫头像生成、画风迁移、风格转换等,对每项视觉任务的研究背景、应用价值、算法原理、代码实现和移动端部署流程进行了详细描述,并提供相应的源码,适合读者从0到1构建移动端智能应用。

本书适合对人工智能实际应用感兴趣的本科生、研究生、深度学习算法工程师、计算机视觉从业人员和人工智能爱好者阅读,书中介绍的各项视觉任务均含有相应的安卓平台部署案例,不仅对学生参加比赛、课程设计具有参考意义,对相关从业人员的软件架构和研发也具有启发价值。

觉得自己抽不到,想自己买的也可以参考此链接:https://item.jd.com/13176891.html

【抽奖方式】关注博主、点赞收藏文章后,评论区留言:人生苦短,我爱AI!!!博主会用爬虫代码随机抽取 8 人送书!
【开奖时间】:截止到周日晚8点

本期中奖名单:

在这里插入图片描述

📣尾注:
人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。在这里,我们只讨论了人工智能的基本知识,想要获取更多人工智能相关的知识,或者就是想每周参与抽奖白嫖一本书,你可以私信我加入CSDN官方人工智能交流群

在这里插入图片描述

💌 欢迎大家在评论区提出意见和建议!💌

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

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

相关文章

比亚迪首谈智驾进展:年内量产大算力域控,感知大模型上车

作者 | 马波 编辑 | 德新 前不久,HiEV独家报道了比亚迪在智能驾驶领域的最新量产计划 。 比亚迪将会在今年第三季度,落地基于地平线征程5的高阶智驾方案,首项高阶智驾功能为高速导航辅助驾驶DNP,首发车型大概率是汉。 王传福曾…

[centos]centos7卸载显卡驱动

找到显卡驱动.run文件: sudo ./NVIDIA-Linux-x86_64-460.106.00-k80.run --uninstall 上面是通过run文件卸载可以很容易卸载干净,强烈推荐这个方法,如果没有可以使用命令行 yum remove nvidia-* rpm -qa |grep -i nvid|sort yum remove kmod…

跨域问题详解

本文从web开发者角度,浅谈跨域原理,总结处理方法。为什么会有跨域问题? 简单来说,浏览器不允许访问除当前页面所在源之外的其他源。 协议、域名、端口组成同一源(origin) 在前后端不分离的单体应用中&#…

97.实战网页构建推荐信部分第二节

上节课,我们的推荐信完成如下 ● 接下来我们就来完成,我们未完成的内容吧,为其添加画廊 ● 我们将图片全部添加上 ● 然后通过grid构建一个3*4的网格摆放图片 .gallery {display: grid;grid-template-columns: repeat(3, 1fr);grid-tem…

React - Geek-PC项目 文档

一款后台管理项目 - React-geek-PC 项目介绍 ● 项目功能演示 - 登录、退出 - 首页 - 内容(文章)管理:文章列表、发布文章、修改文章● 技术 - React 官方脚手架 create-react-app - react hooks - 状态管理:mobx - UI 组件库…

【数据分享】2000-2021年全国1km分辨率的逐日PM2.5栅格数据

PM2.5作为最主要的空气质量指标,在我们日常研究中非常常用!之前我们分享过由圣路易斯华盛顿大学大气成分分析组发布的网格分辨率为0.01 0.01的PM2.5栅格数据(可查看之前推送的文章获悉详情): 1998-2020年全国省市三级…

电脑丢失dll文件一键修复需要什么软件?快速修复dll文件的方法

在使用电脑的过程中,我们经常会遇到程序无法正常运行的情况,提示“XXX.dll文件丢失”的错误。这时候,很多人会感到困惑,不知道该如何解决。本文将详细介绍dll文件丢失的各种原因、如何使用dll修复工具进行一键修复dll丢失问题以及…

如何洞察 C# 程序的 GDI 句柄泄露

一:背景 1. 讲故事 前段时间有位朋友找到我,说他的程序界面操作起来很慢并且卡顿等一些不正常现象,从任务管理器看了下 GDI句柄 已经到 1w 了,一时也找不出什么代码中哪里有问题,让我帮忙看下,其实这种问…

品牌电商数据分析维度有哪些

品牌在线上的产品数据每时每刻都会发生变化,店铺会上架下架链接,也会对链接进行调整,包含价格、标题、库存、销量等,那这些数据又该如何为品牌所用,为品牌提供更深层的帮助,这就需要对电商数据进行准确分析…

莫顿曲线映射 二维到一维的变换 MD(莫顿)码 正向变换 线性四叉树

线性四叉树 (Linear Quadtree)是一种基于莫顿码(Morton Code)的数据结构,用于存储和处理二维空间中的信息。 莫顿码是一种将二维坐标映射为一维编码的方法,它将一个二维点的坐标表示为一个整数&#xff0…

Linux常用命令——gpasswd命令

在线Linux命令查询工具 gpasswd Linux下工作组文件的管理工具 补充说明 gpasswd命令是Linux下工作组文件/etc/group和/etc/gshadow管理工具。 语法 gpasswd(选项)(参数)选项 -a:添加用户到组; -d:从组删除用户; -A&#xf…

STC8/15单片机复位功能介绍

STC8/15单片机复位功能介绍 📑复位简介 🌼STC15系列 STC15系列单片机有7种复位方式:外部RST 引脚复位,软件复位,掉电复位/上电复位(并可选择增加额外的复位延时180mS,也叫MAX810专用复位电路,其实就是在上电复位后增加一个180mS复位延时),内部 低压检测复位,MAX810专…

晶体热学性能研究的方法:第一性原理声子谱计算

晶体热学性能研究的方法:第一性原理声子谱计算 第一性原理声子谱计算是一种基于量子力学的计算方法,用于研究物质中声子的性质和行为。声子是晶体中的量子态,它描述了晶体中原子振动的性质。声子谱计算可以提供关于晶体结构、热力学性质、相变…

分享一些宝藏软件给你

如果你正在寻找一些好玩又有用的软件,那么这篇文章就是为你准备的。下面,我将为大家介绍几款免费的宝藏软件,满足你对于各种软件的需求。 分享一:虚假截图助手 虚假截图助手是一个可以为多个平台伪造屏幕截图的网站。注意&#…

FQL40N50-ASEMI代理安森美原装MOS管FQL40N50

编辑:ll FQL40N50-ASEMI代理安森美原装MOS管FQL40N50 型号:FQL40N50 品牌:ON/安森美 封装:TO-264 最大漏源电流:40A 漏源击穿电压:500V RDS(ON)Max:110mΩ 引脚数…

webpack自动引入打包资源HtmlWebpackPlugin

在之前的章节中我们每次打包完之后都是手动的在public/index.html中通过<script>的方式手动引入的dist/js/main.js文件。用过框架开发的小伙伴应该都有体会过&#xff0c;比如vue-cli,每次打包完我们直接将dist目录下的文件整个拷贝直接部署到服务器下就行了&#xff0c;…

(一)初识 Kafka

文章目录 1.发布与订阅消息系统&#xff08;1&#xff09;什么是发布与订阅消息系统&#xff08;2&#xff09;为什么 Kafka 是数据驱动型应用程序的关键组件 2. Kafka 介绍&#xff08;1&#xff09;消息和批次&#xff08;2&#xff09;消息模式&#xff08;3&#xff09;主题…

如何防范银行网点潜在风险?这4点一定要记牢

银行作为金融机构&#xff0c;具有重要的资金和客户信息&#xff0c;其安全性和监控是至关重要的。银行网点监控能够有效保护银行资产&#xff0c;确保员工和客户的安全&#xff0c;预防潜在的犯罪行为。 客户案例 上海市某银行在全国多地拥有大量分支机构和网点。他们面临着需…

使用Red Hat Insights注册RedHat系统

文章目录 前因Step 1: 确认所选择的系统Step 2: 将系统注册到Red Hat InsightsStep 3:具体操作演示 前因 使用SSH命令远程连接红帽系统&#xff0c;提示需要使用下面提示的命令进行系统注册订阅。 C:\Users\xyb>ssh -i xybdiy-aws-key.pem ec2-user18.179.118.78 The authen…

vue中重写并自定义console.log

0. 背景 在vue2项目中自定义console.log并输出文件名及行、列号 1. 实现 1.1 自定义console.log export default {// 输出等级: 0-no, 1-error, 2-warning, 3-info, 4-debug, 5-loglevel: 5,// 输出模式: 0-default, 1-normal, 2-randommode: 1,// 是否输出图标hasIcon: fal…