簡單粗暴的方法直接更新引數:
def
myopt()
: pre=
#pre儲存當前梯度與歷史梯度方向是否一致的資訊
lr=#lr儲存各層各引數學習率
vdw=
#vdw儲存各層各引數動量
y_pred = net(x)
loss = loss_func(y_pred, y)
net.zero_grad(
) loss.backward(
)for param in net.parameters():
min=
0.01
,max
=0.01))
)#首先初始化列表
for i in
range
(2000):
y_pred = net(x)
loss = loss_func(y_pred, y)
print
("第"
+str
(i)+
"步 損失值="
+str
(loss.item())
) net.zero_grad(
) loss.backward(
) m=
0for param in net.parameters():
vdw[m]
=0.75
* vdw[m]
+ param.grad.data
pre[m]
=torch.sign(param.grad.data)
*torch.sign(vdw[m]
) lr[m]
= lr[m]*(
0.8+pre[m]
*0.25
) lr[m]
= lr[m]
.clamp(
min=1e-
8,max=
100)
param.data -= vdw[m]
* lr[m]
m+=1
Pytorch自定義引數
如果想要靈活地使用模型,可能需要自定義引數,比如 class net nn.module def init self super net,self init self.a torch.randn 2 3 requires grad true self.b nn.linear 2,2 defforwa...
PyTorch 自定義層
與使用module類構造模型類似。下面的centeredlayer類通過繼承module類自定義了乙個將輸入減掉均值後輸出的層,並將層的計算定義在了forward函式裡。這個層裡不含模型引數。class mydense nn.module def init self super mydense,se...
PyTorch 自定義層(區別於自定義模型)
博主在學習三值神經網路時,使用了lenet 5模型,程式設計 需要對lenet 5模型中的卷積層與全連線層進行自定義,搜尋他人方法後,博主產生了乙個疑問,絕大多數提供的自定義層方法都是繼承nn.module模型,而這方法據說是官方提供 官網 pytorch 自定義線性層 如下 class linea...