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

深度学习框架 Pytorch 的安装

  1. 在 pycharm 官网下载 pycharm

  2. 安装
    在这里插入图片描述

  3. 在 anaconda 官网下载 anaconda3,并安装。(如果下载速度太慢,建议使用迅雷下载)
    在这里插入图片描述

  4. 在开始菜单打开 anaconda Prompt。
    在这里插入图片描述

  5. 打开 anaconda Prompt 后有 base 弹窗说明安装成功。
    在这里插入图片描述

  6. 在搜索栏打开 cmd。
    在这里插入图片描述

  7. 在 cmd 中给 anaconda 配置虚拟环境。(全选 y)
    在这里插入图片描述

  8. 后会弹出两个选项,敲 conda activate pytorch。
    在这里插入图片描述

  9. 进入 pytorch 官网。
    https://pytorch.org/
    在这里插入图片描述

  10. 选择好版本后,复制 run this command 中提供的指令。(轻薄本,办公本建议使用 cpu
    版,电脑显卡好的可以选择 cuda 版本,建议显存 6G 以上的电脑下载 cuda 版本)y
    在这里插入图片描述

  11. 复制好后进入 anaconda prompt。
    在这里插入图片描述

  12. 进入创建好的虚拟环境。
    在这里插入图片描述

  13. 输入复制的指令,选 y。
    在这里插入图片描述

  14. 进入 pycharm,在 settings 中选择 python interpreter。
    在这里插入图片描述

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

  16. 选择刚才创建的虚拟环境。点击 ok 即可。
    在这里插入图片描述

  17. 如果没有找到安装的虚拟环境,点击右下角加号。
    在这里插入图片描述

  18. 点击existing environment。找到安装anaconda的路径,选择anconda下的python.exe,点击 ok。
    在这里插入图片描述

  19. 然后选择在 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)

结果:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

giegie界清流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值