1. 程式人生 > 其它 >Pytorch學習筆記(2):邏輯迴歸

Pytorch學習筆記(2):邏輯迴歸

技術標籤:Pytorch在學了pythonpytorch神經網路邏輯迴歸

本部落格基於github上某位大神的pytorch入門學習程式碼,在他的基礎上加上了更詳細的中文註釋以及不懂的模組使用方法。github連線:https://github.com/yunjey/pytorch-tutorial

邏輯迴歸模型

執行程式碼之前,請確定當前環境下已經安裝torch、torchvision。

# 匯入的包
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms

# 超引數設定
input_size = 784 # 輸入的大小(28*28) num_classes = 10 # 輸出分類的個數 num_epochs = 5 # 迭代的次數 batch_size = 100 # 一次輸入的資料量 learning_rate = 0.001 # 學習率 # 載入訓練集 # 通過torchvision的這個方法從網上下載MINIST資料集 train_dataset = torchvision.datasets.MNIST(root="../../data/minist", train=True, transform=transforms.ToTensor(), download=
True) # 載入測試集 test_dataset = torchvision.datasets.MNIST(root="../../data/minist", train=False, transform=transforms.ToTensor()) # 資料載入器,用來幫助讀取訓練和測試時所使用的資料,同時設定批次大小和資料亂序 train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size = batch_size, shuffle=True) test_loader = torch.
utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) # 構建一個線性模型 model = nn.Linear(input_size, num_classes) # 損失函式,交叉熵損失函式 criterion = nn.CrossEntropyLoss() # 優化器,使用隨機梯度下降 optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) # 訓練模型 total_step = len(train_loader) # 迭代num_epochs次 for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): # 將影象序列轉換至大小為28*28列,行數未知(設為-1)的矩陣 images = images.reshape(-1, 28*28) # 前向傳播,得到輸出 outputs = model(images) # 計算損失 loss = criterion(outputs, labels) # 反向傳播及其優化過程 # 清空梯度快取,避免影響到下一個batch optimizer.zero_grad() # 反向傳播,計算新的梯度 loss.backward() # 更新梯度 optimizer.step() if (i+1) % 100 == 0: print('Epoch [{}/{}], Step [{}/{}], Loss:{:.4f}'.format(epoch + 1, num_epochs, i+1, total_step, loss.item())) # 模型測試 with torch.no_grad(): correct = 0 total = 0 for images, labels in test_loader: # 設為28*28列的陣列,行數未知,設為-1 images = images.reshape(-1, 28*28) # 預測輸出 outputs = model(images) # _代表最大值,predicted代表最大值所在的index,1為輸出所在行的最大值 _, predicted = torch.max(outputs.data, 1) # 返回labels的個數 total += labels.size(0) # 計算正確預測的個數 correct += (predicted == labels).sum() print("Accuracy of the model on the 10000 test images: {} %".format(100 * correct / total)) # 儲存訓練好的模型 torch.save(model.state_dict(), "model.ckpt")

執行結果(部分):
在這裡插入圖片描述


方法解釋

torchvision.datasets.MNIST(root,train,transform,download)

這個方法可以幫助我們下載MINIST資料集。

  • root:資料下載存放的目錄
  • train:是否下載訓練集,True為下載訓練集,False為下載測試集
  • transform:接收影象並對其進行轉換。這裡使用的是transforms.ToTensor()指把PIL.Image(RGB) 或者numpy.ndarray(H x W x C) 從0到255的值對映到0到1的範圍內,並轉化成Tensor格式。(解釋來自網上)
  • download:是否從網上下載該資料集

torch.utils.data.DataLoader(dataset, batch_size, shuffle)

處理訓練集和測試集,用來對資料進行分批和打亂。

  • dataset:輸入的資料
  • batch_size:每次輸入給模型的資料的行數,即對資料進行分批,預設為1
  • shuffle:是否對資料進行打亂

此外還有其他的引數,此處沒有用到不做解釋,可以查詢中文手冊或點選下面相關參考連結進行查閱。


可能出現的錯誤

有可能會出現torchvision下載錯誤問題:
在這裡插入圖片描述

原因是安裝的torch版本和torchvision不對應,可以通過安裝固定版本的torch和torchvision來解決:


pip install torch==1.3.1 -f https://download.pytorch.org/whl/torch_stable.html

pip install torchvision==0.4.1

參考:

totensor方法和normalize方法 數值對映和歸一化:https://www.cnblogs.com/lishikai/p/12364438.html

「學習筆記」torchvision.datasets.MNIST 引數解讀/中文使用手冊:https://blog.csdn.net/ftimes/article/details/105202039

[ PyTorch ] torch.utils.data.DataLoader 中文使用手冊:https://blog.csdn.net/ftimes/article/details/105201002

解決 Could not find a version that satisfies the requirement torch==1.4.0:https://www.cnblogs.com/aze999/p/13784572.html