目录
通过numpy数据转换
首先通过np.array([2,3.3])创建一个dimension为1,长度为2的numpy数据类型
使用from_numpy函数把numpy格式转换为tensor,数据仍是float类型保持不变
也可用np.ones函数 注意里面传入的是数据的shape而不是数据本身
通过list数据转换
在tensor()函数中传入list 转换成tensor格式的数据
注意要区别tensor()和Tensor()这两个函数,前者是传入数据本身,后者时传入数据的shape,Tensor与FloatTensor函数用法类似,如FloatTensor(2,3)会生成一个两行三列的tensor,数据为随机量FloatTensor类型
当然FloatTensor也能传入数据本身,如上图第二个实例,为避免混淆一般不这样使用
生成未初始化数据
使用上方三个函数可以生成未初始化的tensor数据,当然并不是说未初始化就没有数据,而是数据是随机的并不是我们所输入的数据,如何使用之前的博客已经讲过不再赘述。
未初始化tensor会出现的一些问题
从上面的实例中我们可以看出,通过函数生成的未初始化的tensor中的随机数据相差极大,如果在后面的步骤中没有通过初始化将里面的数据覆盖的话,容易出现nan inf等错误
设置默认tensor
在增强学习中一般使用DoubleTensor,可以通过函数设置默认tensor
初始化tensor
使用rand随机初始化
rand(3,3)随机生成一个三行三列的tensor 初始化数值在0-1范围内随机采样
rand_like()传入tensor变量,相当于取出a的shape 然后经过rand函数
randint(1,10,[3,3])表示从1-10中随机取整数,shape为(3,3)
使用正态randn初始化
使用randn初始化tensor非常广泛,一般初始化权重w和偏差b都使用该函数
full([10],0)表示生成[0,0,0,0,0,0,0,0,0,0]维度为1长度为10 数值都是0
arange(1,0,-0.1)表示生成的数值范围从1-0 每次间隔-0.1,所以生成的数据为[1,0.9,0.8,0.7,0.6…0.1,0]
使用normal生成的数据服从正态,后面每个值代表期望,std代表标准差,可以看出标准差逐渐变小,因此生成数据波动范围也逐渐变小
使用full生成数据一样的tensor
第一个参数传入shape 第二个参数传入数值
使用arange/range
arange生成范围[1,10)的等差数列 默认差是1,如要设置差使用第三个参数
range生成范围[0,10]的等差数列
使用linspace/logspace
steps为等分的数字个数 要生成四个等分的数字实际上是要进行三等分
因此数字间隔并不是10/4而是10/3 得到数字[0,10/3,20/3,10]
linspace线性等分
logspace指数等分 默认底数是10 范围
0-1等同于线性等分的0-10
使用Ones/zeros/eye
使用randperm
randperm(n)生成0到n-1 随机序列
print(torch.randperm(10))
“”"
输出:
tensor([0, 1, 4, 7, 9, 8, 6, 3, 2, 5])
“”"
可以用来对数据进行shuffle