2021-9-29 深度学习的基本使用(Pytorch)
作者:互联网
深度学习的基本使用(Pytorch)
深度学习框架 Pytorch 的安装
-
在 pycharm 官网下载 pycharm
-
安装
-
在 anaconda 官网下载 anaconda3,并安装。(如果下载速度太慢,建议使用迅雷下载)
-
在开始菜单打开 anaconda Prompt。
-
打开 anaconda Prompt 后有 base 弹窗说明安装成功。
-
在搜索栏打开 cmd。
-
在 cmd 中给 anaconda 配置虚拟环境。(全选 y)
-
后会弹出两个选项,敲 conda activate pytorch。
-
进入 pytorch 官网。
https://pytorch.org/
-
选择好版本后,复制 run this command 中提供的指令。(轻薄本,办公本建议使用 cpu
版,电脑显卡好的可以选择 cuda 版本,建议显存 6G 以上的电脑下载 cuda 版本)y
-
复制好后进入 anaconda prompt。
-
进入创建好的虚拟环境。
-
输入复制的指令,选 y。
-
进入 pycharm,在 settings 中选择 python interpreter。
-
在右上角选择 show all。选择刚刚配置的环境。
-
选择刚才创建的虚拟环境。点击 ok 即可。
-
如果没有找到安装的虚拟环境,点击右下角加号。
-
点击existing environment。找到安装anaconda的路径,选择anconda下的python.exe,点击 ok。
-
然后选择在 anaconda 下创建的虚拟环境即可。
数据操作
学习创建张量
(1)深度学习中,数据操作很频繁,使用 torch.Tensor 作为储存和变换数据的主要工具。
(2) import.torch 引入 torch 包,用 torch.empty 创建给定大小的 Tensor。
(3) 使用 torch.size 或者 torch.shape 获取 Tensor 的大小。
了解张量的基本操作
(1) 张量相加:(其他基本算法以此类推)
import torch
X = torch.rand(4, 5)
Y = torch.rand(4, 5)
print(torch.add(X, Y))
print(Y.add(X))
结果:
可见两种张量加法所得结果相同。
(2) 常用线性函数:
(3) 索引操作:Tensor 的索引操作与 numpy 中一致,需要注意的是索引出来的结果与原数据共享内存,即修改一个,另一个也跟着变化,示例如下:
import torch
X = torch.rand(4, 5)
print(X[0, :]) # 输出指定行
print(X[:, 2]) # 输出指定列
print(X[0, ::2]) # 输出指定行第0个元素开始隔2个取值构成的张量
结果:
一些高级的选择函数:
(4) 改变 Tensor 形状:
x = torch.rand(4, 5)
print(x.clone().view(20)) # 变为一维,用 clone()可以避免 x 被改变
print(x.clone().view(-1, 10)) # 变为指定大小,-1 表示的维度可以根据其他维度推算。
print(x.clone().view(10, -1)) # 同上
结果:
(5) 广播机制
当两个形状不同的 Tensor 按元素运算时,会触发广播机制:先复制元素使这两个 Tensor
形状相同后在按元素运算,例如:
X = torch.arange(1, 3).view(1, 2)
Y = torch.arange(1, 4).view(3, 1)
Z = torch.add(X, Y)
print(X)
print(Y)
print(Z)
结果:
(6) 张量的连结(concatenate)
很多情况下,我们需要把多个张量连结(concatenate)在一起,把它们端对端地叠起来形成⼀个更⼤的张量。我们只需要提供张量列表,并给出沿哪个轴连结。下⾯的例⼦分别演示了当我们沿行(轴-0,形状的第⼀个元素)和按列(轴-1,形状的第⼆个元素)连结两个矩阵时会发⽣什么情况。我们可以看到,第⼀个输出张量的轴-0⻓度 (6) 是两个输⼊张量,轴-0⻓度的总和 (3 + 3);第⼆个输出张量的轴-1⻓度 (8) ,是两个输⼊张量轴-1⻓度的总和 (4 + 4)。
X = torch.arange(12, dtype=torch.int16).reshape((3, 4))
Y = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(torch.cat((X, Y), dim=0)) # 纵向连接
print(torch.cat((X, Y), dim=1)) # 横向连接
结果:
有时,我们想通过逻辑运算符构建二元张量。以 X == Y 为例子。对于每个
位置,如果 X 和 Y 在该位置相等, 则新张量中相应项的值为 1,这意味着逻
辑语句 X == Y 在该位置处为真,否则该位置为 0。
(7) Tensor 与 Numpy 转换
Tensor 与 numpy 数组的转换需要用到 numpy()和 from_numpy(),需要
注意的是:这两个函数所产生的 tensor 和 numpy 中的数组共享相同的内存,
故改变其中一个另一个也会改变。
import torch
import numpy as np
X = torch.arange(1, 3)
a = np.arange(2, 4)
Y = X.numpy()
b = torch.from_numpy(a)
print(X)
print(Y)
print(a)
print(b)
结果:
数据预处理
如何读取数据集?
import os
import pandas as pd
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
f.write('NumRooms, Alley, Price\n') # 列名
f.write('NA, Pave, 127500\n') # 每行表示一个样本数据
f.write('2, NA, 106000\n')
f.write('4, NA, 178100\n')
f.write('NA, NA, 140000\n')
data = pd.read_csv(data_file)
print(data)
结果:
线性代数
张量
就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构。张量(本小节中的“张量”指代数对象)为我们提供了描述具有任意数量轴的 n 维数组的通用方法。例如,向量是一阶张量,矩阵是二阶张量。张量用特殊字体的大写字母(例如,X、Y 和 Z)表示,它们的索引机制(例如.zjg.和[X1,2i-1,3)与矩阵类似。
import torch
A = torch.arange(12, dtype=torch.int16).reshape(2, 3, 2)
print(A)
结果:
张量算法的基本性质
标量、向量、矩阵和任意数量轴的张量有一些很好的属性,通常会派上用场。例如,你可能已经从按元素操作的定义中注意到,任何按元素的一元运算都不会改变其操作数的形状。同样,给定具有相同形状的任意两个张量,任何按元素二元运算的结果都将是相同形状的张量。例如,将两个相同形状的矩阵相加会在这两个矩阵上执行元素加法。
import torch
A = torch.arange(12, dtype=torch.int16).reshape(2, 3, 2)
B = A.clone()
print(A)
print(A+B)
结果:
微分与求导
import torch
x = torch.arange(4.0, requires_grad=True) # 打开梯度存储,需要数据类型为浮点型
y = 2 * torch.dot(x, x)
print(y)
y.backward() # 反向传播,更新x梯度
print(x.grad)
print(x.grad == 4 * x, '\n') # 验证梯度计算正确性
x.grad.zero_() # 默认叠加梯度,需清除之前的梯度
y = x.sum()
print(y)
y.backward()
print(x.grad)
结果:
标签:Tensor,torch,张量,arange,29,Pytorch,2021,print,import 来源: https://blog.csdn.net/weixin_52116801/article/details/120548611