<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了Pytorch實現邏輯迴歸分類的具體程式碼,供大家參考,具體內容如下
步驟:
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))
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。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45