參考自:
以下**摘抄自
,請先閱讀上述參考文章。(改了幾個引數試試)
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上使用,實現加速計算的效果。建立張量的幾種方式 建立乙個沒有初始化的矩陣張量 ...