国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PyTorch教程-4.2. 圖像分類數據集

jf_pJlTbmA9 ? 來源:PyTorch ? 作者:PyTorch ? 2023-06-05 15:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

廣泛用于圖像分類的數據集之一是手寫數字的MNIST 數據集 (LeCun等人,1998 年) 。在 1990 年代發布時,它對大多數機器學習算法提出了巨大挑戰,其中包含 60,000 張圖像 28×28像素分辨率(加上 10,000 張圖像的測試數據集)。客觀地說,在 1995 年,配備高達 64MB RAM 和驚人的 5 MFLOPs 的 Sun SPARCStation 5 被認為是 AT&T 貝爾實驗室最先進的機器學習設備。實現數字識別的高精度是一個1990 年代 USPS 自動分揀信件的關鍵組件。深度網絡,如 LeNet-5 (LeCun等人,1995 年)、具有不變性的支持向量機 (Sch?lkopf等人,1996 年)和切線距離分類器 (Simard等人,1998 年)都允許達到 1% 以下的錯誤率。

十多年來,MNIST 一直是比較機器學習算法的參考點。雖然它作為基準數據集運行良好,但即使是按照當今標準的簡單模型也能達到 95% 以上的分類準確率,這使得它不適合區分強模型和弱模型。更重要的是,數據集允許非常高的準確性,這在許多分類問題中通常是看不到的。這種算法的發展偏向于可以利用干凈數據集的特定算法系列,例如活動集方法和邊界搜索活動集算法。今天,MNIST 更像是一種健全性檢查,而不是基準。ImageNet ( Deng et al. , 2009 )提出了一個更相關的挑戰。不幸的是,對于本書中的許多示例和插圖來說,ImageNet 太大了,因為訓練這些示例需要很長時間才能使示例具有交互性。作為替代,我們將在接下來的部分中重點討論定性相似但規模小得多的 Fashion-MNIST 數據集(Xiao等人,2017 年),該數據集于 2017 年發布。它包含 10 類服裝的圖像 28×28像素分辨率。

%matplotlib inline
import time
import torch
import torchvision
from torchvision import transforms
from d2l import torch as d2l

d2l.use_svg_display()

%matplotlib inline
import time
from mxnet import gluon, npx
from mxnet.gluon.data.vision import transforms
from d2l import mxnet as d2l

npx.set_np()

d2l.use_svg_display()

%matplotlib inline
import time
import jax
import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds
from jax import numpy as jnp
from d2l import jax as d2l

d2l.use_svg_display()

No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)

%matplotlib inline
import time
import tensorflow as tf
from d2l import tensorflow as d2l

d2l.use_svg_display()

4.2.1. 加載數據集

由于它是一個經常使用的數據集,所有主要框架都提供了它的預處理版本。我們可以使用內置的框架實用程序將 Fashion-MNIST 數據集下載并讀取到內存中。

class FashionMNIST(d2l.DataModule): #@save
  """The Fashion-MNIST dataset."""
  def __init__(self, batch_size=64, resize=(28, 28)):
    super().__init__()
    self.save_hyperparameters()
    trans = transforms.Compose([transforms.Resize(resize),
                  transforms.ToTensor()])
    self.train = torchvision.datasets.FashionMNIST(
      root=self.root, train=True, transform=trans, download=True)
    self.val = torchvision.datasets.FashionMNIST(
      root=self.root, train=False, transform=trans, download=True)

class FashionMNIST(d2l.DataModule): #@save
  """The Fashion-MNIST dataset."""
  def __init__(self, batch_size=64, resize=(28, 28)):
    super().__init__()
    self.save_hyperparameters()
    trans = transforms.Compose([transforms.Resize(resize),
                  transforms.ToTensor()])
    self.train = gluon.data.vision.FashionMNIST(
      train=True).transform_first(trans)
    self.val = gluon.data.vision.FashionMNIST(
      train=False).transform_first(trans)

