- 用 PyTorch 实现线性回归
1.3 实验环境
-
Python3.9
-
PyTorch1.10.2
-
pycharm
2.1 使用Tensor
PyTorch 是一个开源的深度学习框架,由 Facebook 支持开发。它的前身为Torch,但因为 Torch 使用的编程语言是 Lua,在国内流行度很小。Facebook 为了迎合数量更多的 Python 用户的需求,推出了 PyTorch。PyTorch 完全开源意味着你可以轻易获取它的代码,并按照自己的需求对它进行修改。比如让 PyTorch 支持复数运算等等。PyTorch 还有另外一个非常出众的特点是,使用 PyT orch 框架编写出的神经网络模型的代码非常简洁。实现同样的功能,使用 PyTorch 框架编写的代码往往更清晰明了
1 阶的张量可以看做是一个向量,通过索引可以取到一个“值”。
2 阶张量可以看做为一个矩阵,通过索引可以取到一个个的向量。
3 阶张量有点抽象,不过我们可以从图中看出,3 阶张量其实就是在 2 阶张量的矩阵中增加了一个深度。也就是说在 3 阶张量中我们可以通过索引取到一个个的矩阵。我们不难想象,4 阶张量也就是在 3 阶张量上增加了另外一个轴……我们可以使用 **Tensor.size()**方法获得一个张量的“尺寸”。在这里注意“尺寸”和维度是两个概念。就比如对于上图中的 1 阶张量,它的维度为 1,尺寸为 8; 对于上图中的 2 阶张量,它的维度为 2,尺寸为(8,6)。
要使用 PyTorch,首先需要在 Python 中引入 PyTorch 的包
import torch
计算机视觉软件包
import torchvision
torch 版本
print(torch.version)
计算机视觉软件包版本
print(torchvision.version)
是否有GPU 及其版本
print(torch.cuda.is_available())
print(torch.version.cuda)
‘’'1.10.2
0.11.3
True
11.3’‘’
没有数据的创建选项:
print(torch.eye(2))
print(torch.zeros(2, 2))
print(torch.ones(2, 2))
print(torch.rand(2, 2))
‘’'tensor([[1., 0.],
[0., 1.]])
tensor([[0., 0.],
[0., 0.]])
tensor([[1., 1.],
[1., 1.]])
tensor([[0.3657, 0.9712],
[0.9962, 0.9617]])‘’’
2.2 基本 Tensor 运算
创建一个5*3的全1矩阵
y = torch.ones(5, 3)
print(y)
计算两个矩阵相加
z = x + y
print(z)
矩阵转置
print(y.t())
矩阵相乘
print(x.mm(y.t()))
点乘
print(x*y)
转置操作可以用.t()来完成,也可以用 transpose(0,1)来完成。
2.2 Tensor 与 numpy.ndarray 之间的转换
PyTorch 的Tensor 可以与Python 的常用数据处理包Numpy 中的多维数组进行转换。
import torch
import numpy as np
为深度学习创建PyTorch张量-最佳选择
Tensor与tensor区别: 区别是:默认数据类型与指定的数据类型。
data = np.array([1, 2, 3])
另外一种转换 Tensor 的方法,为 torch.FloatTensor(data)
t1 = torch.Tensor(data)
t2 = torch.tensor(data)
t3 = torch.as_tensor(data)
t4 = torch.from_numpy(data)
print(t1)
print(t2)
print(t3)
print(t4)
print(t1.dtype)
print(t2.dtype)
print(t3.dtype)
print(t4.dtype)
‘’'tensor([1., 2., 3.])
tensor([1, 2, 3], dtype=torch.int32)
tensor([1, 2, 3], dtype=torch.int32)
tensor([1, 2, 3], dtype=torch.int32)
torch.float32
torch.int32
torch.int32
torch.int32’‘’
tensor 转化为 numpy 的多维数组
print(t1.numpy())
‘’‘[1. 2. 3.]’‘’
Tensor 和 Numpy 的最大区别在于 Tensor 可以在 GPU 上进行运算。
默认情况下,Tensor 是在 CPU 上进行运算的,如果我们需要一个 Tensor
在 GPU 上的实例,需要运行这个 **Tensor 的.cuda()**方法。
在下面的代码中,首先判断在本机上是否有 GPU 环境可用(有 NVIDIA 的GPU,并安装了驱动)。如果有 GPU 环境可用,那么再去获得张量 x,y 的 GPU 实例。注意在最后打印 x 和 y 这两个 GPU 张量的和的时候,我们调用了.cpu() 方法,意思是将 GPU 张量转化为 CPU 张量,否则系统会报错。
import torch
x = torch.rand(5, 3)
y = torch.ones(5, 3)
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
z = x+y
print(z)
print(z.cpu())
‘’'tensor([[1.4453, 1.6272, 1.3072],
[1.9444, 1.2703, 1.8512],
[1.8694, 1.1878, 1.8789],
[1.5737, 1.8825, 1.4636],
[1.8158, 1.9969, 1.8819]], device=‘cuda:0’)
tensor([[1.4453, 1.6272, 1.3072],
[1.9444, 1.2703, 1.8512],
[1.8694, 1.1878, 1.8789],
[1.5737, 1.8825, 1.4636],
[1.8158, 1.9969, 1.8819]])‘’’
动态运算图(DynamicComputationGraph)是 PyTorch 的最主要特性,它可以让我们的计算模型更灵活、复杂,并可以让反向传播算法随时进行。而反向传播算法就是深度神经网络的核心。
下面是一个计算图的结构以及与它对应的 PyTorch 代码:
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
片转存中…(img-vUdxz3nJ-1715794144843)]
[外链图片转存中…(img-bje6VqGN-1715794144843)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!