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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习导论(5)手写数字识别问题步骤

發布時間:2023/12/15 pytorch 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习导论(5)手写数字识别问题步骤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

深度學習導論(5)手寫數字識別問題步驟

  • 手寫數字識別分類問題具體步驟(Training an handwritten digit classification)
  • 加載數據
  • 顯示訓練集中的圖片
  • 定義神經網絡模型(DNN)
  • 定義損失函數
  • 訓練網絡模型
  • 保存訓練模型
  • 測試模型
  • 對整個測試集進行測試
  • 判斷各個類(0~9)的正確率

手寫數字識別分類問題具體步驟(Training an handwritten digit classification)

  • Load and normalizing the MNIST training and test datasets using torchvision;
    使用torchvision加載并對MNIST數據集規格化;
  • Define a Convolution Neural Network
    定義卷積神經網絡;
  • Define a loss function
    定義損失函數;
  • Train the network on the training data
    利用數據經過反復迭代(多輪epoch),訓練網絡,得到一組最優的(或者局部最優的)網絡參數(w和b);
  • Test the network on the test data
    得到網絡參數(w和b)后,模型就有了,就可以利用測試集數據去測試網絡模型。

加載數據

  • MNIST數據集在datasets包里面;
  • transforms是應用于對數據集的變換(且一般應用于對圖像的變換),通過transforms將圖像的數據轉換成tensor的數據;
  • MNIST已經規格化成[0, 1],因此不需要進行規格化,但也可以規格化成[-1, 1];
  • ‘./data’是定義一個目錄,會將下載后的數據放入到本地的‘./data’目錄里; ‘train = True’表示下載的是訓練數據; ‘download = True’表示數據將下載到本地; ‘transform = transform’表示將數據做transform變換(即前邊定義的transform = transforms.Compose([transforms.ToTensor]));
  • train_loader = torch.utils.data.DataLoader(trainset, batch_size=5)表示將數據封裝成可以直接送入到網絡中的數據,batch_size = 5表示每一批數據會送入5個樣本;
  • 采樣同樣的方法,對測試集進行封裝;
  • 定義標簽[0~9],方便輸出和顯示。
  • 顯示訓練集中的圖片

  • imshow: 顯示單張圖片;
  • imshowGridImages: 顯示多張圖片(以網格的形式);
  • 定義神經網絡模型(DNN)

  • Net(nn.Module): 定義神經網絡的類,基于nn.Module模塊定義的;
  • __init__函數中定義了“層”;
  • forward函數將__init__函數中定義的“層”串接起來;
  • 定義損失函數

  • nn.CrossEntropyLoss框架中已經準備好了一些損失函數,直接調用即可;
  • SGD為優化器,隨機梯度下降法;
  • 訓練網絡模型

  • 定義循環epoch;
  • running_loss為自己定義的損失值;
  • enumerate(train_loader)表示將訓練好的數據分批次取出來;
  • inputs, labels = data中的data實際上是batch,即一批數據,而不是單獨的樣本;
  • view(inputs.size(0), -1)表示將矩陣“抻平”成一個向量;
  • optimizer.zero_grad()表示將優化器中的參數w和b梯度的值初始化成0;
  • criterion為前邊定義的損失函數;
  • 通過調用loss.backword()方法可以計算w和b的偏導數;
  • 輸入層為28*28=784維,中間層有512維,輸出層有10維,那么:
    (1) 隱藏層h_1的參數: w_1=784×512, b_1=512, h_1有幾個神經元,b_1就有幾個分量。所以h_1:784×512+512;
    (2) 輸出層o的參數: w_2=512×10, b_2=10。所以o:512×10+10;
  • 通過optimizer.step()方法可以自動地更新w和b;
  • 保存訓練模型

  • 保存后,日后就可以對一些模型進行測試;
  • 測試模型

  • iter為迭代器;
  • net.load_state_dict(torch.load(PATH))表示將之前保存的數據加載到模型當中去(實際上加載的就是w和b);
  • 對整個測試集進行測試

  • no_grad表示不需要加入梯度計算,因為測試時只有前向過程,在訓練的時候才會有前向和反向的過程;
  • 判斷各個類(0~9)的正確率

    總結

    以上是生活随笔為你收集整理的深度学习导论(5)手写数字识别问题步骤的全部內容,希望文章能夠幫你解決所遇到的問題。

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