class FashionMNIST(d2l.DataModule): #@save
  """The Fashion-MNIST dataset."""
  def __init__(self, batch_size=64, resize=(28, 28)):
    super().__init__()
    self.save_hyperparameters()
    self.train, self.val = tf.keras.datasets.fashion_mnist.load_data()

class FashionMNIST(d2l.DataModule): #@save
  """The Fashion-MNIST dataset."""
  def __init__(self, batch_size=64, resize=(28, 28)):
    super().__init__()
    self.save_hyperparameters()
    self.train, self.val = tf.keras.datasets.fashion_mnist.load_data()

Fashion-MNIST 包含來自 10 個類別的圖像,每個類別在訓練數據集中由 6,000 個圖像表示,在測試數據集中由 1,000 個圖像表示。測試 數據集用于評估模型性能(不得用于訓練)。因此,訓練集和測試集分別包含 60,000 和 10,000 張圖像。

data = FashionMNIST(resize=(32, 32))
len(data.train), len(data.val)

(60000, 10000)

data = FashionMNIST(resize=(32, 32))
len(data.train), len(data.val)

(60000, 10000)

data = FashionMNIST(resize=(32, 32))
len(data.train[0]), len(data.val[0])

(60000, 10000)

data = FashionMNIST(resize=(32, 32))
len(data.train[0]), len(data.val[0])

(60000, 10000)

圖像是灰度和放大到32×32分辨率以上的像素。這類似于由(二進制)黑白圖像組成的原始 MNIST 數據集。但請注意,大多數具有 3 個通道(紅色、綠色、藍色)的現代圖像數據和超過 100 個通道的高光譜圖像(HyMap 傳感器有 126 個通道)。按照慣例,我們將圖像存儲為 c×h×w張量,其中c是顏色通道數,h是高度和w是寬度。

data.train[0][0].shape

torch.Size([1, 32, 32])

data.train[0][0].shape

(1, 32, 32)

data.train[0][0].shape

(28, 28)

data.train[0][0].shape

(28, 28)

Fashion-MNIST 的類別具有人類可理解的名稱。以下便捷方法在數字標簽及其名稱之間進行轉換。

@d2l.add_to_class(FashionMNIST) #@save
def text_labels(self, indices):
  """Return text labels."""
  labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',
       'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
  return [labels[int(i)] for i in indices]

4.2.2. 讀取一個小批量

為了讓我們在讀取訓練集和測試集時更輕松,我們使用內置的數據迭代器而不是從頭開始創建一個。回想一下,在每次迭代中,數據迭代器讀取一個大小為 的小批量數據batch_size。我們還隨機打亂訓練數據迭代器的示例。

@d2l.add_to_class(FashionMNIST) #@save
def get_dataloader(self, train):
  data = self.train if train else self.val
  return torch.utils.data.DataLoader(data, self.batch_size, shuffle=train,
                    num_workers=self.num_workers)

@d2l.add_to_class(FashionMNIST) #@save
def get_dataloader(self, train):
  data = self.train if train else self.val
  return gluon.data.DataLoader(data, self.batch_size, shuffle=train,
                 num_workers=self.num_workers)

@d2l.add_to_class(FashionMNIST) #@save
def get_dataloader(self, train):
  data = self.train if train else self.val
  process = lambda X, y: (tf.expand_dims(X, axis=3) / 255,
              tf.cast(y, dtype='int32'))
  resize_fn = lambda X, y: (tf.image.resize_with_pad(X, *self.resize), y)
  shuffle_buf = len(data[0]) if train else 1
  return tfds.as_numpy(
    tf.data.Dataset.from_tensor_slices(process(*data)).batch(
      self.batch_size).map(resize_fn).shuffle(shuffle_buf))

