函数参数前*
表示参数为元组,表示接收若干个参数,转换成元组。**
表示参数为字典,表示接收若干个参数,转换为字典。就是函数中*args和**kwargs,接收若干个参数。
直接在列表 元组 字典变量名前面加
*
,表示会将其拆分为一个个的独立元素。
- 张量索引值第一位是0,数据结构位序第一位是1
- view()函数改变张量的形状
- item()函数将一个标量的张量转换成一个数
- 支持常用线性函数!
在GPU上进行张量运算,先判断是否可用,然后选择GPU,然后直接在GPU上创建张量。
张量的.grad_fn属性,这个属性表示创建这个张量的函数function,如果这个张量是通过某些运算得到的,就返回与运算相关的对象,如果不是就返回none。
backward() 完成参数的梯度运算。梯度会累积到.grad属性中去。比如,输入关于x的梯度就写x.grad 。
- 梯度是会累加的,每进行一次求梯度的运算,梯度就会和上一次的累加,所以要清零。
解释:当对一个标量求导时,也就是计算其对于某个变量的梯度时,不需要传入值,直接.backward()就可以了,得到的梯度值是与自变量同形的张量,
但是,当对张量求导时,由于张量对张量求导太复杂,所以要传入一个与输入张量形的张量,然后对原张量进行加权相加,使其变为一个标量,再对张量求导,得到一个与自变量同形的梯度值。
当我们不想记录某个变量的梯度时,使用with torch.no_grad() 将其包裹起来,常在评估模型的时候使用,此时不需要计算可训练参数的梯度。
当我们想改变张量的值,但是不想被记录被反向传播,可以对tensor.data进行操作,它也是一个张量,但计算梯度的那个属性是false。