以下內容是根據torch官網和莫煩python學習所得
載入資料,訓練集,**集,標註集
搭建網路,即 class net
例項化網路 net
建立 optimizer
確定損失函式 loss_func
開始訓練
import torch
from torch.autograd import variable
import torch.nn.functional as f
import matplotlib.pyplot as plt
import torch.utils.data as data
torch.manual_seed(1)
# fake data. y = 2.863* x^2 + 5.652 * x + 3.423
x = torch.unsqueeze(torch.linspace(-5
,5,5000
), dim=1)
y =2.863
* x.
pow(2)
+5.652
* x +
3.423
*(torch.rand(x.size())
-0.5
)# plt.scatter(x.numpy(), y.numpy())
# plt.show()
# 參見批訓練
torch_dataset = data.tensordataset(x, y)
loader = data.dataloader(
dataset=torch_dataset,
batch_size=
100,
shuffle=
true
, num_workers=2,
)# create net
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
if __name__ ==
'__main__'
:# 例項化網路物件
net_sgd = net(
) net_momentum = net(
) net_rmsprop = net(
) net_adam = net(
) nets =
[net_sgd, net_momentum, net_rmsprop, net_adam]
# 建立 optimizer
opt_sgd = torch.optim.sgd(net_sgd.parameters(
), lr=
0.01
) opt_momentum = torch.optim.sgd(net_momentum.parameters(
), lr=
0.01
, momentum=
0.8)
opt_rmsprop = torch.optim.rmsprop(net_rmsprop.parameters(
), lr=
0.01
, alpha=
0.9)
opt_adam = torch.optim.adam(net_adam.parameters(
), lr=
0.01
, betas=
(0.9
,0.99))
optimizer =
[opt_sgd, opt_momentum, opt_rmsprop, opt_adam]
# 建立損失函式
loss_func = torch.nn.mseloss(
) loss_net =[[
],,,
]for epoch in
range
(100):
# 整套資料訓練100次
for step,
(batch_x, batch_y)
inenumerate
(loader)
:# 每次取100個樣本訓練
for net, opt, loss_opt in
zip(nets, optimizer, loss_net)
:# 分別用四個網路訓練
predict = net(batch_x)
loss = loss_func(predict, batch_y)
opt.zero_grad(
) loss.backward(
) opt.step())
)# 將損失函式的值儲存起來
labels =
['sgd'
,'momentum'
,'rmsprop'
,'adam'
]for i, l_his in
enumerate
(loss_net)
: plt.plot(l_his, label=labels[i]
) plt.legend(loc=
'best'
) plt.xlabel(
'steps'
) plt.ylabel(
'loss'
) plt.ylim((0
,1100))
plt.show(
)# 以下是不採用 batch 的方法
# for t in range(1000):
# for net, opt, loss_opt in zip(nets, optimizer, loss_net):
# predict = net(x)
# loss = loss_func(predict, y)
# opt.zero_grad()
# loss.backward()
# opt.step()
# labels = ['sgd', 'momentum', 'rmsprop', 'adam']
# for i, l_his in enumerate(loss_net):
# plt.plot(l_his, label=labels[i])
# plt.legend(loc='best')
# plt.xlabel('steps')
# plt.ylabel('loss')
# plt.ylim((0, 1100))
# plt.show()
TensorFlow搭建基礎神經網路
相當重要,部落格記錄一下 coding utf 8 利用鳶尾花資料集,實現前向傳播 反向傳播,視覺化loss曲線 匯入所需模組 import tensorflow as tf from sklearn import datasets from matplotlib import pyplot as ...
搭建神經網路
1.import 2.train,test 3.model tf.keras.model.sequential 在sequential中描述網路結構,相當於走一遍前向傳播 4.model.compile 在compile中配置訓練方法,選擇哪個優化器,選擇什麼損失函式,選擇什麼評價指標 5.mode...
神經網路體系搭建(一) 神經網路
本篇是神經網路體系搭建的第一篇,解決體系搭建的前四個問題,詳見神經網路體系搭建 序 神經網路的定義就不再贅述,直接從最簡單的神經網路說起。將一系列輸入資料,通過訓練好的網路模型處理,得到輸出結果,這是神經網路決策的步驟。那麼我們的重點就是通過訓練得到網路模型。從上圖可以看出,模型的關鍵其實是尋找合適...