PyTorch自定義優化器

2021-10-01 05:26:57 字數 1110 閱讀 6793

簡單粗暴的方法直接更新引數:

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...