91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何用pytorch實現圖像分類數據集

發布時間:2021-10-12 10:14:08 來源:億速云 閱讀:230 作者:iii 欄目:開發技術

這篇文章主要介紹“如何用pytorch實現圖像分類數據集”,在日常操作中,相信很多人在如何用pytorch實現圖像分類數據集問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何用pytorch實現圖像分類數據集”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

目錄
  • 讀取數據集

  • 讀取小批量

  • 整合所有組件

目前廣泛使用的圖像分類數據集之一是MNIST數據集。如今,MNIST數據集更像是一個健全的檢查,而不是一個基準。

為了提高難度,我們將在接下來的章節中討論在2017年發布的性質相似但相對復雜的Fashion-MNIST數據集。

import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l
d2l.use_svg_display()

讀取數據集

我們可以通過框架中的內置函數將Fashion-MNIST數據集下載并讀取到內存中。

# 通過ToTensor實例將圖像數據從PIL類型變換成32位浮點數格式
# 并除以255使得所有像素的數值均在0到1之間
trans = transforms.ToTensor()
mnist_train = torchvision.datasets.FashionMNIST(root="../data", train=True, transform=trans, download=True)
mnist_test = torchvisino.datasets.FashionMNIST(root="../data", train=False, transform=trans, download=True)

Fashion-MNIST由10個類別的圖像組成,每個類別由訓練集中的6000張圖像和測試集中的1000張圖像組成。

測試數據集(test dataset)不會用于訓練,只用于評估模型性能。訓練集和測試集分別包含60000和10000張圖像。

len(mnist_train), len(mnist_test)
(60000, 10000)

每個輸入圖像的高度和寬度均為28像素。數據集由灰度圖像組成,其通道數為1。

為了簡潔起見,本篇中,我們將高度h像素,寬度w像素圖像的形狀即為 h×w或 (h,w)。

mnist_train[0][0].shape
torch.size([1, 28, 28])

Fashion-MNIST中包含10個類別分別是

t-shirt(T恤)、trouser(褲?)、pullover(套衫)、dress(連?裙)、coat(外套)、

sandal(涼鞋)、shirt(襯衫)、sneaker(運動鞋)、bag(包)和ankle boot(短靴)

以下函數用于在數字標簽索引及其文本名稱之間進行轉換。

def get_fashion_mnist_labels(labels):
	"""返回Fashion-MNIST數據集的本文標簽。"""
	text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
	return [text_labels[int(i)] for i in labels]

我們現在可以創建一個函數來可視化這些樣本。

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):
	"""Plot a list of images."""
	figsize = (num_cols * scale, num_rows * scale)
	_, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)
	axes = axes.flatten()
	for i, (ax, img) in enumerate(zip(axes, imgs)):
		if torch.is_tensor(img):
			# 圖片張量
			ax.imshow(img.numpy())
		else:
			# PIL圖片
			ax.imshow(img)
		ax.axes.get_xaxis().set_visible(False)
		ax.axes.get_yaxis().set_visible(False)
		if titles:
			ax.set_title(titles[i])
	return axes

以下是訓練數據集中前幾個樣本的圖像及其相應的標簽(文本形式)。

X, y = next(iter(data.DataLoader(mnist_train, batch_size=18)))
show_images(X.reshape(18, 28, 28), 2, 9, titles=get_fashion_mnist_labels(y))

如何用pytorch實現圖像分類數據集

讀取小批量

為了使我們在讀取訓練集和測試集時更容易,我們使用內置的數據迭代器,而不是從零開始創建一個。回顧一下,在每次迭代中,數據加載器每次都會讀取一小批量數據,大小為batch_size。我們在訓練數據迭代其中還隨機打亂了所有樣本

batch_size = 256
def get_dataloader_workers():
	"""使用4個進程來讀取數據。"""
	return 4
train_iter = data.DataLoader(mnist_train, batch_size, shuffle=True, num_workers=get_dataloader_workers())

整合所有組件

現在我們定義load_data_fashion_mnist函數,用于獲取和讀取Fashion-MNIST數據集。它返回訓練集和驗證集的數據迭代器。此外,它還接受一個可選參數,用來將圖像大小調整為另一種形狀。

def load_data_fashion_mnist(batch_size, resize=None):
	"""下載Fashion-MNIST數據集,然后將其加載到內存中。"""
	trans = [transforms.ToTensor()]	
	if resize:
		trans.insert(0, transforms.Resize(resize))	
	trans = transforms.Compose(trans)
	mnist_train = torchvision.datasets.FashionMNIST(root="../data", train=True, transforms=trans, download=True)
	mnist_test = torchvision.datasets.FashionMNIST(root="../data", train=False, transforms=trans, download=True)
	return(data.DataLoader(mnist_train, batch_size, shuffle=True, num_workers=get_dataloader_workers()),
		   data.DataLoader(mnist_test, batch_size, shuffle=False, num_workers=get_dataloader_workers()))

下面,我們通過指定resize參數來測試load_data_fashion_mnist函數的圖像大小調整功能。

train_iter, test_iter = load_data_fashion_mnist(32, resize=64)
for X, y in train_iter:
	print(X.shape, X.dtype, y.shape, y.dtype)
	break
torch.Size([32, 1, 64, 64]) torch.float32 torch.Size([32]) torch.int64

到此,關于“如何用pytorch實現圖像分類數據集”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

南涧| 集贤县| 仁布县| 新田县| 沁阳市| 婺源县| 洛阳市| 乌兰察布市| 定西市| 海宁市| 正镶白旗| 房山区| 仪陇县| 奉化市| 中阳县| 兴文县| 清水河县| 万州区| 阿拉尔市| 南漳县| 通江县| 宾川县| 伊吾县| 临潭县| 中宁县| 丹江口市| 泸水县| 遵义市| 新宁县| 广水市| 鞍山市| 成安县| 都匀市| 寿宁县| 准格尔旗| 贵南县| 武冈市| 棋牌| 泸州市| 太仓市| 札达县|