亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Pytorch實(shí)現(xiàn)邏輯回歸分類

 更新時(shí)間:2022年07月30日 11:10:06   作者:遠(yuǎn)方與你  
這篇文章主要為大家詳細(xì)介紹了Pytorch實(shí)現(xiàn)邏輯回歸分類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Pytorch實(shí)現(xiàn)邏輯回歸分類的具體代碼,供大家參考,具體內(nèi)容如下

1、代碼實(shí)現(xiàn)

步驟:

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

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 ?# 分類的類別個(gè)數(shù)
num_epochs = 10 ?# 迭代次數(shù)
batch_size = 50 ?# 批量訓(xùn)練個(gè)數(shù)
learning_rate = 0.01 ?# 學(xué)習(xí)率


# 下載訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)
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)

# 創(chuàng)建邏輯回歸類模型 ?(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

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


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

?? ??? ?# 獲得模型的訓(xùn)練數(shù)據(jù)結(jié)果
? ? ? ? outputs = model(images)
?? ??? ?
?? ??? ?# 計(jì)算損失函數(shù)用于計(jì)算梯度
? ? ? ? loss = criterion(outputs, labels)

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

?? ??? ?# 每隔一段時(shí)間輸出一個(gè)訓(xùn)練結(jié)果
? ? ? ? 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()))

# 訓(xùn)練好的模型預(yù)測(cè)測(cè)試數(shù)據(jù)集
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()函數(shù)中的1表示維度,意思是計(jì)算某一行的最大值
? ? total += labels.size(0)
? ? correct += (predicts==labels).sum()

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

2、踩過的坑

1.在代碼中下載訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)的時(shí)候,兩段代碼是有區(qū)別的:

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

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

在第二段代碼中沒有加download=True,加了的話在使用測(cè)試數(shù)據(jù)進(jìn)行預(yù)測(cè)的時(shí)候會(huì)報(bào)錯(cuò)。

代碼中transform=transforms.ToTensor()的作用是將PIL圖像轉(zhuǎn)換為Tensor,同時(shí)已經(jīng)進(jìn)行歸一化處理。

2.代碼中設(shè)置損失函數(shù):

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

一開始的時(shí)候直接使用:

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

這樣也會(huì)報(bào)錯(cuò),因此需要將loss改為criterion。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Python中os.path與pathlib的用法和性能對(duì)比

    詳解Python中os.path與pathlib的用法和性能對(duì)比

    pathlib 模塊是在Python3.4版本中首次被引入到標(biāo)準(zhǔn)庫中的,這篇文章主要來和大家介紹一下Python中os.path與pathlib再用法和性能上的區(qū)別,感興趣的可以了解下
    2024-03-03
  • Python探索之自定義實(shí)現(xiàn)線程池

    Python探索之自定義實(shí)現(xiàn)線程池

    這篇文章主要介紹了Python探索之自定義實(shí)現(xiàn)線程池,使用queue實(shí)現(xiàn)線程池的方法,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Python實(shí)戰(zhàn)之異步獲取中國天氣信息

    Python實(shí)戰(zhàn)之異步獲取中國天氣信息

    這篇文章主要介紹了如何利用Python爬蟲異步獲取天氣信息,用的API是中國天氣網(wǎng)。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手試一試
    2022-03-03
  • Python實(shí)現(xiàn)的微信紅包提醒功能示例

    Python實(shí)現(xiàn)的微信紅包提醒功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的微信紅包提醒功能,結(jié)合實(shí)例形式分析了Python使用微信模塊itchat實(shí)現(xiàn)微信紅包提醒操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-08-08
  • Python把png轉(zhuǎn)成jpg的項(xiàng)目實(shí)踐

    Python把png轉(zhuǎn)成jpg的項(xiàng)目實(shí)踐

    本文主要介紹了Python把png轉(zhuǎn)成jpg的項(xiàng)目實(shí)踐,可以使用PIL庫來將PNG圖片轉(zhuǎn)換為JPG格式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Python模擬FTP文件服務(wù)器的操作方法

    Python模擬FTP文件服務(wù)器的操作方法

    這篇文章主要介紹了Python_模擬FTP文件服務(wù)器的操作方法,分為服務(wù)端和客戶端,要求可以有多個(gè)客戶端同時(shí)操作。本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-02-02
  • python將音頻進(jìn)行變速的操作方法

    python將音頻進(jìn)行變速的操作方法

    這篇文章主要介紹了python將音頻進(jìn)行變速的操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • opencv python 圖像輪廓/檢測(cè)輪廓/繪制輪廓的方法

    opencv python 圖像輪廓/檢測(cè)輪廓/繪制輪廓的方法

    這篇文章主要介紹了opencv python 圖像輪廓/檢測(cè)輪廓/繪制輪廓的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 使用Python實(shí)現(xiàn)首頁通知功能

    使用Python實(shí)現(xiàn)首頁通知功能

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)首頁通知功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • pycharm遠(yuǎn)程調(diào)試openstack的圖文教程

    pycharm遠(yuǎn)程調(diào)試openstack的圖文教程

    這篇文章主要為大家詳細(xì)介紹了pycharm遠(yuǎn)程調(diào)試openstack的圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評(píng)論