动手学习深度学习(1)课程介绍及环境配置

茴香豆 Lv5

准研究生,学习一些研究生阶段需要的预备知识,打好深度学习基础。共34节课。

课程安排

相关资源:

课程主页:https://courses.d2l.ai/zh-v2

教材:https://zh-v2.d2l.ai/

课程论坛讨论:https://discuss.d2l.ai/c/16

Pytorch论坛:https://discuss.pytorch.org/

数据操作

数据的一些基本操作

1. 访问元素

一个元素 [1, 2]、一行 [1, :]、一列 [:, 1]

子区域 [1:3, 1:]:访问第1到第2行,第2到最后一列的子区域

子区域 [::3, ::2]:每三行一跳,每两列一跳的所有元素构成的子区域

2. 张量及其基本操作

张量表示一个数值组成的数组,这个数组可能有多个维度。

1
2
3
x = torch.arange(12)
#output
tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

x.shape访问张量的形状

x.numel()访问张量中元素的个数

X = x.reshape(3, 4)改变张量的形状而不改变元素数量和值

torch.zeros((2, 3, 4))创建三维全0的2x3x4的张量

torch.ones((2, 3, 4))创建三维全0的2x3x4的张量

torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8]])创建指定张量

X.sum()对张量中所有元素进行求和

按元素基本运算

1
2
3
4
5
6
7
8
9
10
#按元素运算
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x**y, torch.exp(x)
#output
tensor([ 3., 4., 6., 10.])
tensor([-1., 0., 2., 6.])
tensor([ 2., 4., 8., 16.])
tensor([ 0.5000, 1.0000, 2.0000, 4.0000])
tensor([ 1., 4., 16., 65.])

多个张量连结

1
2
3
4
X = torch.arange(12, dtype=torch,float32).reshape((3, 4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0)#按行连接
torch.cat((X, Y), dim=1)#按列连接

通过逻辑运算符构建二元张量

1
2
3
4
5
X == Y
#output
tensor([[False, True, False, True],
[False, False, False, False],
[False, False, False, False]])

广播机制

1
2
3
4
5
6
7
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).rashape((1, 2))
a + b
#output
tensor([[0, 1],
[1, 2],
[2, 3]])

运行一些操作可能导致为新结果分配内存

1
2
3
4
5
before = id(Y)
Y = Y + X
id(Y) == before
#output
False

执行原地操作

1
2
3
4
5
6
7
Z = torch.zeros_like(Y)
print(id(Z))
Z[:] = X + Y
print(id(Z))
#output
140146615319872
140146615319872

如果在后续计算中没有重复使用X, 我们也可以使用 X[:] = X + YX += Y来减少操作的内存开销。

1
2
3
4
5
6
#仅适用于张量,若X,Y为数字则结果为False
before = id(X)
X += Y
id(X) == before
#output
True

简单的数据预处理

创建一个人工数据集,并存储在csv(逗号分隔值)文件

1
2
3
4
5
6
7
8
9
10
import os
# 创建一个csv文件
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')
1
2
3
import pandas as pd
# 读取文件
data = pd.read_csv(data_file)
1
2
3
4
5
6
7
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
# 数值型的缺失值利用均值填充
inputs = inputs.fillna(inputs.mean())
print(inputs)
# 非数值型的缺失值,我们将“NAN”视为一个类别
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

现在inputs和outputs中的所有条目都是数值类型,他们可以转换为张量格式

1
2
import torch
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
  • Title: 动手学习深度学习(1)课程介绍及环境配置
  • Author: 茴香豆
  • Created at : 2022-09-22 10:44:39
  • Updated at : 2022-09-27 18:51:16
  • Link: https://hxiangdou.github.io/2022/09/22/DL_1/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
动手学习深度学习(1)课程介绍及环境配置