张店网站建设方案,快站如何做网站,福建百度开户,免费域名注册方式一、了解Variable顾名思义#xff0c;Variable就是 变量 的意思。实质上也就是可以变化的量#xff0c;区别于int变量#xff0c;它是一种可以变化的变量#xff0c;这正好就符合了反向传播#xff0c;参数更新的属性。具体来说#xff0c;在pytorch中的Variable就是一个…一、了解Variable顾名思义Variable就是 变量 的意思。实质上也就是可以变化的量区别于int变量它是一种可以变化的变量这正好就符合了反向传播参数更新的属性。具体来说在pytorch中的Variable就是一个存放会变化值的地理位置里面的值会不停发生片花就像一个装鸡蛋的篮子鸡蛋数会不断发生变化。那谁是里面的鸡蛋呢自然就是pytorch中的tensor了。(也就是说pytorch都是有tensor计算的而tensor里面的参数都是Variable的形式)。如果用Variable计算的话那返回的也是一个同类型的Variable。【tensor 是一个多维矩阵】用一个例子说明Variable的定义import torchfrom torch.autograd import Variable # torch 中 Variable 模块tensor torch.FloatTensor([[1,2],[3,4]])# 把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度variable Variable(tensor, requires_gradTrue)print(tensor)1 23 4[torch.FloatTensor of size 2x2]print(variable)Variable containing:1 23 4[torch.FloatTensor of size 2x2]注tensor不能反向传播variable可以反向传播。二、Variable求梯度Variable计算时它会逐渐地生成计算图。这个图就是将所有的计算节点都连接起来最后进行误差反向传递的时候一次性将所有Variable里面的梯度都计算出来而tensor就没有这个能力。v_out.backward() # 模拟 v_out 的误差反向传递print(variable.grad) # 初始 Variable 的梯度0.5000 1.00001.5000 2.0000三、获取Variable里面的数据直接print(Variable) 只会输出Variable形式的数据在很多时候是用不了的。所以需要转换一下将其变成tensor形式。print(variable) # Variable 形式Variable containing:1 23 4[torch.FloatTensor of size 2x2]print(variable.data) # 将variable形式转为tensor 形式1 23 4[torch.FloatTensor of size 2x2]print(variable.data.numpy()) # numpy 形式[[ 1. 2.][ 3. 4.]]扩展在PyTorch中计算图的特点总结如下autograd根据用户对Variable的操作来构建其计算图。1、requires_gradvariable默认是不需要被求导的即requires_grad属性默认为False如果某一个节点的requires_grad为True那么所有依赖它的节点requires_grad都为True。2、volatilevariable的volatile属性默认为False如果某一个variable的volatile属性被设为True那么所有依赖它的节点volatile属性都为True。volatile属性为True的节点不会求导volatile的优先级比requires_grad高。3、retain_graph多次反向传播(多层监督)时梯度是累加的。一般来说单次反向传播后计算图会free掉也就是反向传播的中间缓存会被清空【这就是动态度的特点】。为进行多次反向传播需指定retain_graphTrue来保存这些缓存。4、backward()反向传播求解Variable的梯度。放在中间缓存中。以上这篇PyTorch中的Variable变量详解就是小编分享给大家的全部内容了希望能给大家一个参考也希望大家多多支持脚本之家。