动手学深度学习v2 - Pytorch基础使用和数据操作
本文最后更新于 2021年4月13日 凌晨
数据操作
创建一个张量(可理解为向量)1
x = torch.arange(12)
获取张量的形状
1 | |
获取张量的元素总数1
x.numel()
改变张量形状1
x = x.reshape(3,4)
生成全1的张量1
torch.ones((2,3,4))
生成全0的张量1
torch.zeros((2,3,4))
生成随机数,从标准正态分布中抽取(均值=0,方差=1)1
torch.randn(3,4)
生成随机数,从均匀分布中抽取范围 [0,1)1
torch.zeros((2,3,4))
张量可由列表赋值1
torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
张量可进行python的基本数值运算1
2
3
4x = 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) # 计算e^x
张量的连接1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16X = 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) #第0维合并 按行
torch.cat((X, Y), dim=1) #第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.]]))
构建二元张量(True,False)1
X == Y
对张量所有元素求和1
x.sum()
广播机制
1 | |
a复制为(3, 1*2),b复制为(1*3, 2),形状相同,可以运算
索引和切片
索引行
1 | |
指定赋值
1 | |
多个元素赋值
1 | |
看似没什么用但能节约内存的操作
执行原地操作(省内存?)
1 | |
或者使用如下操作省内存
1 | |
转换为其他Python对象
numpy, torch相互转换
1 | |
将大小为1的张量转换为 Python 标量(获取元素值)
1 | |
数据预处理
pandas读取csv
1 | |
处理缺失值
1 | |
对于 inputs 中的类别值或离散值,将 “NaN” 视为一个类别,类似于One-Hot编码
1 | |
pandas对象转换为张量,都是数值
1 | |