pytorch實現優化optimize

2022-05-16 14:08:21 字數 2756 閱讀 4230

**:

#

集中不同的優化方式

import

torch

import

torch.utils.data as data

import

torch.nn.functional as f

from torch.autograd import

variable

import

matplotlib.pyplot as plt

#hyper parameters 超引數

lr = 0.01batch_size = 32epoch = 12

if__name__ == '

__main__':

#資料x = torch.unsqueeze(torch.linspace(-1, 1, 1000), dim=1)

y = x.pow(2) + 0.1*torch.normal(torch.zeros(*x.size()))

#分批處理資料

torch_dataset =data.tensordataset(x,y)

loader = data.dataloader(dataset = torch_dataset, batch_size=batch_size,shuffle=true, num_workers=2)

#定義網路

class

net(torch.nn.module):

def__init__

(self):

super(net, self).

__init__

() self.hidden = torch.nn.linear(1, 20)

self.predict = torch.nn.linear(20,1)

defforward(self, x):

x =f.relu(self.hidden(x))

x =self.predict(x)

return

x

#different nets

net_sgd =net()

net_momentum =net()

net_rmsprop =net()

net_adam =net()

nets = [net_sgd, net_momentum, net_rmsprop, net_adam] #

放到乙個list中

#different optimizers

#momentum,alpha,betas是指定引數

opt_sgd = torch.optim.sgd(net_sgd.parameters(), lr =lr)

opt_momentum = torch.optim.sgd(net_momentum.parameters(), lr = lr, momentum=0.8)

opt_rmsprop = torch.optim.rmsprop(net_rmsprop.parameters(), lr = lr, alpha=0.9)

opt_adam = torch.optim.adam(net_adam.parameters(), lr = lr, betas=(0.9, 0.99))

optimizers =[opt_sgd, opt_momentum, opt_rmsprop, opt_adam]

loss_func =torch.nn.mseloss()

losses_history = [, , , ] #

record loss

for epoch in

range(epoch):

print('

epoch

', epoch)

for step, (batch_x, batch_y) in

enumerate(loader):

b_x =variable(batch_x)

b_y =variable(batch_y)

#它接受一系列可迭代的物件作為引數,將物件中對應的元素打包成乙個個tuple(元組)

for net, opt, l_his in

zip(nets, optimizers, losses_history):

output =net(b_x)

loss =loss_func(output,b_y)

opt.zero_grad()

loss.backward()

opt.step()

#loss recorder

labels = ['

sgd', '

momentum

', '

rmsprop

', '

adam']

for i,l_his in

enumerate(losses_history):

plt.plot(l_his,label=labels[i]) #

plt.plot根據點畫線

plt.legend(loc='

best

') #

給影象加上圖例

plt.xlabel('

steps')

plt.ylabel(

'loss')

plt.ylim(0, 0.2) #

設定y軸上的最小值和最大值

plt.show()

optimizer = torch.optim.sgd()

Pytorch 通過pytorch實現線性回歸

linear regression 線性回歸是分析乙個變數與另外乙個 多個 變數之間關係的方法 因變數 y 自變數 x 關係 線性 y wx b 分析 求解w,b 求解步驟 1.確定模型 2.選擇損失函式 3.求解梯度並更新w,b 此題 1.model y wx b 下為 實現 import tor...

pytorch優化之量化

思考 pytorch的eager模式,是怎樣支援開發模式支援序列執行斷點除錯,生產模式支援生成可併發執行 的,可以拉原始碼除錯分析。這裡會涉及到圖程式設計模式 編譯原理,執行優化等技術。什麼是量化?量化是指用於執行計算並以低於浮點精度的位寬儲存張量的技術。量化模型對張量使用整數而不是浮點值執行部分或...

pytorch實現分類

完整 實現分類 import torch import torch.nn.functional as f from torch.autograd import variable import matplotlib.pyplot as plt import torch.optim as optim 生...