亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pytorch如何實現邏輯回歸分類

發布時間:2022-07-30 14:25:16 來源:億速云 閱讀:138 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Pytorch如何實現邏輯回歸分類”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Pytorch如何實現邏輯回歸分類”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

1、代碼實現

步驟:

1.獲得數據
2.建立邏輯回歸模型
3.定義損失函數
4.計算損失函數
5.求解梯度
6.梯度更新
7.預測測試集

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
from torch.autograd import Variable
import torchvision.datasets as dataset
import torchvision.transforms as transforms
from torch.utils.data import DataLoader

input_size = 784  # 輸入到邏輯回歸模型中的輸入大小
num_classes = 10  # 分類的類別個數
num_epochs = 10  # 迭代次數
batch_size = 50  # 批量訓練個數
learning_rate = 0.01  # 學習率


# 下載訓練數據和測試數據
train_dataset = dataset.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = dataset.MNIST(root='./data',train=False, transform=transforms.ToTensor)

# 使用DataLoader形成批處理文件
train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)

# 創建邏輯回歸類模型  (sigmoid(wx+b))
class LogisticRegression(nn.Module):
    def __init__(self,input_size,num_classes):
        super(LogisticRegression,self).__init__()
        self.linear = nn.Linear(input_size,num_classes)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        out = self.linear(x)
        out = self.sigmoid(out)
        return out

# 設定模型參數
model = LogisticRegression(input_size, num_classes)
# 定義損失函數,分類任務,使用交叉熵
criterion = nn.CrossEntropyLoss()
# 優化算法,隨機梯度下降,lr為學習率,獲得模型需要更新的參數值
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)


# 使用訓練數據訓練模型
for epoch in range(num_epochs):
    # 批量數據進行模型訓練
    for i, (images, labels) in enumerate(train_loader):
        # 需要將數據轉換為張量Variable
        images = Variable(images.view(-1, 28*28))
        labels = Variable(labels)
        
        # 梯度更新前需要進行梯度清零
        optimizer.zero_grad()

        # 獲得模型的訓練數據結果
        outputs = model(images)
        
        # 計算損失函數用于計算梯度
        loss = criterion(outputs, labels)

        # 計算梯度
        loss.backward()
    
        # 進行梯度更新
        optimizer.step()

        # 每隔一段時間輸出一個訓練結果
        if (i+1) % 100 == 0:
            print('Epoch:[%d %d], Step:[%d/%d], Loss: %.4f' % (epoch+1,num_epochs,i+1,len(train_dataset)//batch_size,loss.item()))

# 訓練好的模型預測測試數據集
correct = 0
total = 0
for images, labels in test_loader:
    images = Variable(images.view(-1, 28*28))  # 形式為(batch_size,28*28)
    outputs = model(images)
    _,predicts = torch.max(outputs.data,1)  # _輸出的是最大概率的值,predicts輸出的是最大概率值所在位置,max()函數中的1表示維度,意思是計算某一行的最大值
    total += labels.size(0)
    correct += (predicts==labels).sum()

print('Accuracy of the model on the 10000 test images: %d %%' % (100 * correct / total))

2、踩過的坑

1.在代碼中下載訓練數據和測試數據的時候,兩段代碼是有區別的:

train_dataset = dataset.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = dataset.MNIST(root='./data',train=False, transform=transforms.ToTensor)

第一段代碼中多了一個download=True,這個的作用是,如果為True,則從Internet下載數據集并將其存放在根目錄中。如果數據已經下載,則不會再次下載。

在第二段代碼中沒有加download=True,加了的話在使用測試數據進行預測的時候會報錯。

代碼中transform=transforms.ToTensor()的作用是將PIL圖像轉換為Tensor,同時已經進行歸一化處理。

2.代碼中設置損失函數:

criterion = nn.CrossEntropyLoss()
loss = criterion(outputs, labels)

一開始的時候直接使用:

loss = nn.CrossEntropyLoss()
loss = loss(outputs, labels)

這樣也會報錯,因此需要將loss改為criterion。

讀到這里,這篇“Pytorch如何實現邏輯回歸分類”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浑源县| 青岛市| 汾阳市| 宜昌市| 蓝山县| 义马市| 新乡县| 沧州市| 措勤县| 宿松县| 山阳县| 桃源县| 务川| 洛阳市| 大同县| 平邑县| 琼中| 长春市| 高青县| 武胜县| 西城区| 桦甸市| 镇江市| 公主岭市| 通州市| 余干县| 临海市| 南川市| 开封市| 龙海市| 扬州市| 林西县| 白水县| 钟山县| 丰县| 察哈| 天全县| 和龙市| 葫芦岛市| 丹江口市| 邯郸市|