@d2l.add_to_class(FashionMNIST) #@save
def get_dataloader(self, train):
  data = self.train if train else self.val
  process = lambda X, y: (tf.expand_dims(X, axis=3) / 255,
              tf.cast(y, dtype='int32'))
  resize_fn = lambda X, y: (tf.image.resize_with_pad(X, *self.resize), y)
  shuffle_buf = len(data[0]) if train else 1
  return tf.data.Dataset.from_tensor_slices(process(*data)).batch(
    self.batch_size).map(resize_fn).shuffle(shuffle_buf)

為了了解這是如何工作的,讓我們通過調用該 train_dataloader方法來加載一小批圖像。它包含 64 張圖像。

X, y = next(iter(data.train_dataloader()))
print(X.shape, X.dtype, y.shape, y.dtype)

torch.Size([64, 1, 32, 32]) torch.float32 torch.Size([64]) torch.int64

X, y = next(iter(data.train_dataloader()))
print(X.shape, X.dtype, y.shape, y.dtype)

(64, 1, 32, 32) float32 (64,) int32

X, y = next(iter(data.train_dataloader()))
print(X.shape, X.dtype, y.shape, y.dtype)

WARNING:tensorflow:From /home/d2l-worker/miniconda3/envs/d2l-en-release-1/lib/python3.9/site-packages/tensorflow/python/autograph/pyct/static_analysis/liveness.py:83: Analyzer.lamba_check (from tensorflow.python.autograph.pyct.static_analysis.liveness) is deprecated and will be removed after 2023-09-23.
Instructions for updating:
Lambda fuctions will be no more assumed to be used in the statement where they are used, or at least in the same block. https://github.com/tensorflow/tensorflow/issues/56089
(64, 32, 32, 1) float32 (64,) int32

X, y = next(iter(data.train_dataloader()))
print(X.shape, X.dtype, y.shape, y.dtype)

WARNING:tensorflow:From /home/d2l-worker/miniconda3/envs/d2l-en-release-1/lib/python3.9/site-packages/tensorflow/python/autograph/pyct/static_analysis/liveness.py:83: Analyzer.lamba_check (from tensorflow.python.autograph.pyct.static_analysis.liveness) is deprecated and will be removed after 2023-09-23.
Instructions for updating:
Lambda fuctions will be no more assumed to be used in the statement where they are used, or at least in the same block. https://github.com/tensorflow/tensorflow/issues/56089
(64, 32, 32, 1)  (64,) 

讓我們看看讀取圖像所花費的時間。盡管它是一個內置的加載程序,但速度并不快。盡管如此,這已經足夠了,因為使用深度網絡處理圖像需要更長的時間。因此,訓練網絡不受 IO 約束就足夠了。

tic = time.time()
for X, y in data.train_dataloader():
  continue
f'{time.time() - tic:.2f} sec'

'5.06 sec'

tic = time.time()
for X, y in data.train_dataloader():
  continue
f'{time.time() - tic:.2f} sec'

'4.12 sec'

tic = time.time()
for X, y in data.train_dataloader():
  continue
f'{time.time() - tic:.2f} sec'

'0.96 sec'

tic = time.time()
for X, y in data.train_dataloader():
  continue
f'{time.time() - tic:.2f} sec'

'0.95 sec'

4.2.3. 可視化

我們將經常使用 Fashion-MNIST 數據集。一個便利的功能show_images可以用來可視化圖像和相關的標簽。其實施細節推遲到附錄。

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5): #@save
  """Plot a list of images."""
  raise NotImplementedError

讓我們好好利用它。通常,可視化和檢查您正在訓練的數據是個好主意。人類非常善于發現不尋常的方面,因此,可視化可以作為一種額外的保護措施,防止實驗設計中的錯誤和錯誤。以下是訓練數據集中前幾個示例的圖像及其相應標簽(文本)。

@d2l.add_to_class(FashionMNIST) #@save
def visualize(self, batch, nrows=1, ncols=8, labels=[]):
  X, y = batch
  if not labels:
    labels = self.text_labels(y)
  d2l.show_images(X.squeeze(1), nrows, ncols, titles=labels)
