日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

PyTorch 笔记(18)— torch.optim 优化器的使用

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PyTorch 笔记(18)— torch.optim 优化器的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

到目前為止,代碼中的神經網絡權重的參數優化和更新還沒有實現自動化,并且目前使用的優化方法都有固定的學習速率,所以優化函數相對簡單,如果我們自己實現一些高級的參數優化算法,則優化函數部分的代碼會變得較為復雜。

PyTorchtorch.optim 包中提供了非常多的可實現參數自動優化的類,比如 SGDAdaGrad 、
RMSProp 、Adam 等,這些類都可以被直接調用,使用起來也非常方便。我們使用自動化的優化函數實現方法對之前的代碼進行替換,新的代碼如下:

import torch as tbatch_n = 100
input_data = 10000
hidden_layer = 100
output_data = 10epoch_n = 10000
learning_rate = 1e-4x = t.randn(batch_n, input_data, requires_grad=False)
y = t.randn(batch_n, output_data, requires_grad=False)loss_f = t.nn.MSELoss()models = t.nn.Sequential(t.nn.Linear(input_data, hidden_layer),t.nn.ReLU(),t.nn.Linear(hidden_layer, output_data))optimzer = t.optim.Adam(models.parameters(), lr=learning_rate)

這里使用了 torch.optim 包中的 torch.optim.Adam 類作為我們的模型參數的優化函數,在 torch.optim.Adam 類中輸入的是被優化的參數和學習速率的初始值,如果沒有輸入學習速率的初始值,那么默認使用 0.001 這個值。因為我們需要優化的是模型中的全部參數,所以傳遞給 torch.optim.Adam 類的參數是models.parameters

另外,Adam 優化函數還有一個強大的功能,就是可以對梯度更新使用到的學習速率進行自適應調節,所以最后得到的結果自然會比之前的代碼更理想。進行模型訓練的代碼如下:

for epoch in range(epoch_n):y_pred = models(x)loss = loss_f(y_pred, y)print("epoch is {}, loss is {:.4f}".format(epoch, loss))optimzer.zero_grad()loss.backward()optimzer.step()if epoch >= 20:break

在以上代碼中有幾處代碼和之前的訓練代碼不同,這是因為我們引入了優化算法,所以通過直接調用optimzer.zero_grad 來完成對模型參數梯度的歸零;并且在以上代碼中增加了 optimzer.step ,它的
主要功能是使用計算得到的梯度值對各個節點的參數進行梯度更新。這里只進行 20 次訓練并打印每輪訓練的loss 值,結果如下:

epoch is 0, loss is 1.1192
epoch is 1, loss is 0.9273
epoch is 2, loss is 0.7781
epoch is 3, loss is 0.6601
epoch is 4, loss is 0.5648
epoch is 5, loss is 0.4866
epoch is 6, loss is 0.4207
epoch is 7, loss is 0.3646
epoch is 8, loss is 0.3167
epoch is 9, loss is 0.2756
epoch is 10, loss is 0.2404
epoch is 11, loss is 0.2102
epoch is 12, loss is 0.1840
epoch is 13, loss is 0.1615
epoch is 14, loss is 0.1419
epoch is 15, loss is 0.1249
epoch is 16, loss is 0.1099
epoch is 17, loss is 0.0966
epoch is 18, loss is 0.0848
epoch is 19, loss is 0.0744
epoch is 20, loss is 0.0652

在看到這個結果后我們會很驚訝,因為使用 torch.optim.Adam 類進行參數優化后僅僅進行了 20 次訓練,得到的 loss 值就已經遠遠低于之前進行 10000 次優化訓練的結果。所以,如果對 torch.optim 中的優化算法類使用得當,就更能幫助我們優化好模型中的參數。

對比例子請參考上一篇文章。

總結

以上是生活随笔為你收集整理的PyTorch 笔记(18)— torch.optim 优化器的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。