日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【pytorch】简单BP神经网络用于通用分类任务的代码模板

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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神经网络用于通用分类任务的代码模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。