【pytorch】简单BP神经网络用于通用分类任务的代码模板
概述
最近正在學習智能信息處理課程,接觸到了一些有關深度學習pytorch的簡單應用,pytorch作為python中最常見的深度學習任務工具應用也非常廣泛。
如果小伙伴們對神經網絡部分相關理論知識比較熟悉,但不知道代碼具體怎么實現,可以參考本篇文章的代碼部分,希望能夠對大家有所幫助。
也是作為模板供自己和大家參考,主要是怕忘hhh(手動/doge
數據集
本篇代碼使用的數據是sklearn中的鳶尾花數據集,訓練集由120組鳶尾花的數據特征及其標簽組成,另包含相同類型的數據30組用作測試集。
其中,鳶尾花的數據特征以小數形式保存,標簽分為3類(0,1,2),代表其屬于不同類別。
另附數據集下載地址:
https://download.csdn.net/download/weixin_52456426/86724498
(上圖為部分訓練集數據截圖)
代碼
本代碼采用torch提供的框架,設定輸入層特征數為4(即特征數量),隱藏層(hidden layer)神經元數為10,輸出層維數為3(標簽數量),激活函數選用sigmoid(當然可以用ReLU或者tanh等,經實際試驗,在本次數據集上效果差不多的)
優化器選用Adam參數優化(也可以用SGD隨機梯度下降等);由于是經典回歸任務,loss損失函數設定為交叉熵損失函數。
設定訓練輪數為2000,每10輪進行訓練集上的accuracy(準確率)與loss值的計算,最終在測試集上運行我們的模型。
代碼部分如下(關鍵部分給出注釋):
# -*- coding: utf-8 -*- # 2022/9/27 # Author:Jonathan_K_Wolf import numpy as np import torch import pandas as pd import torch.nn as nn import torch.nn.functional as F# 導入數據 data_train = pd.read_csv('./iris_training.csv') # 訓練集特征向量集合 train_x = np.array(data_train.iloc[:, 0:4]) # 訓練集標簽向量集合 train_y = np.array(data_train.iloc[:, 4]) # 轉化為torch.Tensor形式 x_train = torch.FloatTensor(train_x) y_train = torch.LongTensor(train_y)# 定義網絡結構 class Net(nn.Module):def __init__(self, n_features, n_hidden, n_output):super(Net, self).__init__()self.hidden = nn.Linear(n_features, n_hidden)self.out = nn.Linear(n_hidden, n_output)# 前向傳播過程def forward(self, x):x = F.relu(self.hidden(x))x = self.out(x)return x# 實例化網絡 model = Net(n_features=4, n_hidden=10, n_output=3) # 參數優化器,可以選用Adam或SGD optimizer = torch.optim.Adam(model.parameters(), lr=0.06) # 損失函數,分類用交叉熵,回歸用均方誤差MSELoss loss_func = torch.nn.CrossEntropyLoss()# 訓練階段 for i in range(1, 3001):output = model(x_train)loss = loss_func(output, y_train)optimizer.zero_grad()loss.backward()optimizer.step()if i % 10 == 0:acc = 0prediction = torch.argmax(output, dim=1)pred_y = prediction.numpy()target_y = y_train.numpy()for item in range(len(pred_y)):if pred_y[item] == target_y[item]:acc += 1acc /= len(pred_y)acc = round(acc, 3)print('accuracy at {} epoch:{}, loss at {} epoch:{}'.format(i, acc, i, loss))# 測試階段 data_test = pd.read_csv('./iris_test.csv') test_x = np.array(data_test.iloc[:, 0:4]) test_y = np.array(data_test.iloc[:, 4])# 測試集轉換成Tensor格式 x_test = torch.FloatTensor(test_x) y_test = torch.LongTensor(test_y)# 對測試集進行準確率評估 output_prediction = model(x_test) output_pred = torch.argmax(output_prediction, dim=1) output_pred = output_pred.numpy() acc_test = 0 for item in range(len(test_y)):if output_pred[item] == test_y[item]:acc_test += 1 acc_test /= len(test_y) acc_test = round(acc_test, 3) print('test of acc:{}'.format(acc_test))最終效果如下:
總結
以上是生活随笔為你收集整理的【pytorch】简单BP神经网络用于通用分类任务的代码模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux+暂停运行,如何暂停和继续运行
- 下一篇: 在Mac下载安装win10虚拟机教程及分