variable类型是什么
variable
tensor1 = torch.FloatTensor([[1,2],[3,4]]) # 建立tensor
variable = Variable(tensor1, requires_grad = True) # 建立variable。其中requires_grad是误差反向传播、计算梯度的标记
print(tensor1)
print(variable)
这样得到的tensor和variable表面上一样,但实际上不一样,variable其中的一部分是tensor,另外还包括梯度等,而且还在“默默”构建一个图。
t_out = torch.mean(tensor1*tensor1)
v_out = torch.mean(variable*variable)
v_out.backward() # 模拟 v_out 的误差反向传递
(tensor1*tensor1实际是在对应位置数字平方,建立新的2*2矩阵,取mean是将4个数字加起来除以4,变成一个数字)
又经过这一操作之后
# v_out = 1/4 * sum(variable*variable) 实际算式
# d(v_out)/d(variable) = 1/4*2*variable = variable/2 注意这里是对variable求梯度
然后输出
print(variable.grad) # Variable 梯度
print(variable) # Variable 形式