本次設計乙個簡單的三層神經網路模型。上一章學習了乙個線性的分類模型。但如果資料集無法用一條線、乙個面進行分類呢?此時神經網路就有用武之地了。但是本次實驗還是用的上次的資料集,有效果就行~
import torch
import numpy as np
o_data =
#讀取資料
with
open
('./data.txt'
,'r'
)as f:
for i in f.readlines():
'\n'
).split(
',')
)data = np.array(o_data,dtype=
'float32'
)#min-max標準化
x_max = data.
max(0)
x_min = data.
min(0)
data =
(data - x_min)
/(x_max-x_min)
#資料集 入參、出參
x_train = torch.tensor(data[:,
:2])
#(100,2)
y_train = torch.tensor(data[:,
-1])
.unsqueeze(1)
#(100,1)
#定義乙個三層的神經網路 輸入層 2節點 隱含層 10節點 輸出層 1節點 啟用函式使用relu
class
net(torch.nn.module)
:# 繼承 torch 的 module
def__init__
(self, n_feature, n_hidden, n_output)
:super
(net, self)
.__init__(
)# 繼承 __init__ 功能
# 定義每層用什麼樣的形式
self.hidden = torch.nn.linear(n_feature, n_hidden)
# 隱藏層線性輸出
self.predict = torch.nn.linear(n_hidden, n_output)
# 輸出層線性輸出
defforward
(self, x)
:# 這同時也是 module 中的 forward 功能
x = self.hidden(x)
x = torch.relu(x)
# 隱含層輸出 relu sigmod tanh等
x = self.predict(x)
# 輸出值
x = torch.sigmoid(x)
# 輸出層輸出
return x
net = net(2,
10,1)
print
(net)
#反向傳播演算法 sgd adam等
optimizer = torch.optim.sgd(net.parameters(
),lr=1)
#損失函式
criterion = torch.nn.bceloss(
)for i in
range
(100):
y_ = net(x_train)
loss = criterion(y_,y_train)
optimizer.zero_grad(
) loss.backward(
) optimizer.step(
)#計算準確率
pre_y = y_.ge(
0.5)
.float()
acc =1-
sum(
abs(pre_y-y_train)
).squeeze(
).numpy(
)/y_train.size(0)
print
('epoch: {}, loss: {},acc: {}'
.format
(i, loss.detach(
).numpy(
), acc)
)
epoch: 95, loss: 0.23738327622413635,acc: 0.92
epoch: 96, loss: 0.23519432544708252,acc: 0.87
epoch: 97, loss: 0.2386966496706009,acc: 0.92
epoch: 98, loss: 0.23591306805610657,acc: 0.86
epoch: 99, loss: 0.2392745167016983,acc: 0.92
Pytorch學習筆記(五)
9 在pytorch中使用lstm 學習pytorch的rnn使用時最好去官方文件看一下api是如何使用的 乙個需要注意的地方是在pytorch中rnn的輸入input的shape的三維分別是 seq len,batch,input size 隱藏層h 0的shape三維分別是 num layers...
深度學習 Pytorch學習筆記(五)
pytorch實現卷積神經網路 執行效率相對於keras慢太多 import torch import warnings import torchvision from torchvision.datasets import mnist from torch.utils.data import da...
pytorch學習筆記五 批訓練
學自莫凡python 一批5個資料 batch size 5 15個資料總共被分成3批訓練 step 3 並將所有資料整體訓練了3遍。1.匯入模組 import torch import torch.utils.data as data data是用來批訓練的模組 2.一批訓練5個資料 batch ...