学习网易云课堂上pytorch课堂,大多参考https://blog.csdn.net/SHU15121856/article/details/87731878上的笔记总结,添加了自己的一些总结
数据量不是很大的时候 注意
小写的tensor只接受现有的数据;而大写的Tensor相当于就是FloatTensor,既可以接收现有的数据,也可以接受shape来创建指定形状的Tensor。前面都提供了里面元素的具体值,也可以按照shape来创建,而先不为其提供具体值。
# 生成2行3列的数据 a = torch.empty(2, 3) b = torch.FloatTensor(2, 3) c = torch.IntTensor(2, 3)未初始化里面也有数据,但是非常不规则,可能包含无穷大或负无穷大数字。尽量使用随机初始化
使用torch.tensor传入浮点数元素,或者使用torch.Tensor仅指定维度时,生成的默认是FloatTensor,也可以修改默认设置使其默认是其它类型的。
print(torch.tensor([1, 2.2]).type()) torch.set_default_tensor_type(torch.DoubleTensor) print(torch.tensor([1, 2.2]).type())运行结果:
torch.FloatTensor torch.DoubleTensor生成等差数列,[0,8),步长2。注意torch.range()是包含结尾的,但是已经被弃用了,一律用arange就好
c = torch.arange(0, 8, 2) # tensor([0, 2, 4, 6])也是等差数列,包含结尾[0, 8],但最后一个参数的意思按照多少份等分切割,并不是步长
c = torch.linespace(0, 8, 4) # tensor([0.0000, 2.6667, 5.3333, 8.0000])从10的n次方取到10的m次方,指数是等差的,也就是元素值是等比的。
e = torch.logspace(0, -1, 5) # tensor([1.0000, 0.5623, 0.3162, 0.1778, 0.1000])也可以只给一个参数n,得到的就是n阶的对角方阵。
使用randperm可以生成一个从0开始的、已经打乱的连续索引Tensor,用它可以对其它Tensor做shuffle。特别是在有几个需要保持一致顺序的Tensor时,用相同的索引Tensor就能保证shuffle之后的Tensor在那个维度上的顺序一致了。
import torch # 两个Tensor的shape[0]是相同的,都是3 a = torch.rand(3, 1) b = torch.rand(3, 1) print(a, b, sep='\n') print("-" * 20) # 制造一个[0,3)的索引序列 idx = torch.randperm(3) print(idx) print("-" * 20) # 给a,b做shuffle,保证第一个维度在shuffle后的对应关系不变 a_sf = a[idx] b_sf = b[idx] print(a_sf, b_sf, sep='\n')