pytorch搭建簡單神經網路入門

2021-10-24 14:00:45 字數 2916 閱讀 9381

參考自:

以下**摘抄自

,請先閱讀上述參考文章。(改了幾個引數試試)

import torch

import matplotlib.pyplot as plt

# 搭建神經網路

class neuro_net(torch.nn.module): #主要構成為__init__和forward函式

"""神經網路"""

def __init__(self, n_feature, n_hidden_layer, n_output):

super(neuro_net, self).__init__() #固定繼承模組

self.hidden_layer1 = torch.nn.linear(n_feature, 25) #第乙個隱層,2,25

self.hidden_layer2 = torch.nn.linear(25, 20) #第二個隱層,25,20

self.output_layer = torch.nn.linear(20, n_output) #輸出層, 20,2

def forward(self, input):

hidden_out1 = torch.relu(self.hidden_layer1(input)) #將第乙個隱層的輸入relu

out1 = self.hidden_layer2(hidden_out1) #將第乙個隱層的輸出作為第二個隱層的輸入

hidden_out2 = torch.relu(out1) #第二個隱層的輸入relu

out2 = self.output_layer(hidden_out2) #將第二個隱層的輸出作為輸出層的輸入

return out2

## 準備資料

data = torch.ones(100, 2)

x1 = torch.normal(mean=2*data, std=1)

y1 = torch.zeros(100) # x1 對應的標籤

x2 = torch.normal(mean=-2*data, std=1)

y2 = torch.ones(100) # x2 對應的標籤

train_x = torch.cat((x1, x2), dim=0).type(torch.float32) # 合併兩類資料(x1, x2),生成訓練資料

label_y = torch.cat((y1, y2), dim=0).type(torch.int64) # 合併兩類便簽(y1,y2),生成真實標籤

print(train_x, label_y)

# # 檢視資料分布

# plt.scatter(train_x.numpy()[:, 0], train_x.numpy()[:, 1])

# plt.show()

## 進行訓練

num_feature = 2

num_hidden_layer = 10

num_output = 2

epoches = 200

net = neuro_net(num_feature, num_hidden_layer, num_output)

print(net) # 檢視網路結構

plt.ion()

# 優化器

optimizer = torch.optim.sgd(net.parameters(), lr=0.02)

# 定義損失函式

loss_function = torch.nn.crossentropyloss()

for epoch in range(epoches):

#以下的五句話為固定使用

out = net(train_x) #網路輸出

loss = loss_function(out, label_y) #計算網路**值和真實值之間的loss

optimizer.zero_grad() #因為訓練的過程通常使用mini-batch方法,所以如果不將梯度清零的話,梯度會與上乙個batch的資料相關,因此該函式要寫在反向傳播和梯度下降之前。

loss.backward() #反向傳播

optimizer.step() #step()函式的作用是執行一次優化步驟,通過梯度下降法來更新引數的值。

###################### 繪圖

if epoch % 5 == 0:

print("已訓練{}步 | loss:{}。".format(epoch, loss))

plt.cla()

pridect_y = torch.max(out, dim=1)[1]

pridect_label = pridect_y.data.numpy() # **的label

true_label = label_y.data.numpy() # 真實的label

plt.scatter(train_x.data.numpy()[:, 0], train_x.data.numpy()[:, 1], c=pridect_label)

# 計算準確率,顯示準確率

accuracy = float((pridect_label == true_label).astype(int).sum()) / float(true_label.size)

plt.text(1.5, -4, 'accuracy=%.2f' % accuracy, fontdict=)

plt.pause(0.1)

plt.ioff()

plt.show()

最重要且固定的:

pytorch搭建簡單的神經網路

主要是熟悉pytorch這個開源框架。這個網路主要是用來擬合y x 2這個函式用的 所以說很簡單啦 自己生成的訓練資料,全部用來做訓練集了。網路結構 乙個輸入的向量,一層隱藏層,一層輸出層。隱藏層用的relu啟用函式,輸出層什麼都沒加,直接線性輸出。from torch.autograd impor...

pytorch 搭建簡單神經網路(回歸)

準備資料 x data torch.unsqueeze torch.linspace 1 1,100 dim 1 y data x data.pow 2 通過matplotlib視覺化生成的資料 plt.scatter x data.numpy y data.numpy plt.show class...

pytorch搭建神經網路入門

autograd自動求導 pytorch 是乙個基於python的科學計算包,用於代替numpy,可以利用gpu的效能進行計算 作為乙個深度學習平台。張量 tensor 類似於numpy中的ndarray,但還可以在gpu上使用,實現加速計算的效果。建立張量的幾種方式 建立乙個沒有初始化的矩陣張量 ...