batch = next(iter(data.val_dataloader()))
data.visualize(batch)

pYYBAGR5VLOAE8DAAAFXlI5prpg972.svg

@d2l.add_to_class(FashionMNIST) #@save
def visualize(self, batch, nrows=1, ncols=8, labels=[]):
  X, y = batch
  if not labels:
    labels = self.text_labels(y)
  d2l.show_images(X.squeeze(1), nrows, ncols, titles=labels)
batch = next(iter(data.val_dataloader()))
data.visualize(batch)

poYBAGR5VLWABCDeAAFUVW5zHbQ247.svg

@d2l.add_to_class(FashionMNIST) #@save
def visualize(self, batch, nrows=1, ncols=8, labels=[]):
  X, y = batch
  if not labels:
    labels = self.text_labels(y)
  d2l.show_images(jnp.squeeze(X), nrows, ncols, titles=labels)

batch = next(iter(data.val_dataloader()))
data.visualize(batch)

pYYBAGR5VLiAMQdTAAFW9OrJp3Q736.svg

@d2l.add_to_class(FashionMNIST) #@save
def visualize(self, batch, nrows=1, ncols=8, labels=[]):
  X, y = batch
  if not labels:
    labels = self.text_labels(y)
  d2l.show_images(tf.squeeze(X), nrows, ncols, titles=labels)
batch = next(iter(data.val_dataloader()))
data.visualize(batch)

pYYBAGR5VLiAMQdTAAFW9OrJp3Q736.svg

我們現在準備好在接下來的部分中使用 Fashion-MNIST 數據集。

4.2.4. 概括

我們現在有一個稍微更真實的數據集用于分類。Fashion-MNIST 是一個服裝分類數據集,由代表 10 個類別的圖像組成。我們將在后續部分和章節中使用該數據集來評估各種網絡設計,從簡單的線性模型到高級殘差網絡。正如我們通常對圖像所做的那樣,我們將它們讀取為形狀的張量(批量大小、通道數、高度、寬度)。目前,我們只有一個通道,因為圖像是灰度的(上面的可視化使用假調色板來提高可見性)。

最后,數據迭代器是實現高效性能的關鍵組件。例如,我們可能會使用 GPU 進行高效的圖像解壓縮、視頻轉碼或其他預處理。只要有可能,您就應該依靠利用高性能計算的良好實現的數據迭代器來避免減慢您的訓練循環。

4.2.5. 練習

減少batch_size(例如,減少到 1)會影響閱讀性能嗎?

數據迭代器的性能很重要。您認為當前的實施是否足夠快?探索改進它的各種選項。使用系統分析器找出瓶頸所在。

