Pytorch 2 搭建乙個簡單的分類器

2021-10-08 04:19:29 字數 3676 閱讀 4386

參考《pytorch學習筆記(1):開始乙個簡單的分類器》

首先,執行完整**,看看效果:

自定義乙個資料集;

定義乙個神經網路;

呼叫神經網路,計算損失值;

測試訓練集,顯示結果;

測試自定義測試集,顯示結果。

# 生成乙個tensor,100行2列,元素全是1

n_data = torch.ones(

100,2)

# 返回的結果x0是乙個和n_data形狀一樣,以2為平均值,以1為標準差的正態分佈隨機數,第乙個引數為mean,第二個引數是std

x0 = torch.normal(

2*n_data,1)

# 生成100行1列的tensor

y0 = torch.zeros(

100)

# 將x0和x1拼接起來

x = torch.cat(

(x0, x1)).

type

(torch.floattensor)

# 線性擬合函式,第乙個引數輸入神經元個數,第二個引數輸出神經元個數

self.n_hidden = torch.nn.linear(n_feature, n_hidden)

# relu啟用函式,一般使用relu作為中間隱層神經元的啟用函式,相當於torch.nn.functional.relu()

x_layer = torch.relu(self.n_hidden(x_layer)

)# softmax啟用函式,用於多分類神經網路輸出

x_layer = torch.nn.functional.softmax(x_layer)

# sgd優化器,pytorch中已經封裝好了,呼叫即可

optimizer = torch.optim.sgd(net.parameters(

), lr=

0.02

)# 交叉熵損失函式,pytorch已封裝,直接呼叫

loss_func = torch.nn.crossentropyloss(

)# 梯度清空

optimizer.zero_grad(

)# 反向傳播

loss.backward(

)# 引數更新

optimizer.step(

)# 取最大值

train_predict = torch.

max(train_result,1)[1]

擴充套件延伸

pytorch封裝了哪些啟用函式?

pytorch封裝了哪些損失函式?

pytorch封裝了哪些優化器函式?

完整**:

import torch

import matplotlib.pyplot as plt

# 1.資料集處理

n_data = torch.ones(

100,2)

x0 = torch.normal(

2*n_data,1)

y0 = torch.zeros(

100)

x1 = torch.normal(-2

*n_data,1)

y1 = torch.ones(

100)

x = torch.cat(

(x0, x1)).

type

(torch.floattensor)

y = torch.cat(

(y0, y1)).

type

(torch.longtensor)

print

(x.shape)

print

(y.shape)

# 2.網路結構

class

net(torch.nn.module)

:def

__init__

(self, n_feature, n_hidden, n_output)

:super

(net, self)

.__init__(

) self.n_hidden = torch.nn.linear(n_feature, n_hidden)

self.out = torch.nn.linear(n_hidden, n_output)

defforward

(self, x_layer)

: x_layer = torch.relu(self.n_hidden(x_layer)

) x_layer = self.out(x_layer)

x_layer = torch.nn.functional.softmax(x_layer)

return x_layer

if __name__ ==

'__main__'

:# 3.呼叫網路,計算損失函式

net = net(n_feature=

2, n_hidden=

100, n_output=2)

optimizer = torch.optim.sgd(net.parameters(

), lr=

0.02

) loss_func = torch.nn.crossentropyloss(

)for i in

range

(100):

out = net(x)

loss = loss_func(out, y)

print

("loss is {}"

.format

(loss)

)

optimizer.zero_grad(

) loss.backward(

) optimizer.step(

)# 4.train result測試訓練集

train_result = net(x)

train_predict = torch.

max(train_result,1)

[1] plt.scatter(x.data.numpy()[

:,0]

, x.data.numpy()[

:,1]

, c=train_predict.data.numpy())

plt.show(

)# 5.test測試測試集

t_data = torch.zeros(

100,2)

test_data = torch.normal(t_data,5)

test_result = net(test_data)

prediction = torch.

max(test_result,1)

[1] plt.scatter(test_data[:,

0], test_data[:,

1], c=prediction.data.numpy())

plt.show(

)

如何用pytorch搭建乙個簡單的神經網路?

匯入模組 import torch import torch.nn.functional as f from torch.autograd import variable import matplotlib.pyplot as plt x torch.unsqueeze torch.linspace...

搭建乙個簡單的mvc(一)

框架的基本結構 先定義乙個入口檔案index.php.作用是1 定義常量 2 載入函式庫 3 啟動框架 header content type text html charset utf 8 define mulu trim str replace dir 定義框架所在目錄 define core ...

利用pytorch做乙個簡單的回歸網路

最近整理了一下pytorch的筆記,把很簡單的pytorch搭建乙個回歸網路的code貼上來 import torch import torch.nn.functional as f x torch.unsqueeze torch.linspace 2,2,100 dim 1 在 1,1 這個區間內...