**:
#集中不同的優化方式
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 生...