week1
第12周周报
收获:学会基础的数据操作,数据预处理,部分线性代数(因复习考试需要,暂无更多收获
- 数据操作
- 入门
新建从0到7的张量:
x=torch.arrange(8)
x=torch.tensor([0,1,2,3,4,5,6,7])
x
([0,1,2,3,4,5,6,7])
查看维度:
x.shape()
torch.Size([8])
查看数量:
x.numel()
8
改变张量形状:
x.reshape(2,4)
([0,1,2,3],[4,5,6,7])
其他初始化张量的函数
torch.zero((x,y)) | 生成形状为(x,y)的张量 | 全为0 |
torch.ones((x,y)) | 全为1 | |
torch.randn(x,y) | 服从正态分布 |
- 运算符
除去基础的加减乘除,还有拼接操作cat
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)
(tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[ 2., 1., 4., 3.],
[ 1., 2., 3., 4.],
[ 4., 3., 2., 1.]]),
tensor([[ 0., 1., 2., 3., 2., 1., 4., 3.],
[ 4., 5., 6., 7., 1., 2., 3., 4.],
[ 8., 9., 10., 11., 4., 3., 2., 1.]]))
- 广播机制
形状不同的张量,自动扩成相同形状再运算。
从最后一维往前比对维度:维度相等匹配,某一维是1自动拉伸对齐,维度数不够左边补 1
- 数据预处理
- 读取数据
import pandas as pd
data = pd.read_csv(data_file)
print(data)
NumRooms Alley Price
0 NaN Pave 127500
1 2.0 NaN 106000
2 4.0 NaN 178100
3 NaN NaN 140000
- 处理缺失值
inputs = inputs.fillna(data.mean())
print(inputs)
NumRooms Alley Price
0 3.0 Pave 127500
1 2.0 NaN 106000
2 4.0 NaN 178100
3 3.0 NaN 140000
- 转化为张量格式
X = torch.tensor(data.to_numpy(dtype=float))
(tensor([[3., 1., 127500.],
[2., 0., 106000.],
[4., 0., 178100.],
[3., 0., 140000.]], dtype=torch.float64),
- 线性代数
- 基础数据
标量:单个数值,0维
例:x = torch.tensor(3.0)
向量:1维数组
例:x = torch.arrange(3)
矩阵:2维数组
例:x = torch.arrange(12).reshape(3,4)
张量:任意维度数组统称
- 降维
例:
x = torch.arange(12).reshape(3,4)
#沿着行对x求和,压缩第0维
x=x.sum(axis=0)
(tensor([12,15,18,21],))
#沿着行和列对x求和,压缩为标量
x=x.sum(axis=[0,1])
(tensor([66],))
向量点积(内积)
同长度向量对应相乘再求和
例:
x = torch.arrange(4)
y = torch.ones(4, dtype = torch.float32)
x, y, torch.dot(x, y) #点积
(tensor([0., 1., 2., 3.]), tensor([1., 1., 1., 1.]), tensor(6.))
矩阵×向量
行数不变,列变向量长度
例:
A
(tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[12., 13., 14., 15.],
[16., 17., 18., 19.]])
A.shape, x.shape, torch.mv(A, x)
(torch.Size([5, 4]), torch.Size([4]), tensor([ 14., 38., 62., 86., 110.]))
矩阵×矩阵
左列=右行才可乘
例:
B = torch.ones(4, 3)
torch.mm(A, B)
tensor([[ 6., 6., 6.],
[22., 22., 22.],
[38., 38., 38.],
[54., 54., 54.],
[70., 70., 70.]])
- 范数(衡量大小)
- L1范数:元素绝对值之和
- L2范数:平方和开根号,最常用
- 微积分+自动微分
导数:函数变化快慢
偏导:多变量只对一个变量求导
自动微分
框架自动算梯度,不用手动求导
神经网络反向传播核心,靠链式法则批量算参数导数。
