2021-9-29 深度学习的基本使用(Pytorch)

深度学习的基本使用(Pytorch)

深度学习框架 Pytorch 的安装

  1. 在 pycharm 官网下载 pycharm

  2. 安装
    2021-9-29 深度学习的基本使用(Pytorch)

  3. 在 anaconda 官网下载 anaconda3,并安装。(如果下载速度太慢,建议使用迅雷下载)
    2021-9-29 深度学习的基本使用(Pytorch)

  4. 在开始菜单打开 anaconda Prompt。
    2021-9-29 深度学习的基本使用(Pytorch)

  5. 打开 anaconda Prompt 后有 base 弹窗说明安装成功。
    2021-9-29 深度学习的基本使用(Pytorch)

  6. 在搜索栏打开 cmd。
    2021-9-29 深度学习的基本使用(Pytorch)

  7. 在 cmd 中给 anaconda 配置虚拟环境。(全选 y)
    2021-9-29 深度学习的基本使用(Pytorch)

  8. 后会弹出两个选项,敲 conda activate pytorch。
    2021-9-29 深度学习的基本使用(Pytorch)

  9. 进入 pytorch 官网。
    https://pytorch.org/
    2021-9-29 深度学习的基本使用(Pytorch)

  10. 选择好版本后,复制 run this command 中提供的指令。(轻薄本,办公本建议使用 cpu
    版,电脑显卡好的可以选择 cuda 版本,建议显存 6G 以上的电脑下载 cuda 版本)y
    2021-9-29 深度学习的基本使用(Pytorch)

  11. 复制好后进入 anaconda prompt。
    2021-9-29 深度学习的基本使用(Pytorch)

  12. 进入创建好的虚拟环境。
    2021-9-29 深度学习的基本使用(Pytorch)

  13. 输入复制的指令,选 y。
    2021-9-29 深度学习的基本使用(Pytorch)

  14. 进入 pycharm,在 settings 中选择 python interpreter。
    2021-9-29 深度学习的基本使用(Pytorch)

  15. 在右上角选择 show all。选择刚刚配置的环境。

  16. 选择刚才创建的虚拟环境。点击 ok 即可。
    2021-9-29 深度学习的基本使用(Pytorch)
    2021-9-29 深度学习的基本使用(Pytorch)

  17. 如果没有找到安装的虚拟环境,点击右下角加号。
    2021-9-29 深度学习的基本使用(Pytorch)

  18. 点击existing environment。找到安装anaconda的路径,选择anconda下的python.exe,点击 ok。
    2021-9-29 深度学习的基本使用(Pytorch)

  19. 然后选择在 anaconda 下创建的虚拟环境即可。
    2021-9-29 深度学习的基本使用(Pytorch)
    2021-9-29 深度学习的基本使用(Pytorch)

数据操作

学习创建张量

(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))

结果:
2021-9-29 深度学习的基本使用(Pytorch)
可见两种张量加法所得结果相同。

(2) 常用线性函数:
2021-9-29 深度学习的基本使用(Pytorch)
(3) 索引操作:Tensor 的索引操作与 numpy 中一致,需要注意的是索引出来的结果与原数据共享内存,即修改一个,另一个也跟着变化,示例如下:

import torch

X = torch.rand(4, 5)
print(X[0, :]) # 输出指定行
print(X[:, 2])  # 输出指定列
print(X[0, ::2])  # 输出指定行第0个元素开始隔2个取值构成的张量

结果:
2021-9-29 深度学习的基本使用(Pytorch)
一些高级的选择函数:
2021-9-29 深度学习的基本使用(Pytorch)
(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))  # 同上

结果:
2021-9-29 深度学习的基本使用(Pytorch)
(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)

结果:
2021-9-29 深度学习的基本使用(Pytorch)
(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))  # 横向连接

结果:
2021-9-29 深度学习的基本使用(Pytorch)
有时,我们想通过逻辑运算符构建二元张量。以 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)

结果:
2021-9-29 深度学习的基本使用(Pytorch)

数据预处理

如何读取数据集?

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)

结果:
2021-9-29 深度学习的基本使用(Pytorch)

线性代数

张量

就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构。张量(本小节中的“张量”指代数对象)为我们提供了描述具有任意数量轴的 n 维数组的通用方法。例如,向量是一阶张量,矩阵是二阶张量。张量用特殊字体的大写字母(例如,X、Y 和 Z)表示,它们的索引机制(例如.zjg.和[X1,2i-1,3)与矩阵类似。

import torch

A = torch.arange(12, dtype=torch.int16).reshape(2, 3, 2)
print(A)

结果:
2021-9-29 深度学习的基本使用(Pytorch)

张量算法的基本性质

标量、向量、矩阵和任意数量轴的张量有一些很好的属性,通常会派上用场。例如,你可能已经从按元素操作的定义中注意到,任何按元素的一元运算都不会改变其操作数的形状。同样,给定具有相同形状的任意两个张量,任何按元素二元运算的结果都将是相同形状的张量。例如,将两个相同形状的矩阵相加会在这两个矩阵上执行元素加法。

import torch

A = torch.arange(12, dtype=torch.int16).reshape(2, 3, 2)
B = A.clone()
print(A)
print(A+B)

结果:
2021-9-29 深度学习的基本使用(Pytorch)

微分与求导

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)

结果:
2021-9-29 深度学习的基本使用(Pytorch)

上一篇:Numpy 怎么把arange ()产生的列表 变成一个行向量或者列向量


下一篇:Docker系列之(一):10分钟玩转Docker(转)