查看框架的在線 API 文檔。還有哪些其他數據集可用?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據集
    +關注

    關注

    4

    文章

    1236

    瀏覽量

    26196
  • pytorch
    +關注

    關注

    2

    文章

    813

    瀏覽量

    14853
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    PyTorch 中RuntimeError分析

    ? 錯誤原因 這個 RuntimeError 是因為在 PyTorch 中,upsample_nearest2d_out_frame(最近鄰2D上采樣)操作尚未對 BFloat16 數據類型提供
    發表于 03-06 06:02

    Pytorch 與 Visionfive2 兼容嗎?

    Pytorch 與 Visionfive2 兼容嗎? $ pip3 install torch torchvision torchaudio --index-url https
    發表于 02-06 08:28

    圖像采集卡分類、接口與性能指標詳解

    圖像采集卡是機器視覺、工業檢測、安防監控、醫療影像等領域的核心硬件,核心作用是將相機等圖像源輸出的模擬/數字信號轉化為計算機可識別、處理的數字圖像數據,同時完成信號同步、緩存、傳輸等關
    的頭像 發表于 01-29 16:55 ?466次閱讀
    <b class='flag-5'>圖像</b>采集卡<b class='flag-5'>分類</b>、接口與性能指標詳解

    圖像采集卡:連接設備與數據圖像樞紐

    在機器視覺與圖像傳輸體系中,圖像采集卡是無可替代的重要樞紐——它一端承接相機、內窺鏡、攝像機等前端圖像設備的信號輸出,另一端對接后端數據處理、存儲、展示系統,通過信號轉換、同步協調、高
    的頭像 發表于 01-22 13:51 ?233次閱讀
    <b class='flag-5'>圖像</b>采集卡:連接設備與<b class='flag-5'>數據</b>的<b class='flag-5'>圖像</b>樞紐

    【Sipeed MaixCAM Pro開發板試用體驗】基于MaixCAM-Pro的AI生成圖像鑒別系統

    圖像的快速鑒別,滿足實時或準實時的應用需求。 3. 數據采集 AI圖片數據,本項目使用gemini生成圖片,使用的是gem來實現的。 提示詞如下 你是一個能夠生成美術繪本風格插畫的智
    發表于 08-21 13:59

    AI Cube如何導入數據

    我從在線平臺標注完并且下載了數據,也按照ai cube的要求修改了文件夾名稱,但是導入提示 不知道是什么原因,我該怎么辦? 以下是我修改后的文件夾目錄
    發表于 08-11 08:12

    云訓練平臺數據過大無法下載數據至本地怎么解決?

    起因是現在平臺限制了圖片數量,想要本地訓練下載數據時發現只會跳出網絡異常的錯誤,請問這有什么解決辦法?
    發表于 07-22 06:03

    任正非說 AI已經確定是第四次工業革命 那么如何從容地加入進來呢?

    處理,TensorFlow、PyTorch用于構建和訓練神經網絡。以Python為例,通過編寫簡單的程序來處理數據,如讀取數據、進行數據
    發表于 07-08 17:44

    使用AICube導入數據點創建后提示數據不合法怎么處理?

    重現步驟 data目錄下 labels.txt只有英文 **錯誤日志** 但是使用示例的數據可以完成訓練并部署
    發表于 06-24 06:07

    數據下載失敗的原因?

    數據下載失敗什么原因太大了嗎,小的可以下載,想把大的下載去本地訓練報錯網絡錯誤 大的數據多大?數據量有多少?
    發表于 06-18 07:04

    在友晶LabCloud平臺上使用PipeCNN實現ImageNet圖像分類

    利用深度卷積神經網絡(CNN)進行圖像分類是通過使用多個卷積層來從輸入數據中提取特征,最后通過分類層做決策來識別出目標物體。
    的頭像 發表于 04-23 09:42 ?1082次閱讀
    在友晶LabCloud平臺上使用PipeCNN實現ImageNet<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>

    基于RV1126開發板實現自學習圖像分類方案

    在RV1126開發板上實現自學習:在識別前對物體圖片進行模型學習,訓練完成后通過算法分類得出圖像的模型ID。 方案設計邏輯流程圖,方案代碼分為分為兩個業務流程,主體代碼負責抓取、合成圖像,算法代碼負責訓練和檢測功能
    的頭像 發表于 04-21 13:37 ?11次閱讀
    基于RV1126開發板實現自學習<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>方案

    快速部署!米爾全志T527開發板的OpenCV行人檢測方案指南

    、行人檢測概論使用HOG和SVM基于全志T527開發板構建行人檢測器的關鍵步驟包括: 準備訓練數據:訓練數據應包含大量正樣本(行人圖像
    發表于 04-11 18:14

    請問NanoEdge AI數據該如何構建?

    我想用NanoEdge來識別異常的聲音,但我目前沒有辦法生成模型,我感覺可能是數據的問題,請問我該怎么構建數據?或者生成模型失敗還會有哪些原因?
    發表于 03-10 08:20