DIDL_1_深度学习基础

  1. 前言
    1. 03 安装【动手学深度学习v2】
    2. 04 数据操作 + 数据预处理【动手学深度学习v2】
      1. N 维数组
  2. 小结

前言

03 安装【动手学深度学习v2】

安装步骤

# 安装依赖(python 3.8)
pip install jupyter d2l torch torchvision

# 下载课程记事本
wget https://zh-v2.d2l.ai/d2l-zh.zip
unzip ./d2l-zh.zip

# 启动 notebook
jupyter notebook
jupyter notebook 界面

04 数据操作 + 数据预处理【动手学深度学习v2】

N 维数组

N 维数组是机器学习和神经网络的主要数据结构。

N 维数组 意义 样例
0-d(标量) 一个类别 1.0
1-d(向量) 一个特征向量 [1.0, 2.7, 3.4]
2-d(矩阵) 一个样本 or 一个特征矩阵 [[1.0, 2.7, 3.4],
[5.0, 0.2, 4.6],
[4.3, 8.5, 0.2]]
3-d RGB图片(宽x高x通道) [[[…]]]
4-d 一个RGB图片批量(batch) [[[[…]]]]
5-d 一个视频批量(批量大小x时间x宽x高x通道) [[[[[…]]]]]

创建 N 维数组需要声明:

  • 形状
  • 数据类型
  • 数据初始值(全0,随机数,正态值)
import torch

# 创建行向量。
x = torch.arange(12)

# 获取张量(沿每个轴的长度)的形状。
x.shape

# 获取张量中元素的总数。
x.numel()

# 改变一个张量的形状而不改变元素数量和元素值
# 我们可以用 x.reshape(-1,4) 或 x.reshape(3,-1) 来取代 x.reshape(3,4)
X = x.reshape(3, 4)

# 创建所有元素都设置为 0 的张量
torch.zeros((2, 3, 4))
# 创建所有元素都设置为 1 的张量
torch.ones((2, 3, 4))

# 转置
A = torch.arange(20).reshape(5, 4)
A.T

# 对称矩阵的转置等于本身
B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
B == B.T

# 指定元素类型
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)

# 通过分配新内存,将A的一个副本分配给B
B = A.clone()

# 两个矩阵的按元素乘法称为Hadamard积(Hadamard product)
A * B

# 降维,所有轴向
A_sum_axis0 = A.sum()

# 降维,仅某个轴向
A_sum_axis0 = A.sum(axis=0)

# 平均值
A.mean(), A.sum() / A.numel()
A.mean(axis=0), A.sum(axis=0) / A.shape[0]

# 非降维求和。可以通过广播机制继续和相同维度的张量进行运算。
sum_A = A.sum(axis=1, keepdims=True)

# 两个矩阵的按元素乘法称为点积(Dot product)
# 点积在很多场合都很有用。 例如,给定一组由 x 向量表示的值, 和一组由 w 表示的权重。x 中的值根据权重 w 的加权和,可以表示为点积。 当权重为非负数且和为1时, 点积表示加权平均(weighted average)。
x, y, torch.dot(x, y)

# 矩阵-向量积
torch.mv(A, x)

# 矩阵-矩阵乘法
torch.mm(A, B)

# 范数(norm)
u = torch.tensor([3.0, -4.0])
torch.norm(u)

小结

  • 标量、向量、矩阵和张量是线性代数中的基本数学对象。
  • 向量泛化自标量,矩阵泛化自向量。
  • 标量、向量、矩阵和张量分别具有零、一、二和任意数量的轴。
  • 一个张量可以通过 sum 和 mean 沿指定的轴降低维度。
  • 两个矩阵的按元素乘法被称为他们的 Hadamard 积。它与矩阵乘法不同。
  • 在深度学习中,我们经常使用范数,如 L1 范数、L2 范数和Frobenius范数。
  • 我们可以对标量、向量、矩阵和张量执行各种操作。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 nz_nuaa@163.com
github