在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

PyTorch教程-3.3. 綜合回歸數(shù)據(jù)

jf_pJlTbmA9 ? 來源:PyTorch ? 作者:PyTorch ? 2023-06-05 15:38 ? 次閱讀

機器學習就是從數(shù)據(jù)中提取信息。所以你可能想知道,我們可以從合成數(shù)據(jù)中學到什么?雖然我們本質上可能并不關心我們自己融入人工數(shù)據(jù)生成模型的模式,但此類數(shù)據(jù)集仍然可用于教學目的,幫助我們評估學習算法的屬性并確認我們的實現(xiàn)是否按預期工作。例如,如果我們創(chuàng)建的數(shù)據(jù)的正確參數(shù)是先驗已知的,那么我們可以驗證我們的模型實際上可以恢復它們。

%matplotlib inline
import random
import torch
from d2l import torch as d2l

%matplotlib inline
import random
from mxnet import gluon, np, npx
from d2l import mxnet as d2l

npx.set_np()

%matplotlib inline
import random
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

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

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

3.3.1. 生成數(shù)據(jù)集

對于這個例子,我們將使用低維來簡潔。以下代碼片段生成 1000 個示例,這些示例具有從標準正態(tài)分布中提取的二維特征。生成的設計矩陣X屬于R1000×2. 我們通過應用地面真值線性函數(shù)生成每個標簽,通過加性噪聲破壞它們?,為每個示例獨立且相同地繪制:

(3.3.1)y=Xw+b+?.

為了方便起見,我們假設?取自均值為正態(tài)分布μ=0和標準差 σ=0.01. 請注意,對于面向對象的設計,我們將代碼添加到__init__子類的方法中d2l.DataModule (在3.2.3 節(jié)中介紹)。允許設置任何額外的超參數(shù)是一種很好的做法。我們用 save_hyperparameters(). batch_size稍后將確定。

class SyntheticRegressionData(d2l.DataModule): #@save
  """Synthetic data for linear regression."""
  def __init__(self, w, b, noise=0.01, num_train=1000, num_val=1000,
         batch_size=32):
    super().__init__()
    self.save_hyperparameters()
    n = num_train + num_val
    self.X = torch.randn(n, len(w))
    noise = torch.randn(n, 1) * noise
    self.y = torch.matmul(self.X, w.reshape((-1, 1))) + b + noise

class SyntheticRegressionData(d2l.DataModule): #@save
  """Synthetic data for linear regression."""
  def __init__(self, w, b, noise=0.01, num_train=1000, num_val=1000,
         batch_size=32):
    super().__init__()
    self.save_hyperparameters()
    n = num_train + num_val
    self.X = np.random.randn(n, len(w))
    noise = np.random.randn(n, 1) * noise
    self.y = np.dot(self.X, w.reshape((-1, 1))) + b + noise

class SyntheticRegressionData(d2l.DataModule): #@save
  """Synthetic data for linear regression."""
  def __init__(self, w, b, noise=0.01, num_train=1000, num_val=1000,
         batch_size=32):
    super().__init__()
    self.save_hyperparameters()
    n = num_train + num_val
    key = jax.random.PRNGKey(0)
    key1, key2 = jax.random.split(key)
    self.X = jax.random.normal(key1, (n, w.shape[0]))
    noise = jax.random.normal(key2, (n, 1)) * noise
    self.y = jnp.matmul(self.X, w.reshape((-1, 1))) + b + noise

class SyntheticRegressionData(d2l.DataModule): #@save
  """Synthetic data for linear regression."""
  def __init__(self, w, b, noise=0.01, num_train=1000, num_val=1000,
         batch_size=32):
    super().__init__()
    self.save_hyperparameters()
    n = num_train + num_val
    self.X = tf.random.normal((n, w.shape[0]))
    noise = tf.random.normal((n, 1)) * noise
    self.y = tf.matmul(self.X, tf.reshape(w, (-1, 1))) + b + noise

下面,我們將真實參數(shù)設置為w=[2,?3.4]? 和b=4.2. 稍后,我們可以根據(jù)這些真實值檢查我們估計的參數(shù)。

data = SyntheticRegressionData(w=torch.tensor([2, -3.4]), b=4.2)

data = SyntheticRegressionData(w=np.array([2, -3.4]), b=4.2)

data = SyntheticRegressionData(w=jnp.array([2, -3.4]), b=4.2)

data = SyntheticRegressionData(w=tf.constant([2, -3.4]), b=4.2)

每行由features一個向量組成R2 每一行l(wèi)abels都是一個標量。讓我們看一下第一個條目。

print('features:', data.X[0],'nlabel:', data.y[0])

features: tensor([-0.0499, -0.2817])
label: tensor([5.0533])

print('features:', data.X[0],'nlabel:', data.y[0])

features: [2.2122064 1.1630787]
label: [4.684836]

print('features:', data.X[0],'nlabel:', data.y[0])

features: [-0.86997527 -3.2320356 ]
label: [13.438176]

print('features:', data.X[0],'nlabel:', data.y[0])

features: tf.Tensor([-0.8617247 0.9828964], shape=(2,), dtype=float32)
label: tf.Tensor([-0.86415064], shape=(1,), dtype=float32)

3.3.2. 讀取數(shù)據(jù)集

訓練機器學習模型通常需要多次遍歷數(shù)據(jù)集,一次獲取一小批示例。然后使用此數(shù)據(jù)更新模型。為了說明這是如何工作的,我們實現(xiàn)了該 方法,通過(在第 3.2.1 節(jié)中介紹 )get_dataloader將其注冊到類中 。它采用批量大小、特征矩陣和標簽向量,并生成大小為 的小批量 。因此,每個小批量包含一個特征和標簽的元組。請注意,我們需要注意我們是處于訓練模式還是驗證模式:在前者中,我們希望以隨機順序讀取數(shù)據(jù),而對于后者,能夠以預定義的順序讀取數(shù)據(jù)可能對于調試目的很重要。SyntheticRegressionDataadd_to_classbatch_size

@d2l.add_to_class(SyntheticRegressionData)
def get_dataloader(self, train):
  if train:
    indices = list(range(0, self.num_train))
    # The examples are read in random order
    random.shuffle(indices)
  else:
    indices = list(range(self.num_train, self.num_train+self.num_val))
  for i in range(0, len(indices), self.batch_size):
    batch_indices = torch.tensor(indices[i: i+self.batch_size])
    yield self.X[batch_indices], self.y[batch_indices]

@d2l.add_to_class(SyntheticRegressionData)
def get_dataloader(self, train):
  if train:
    indices = list(range(0, self.num_train))
    # The examples are read in random order
    random.shuffle(indices)
  else:
    indices = list(range(self.num_train, self.num_train+self.num_val))
  for i in range(0, len(indices), self.batch_size):
    batch_indices = np.array(indices[i: i+self.batch_size])
    yield self.X[batch_indices], self.y[batch_indices]

@d2l.add_to_class(SyntheticRegressionData)
def get_dataloader(self, train):
  if train:
    indices = list(range(0, self.num_train))
    # The examples are read in random order
    random.shuffle(indices)
  else:
    indices = list(range(self.num_train, self.num_train+self.num_val))
  for i in range(0, len(indices), self.batch_size):
    batch_indices = jnp.array(indices[i: i+self.batch_size])
    yield self.X[batch_indices], self.y[batch_indices]

@d2l.add_to_class(SyntheticRegressionData)
def get_dataloader(self, train):
  if train:
    indices = list(range(0, self.num_train))
    # The examples are read in random order
    random.shuffle(indices)
  else:
    indices = list(range(self.num_train, self.num_train+self.num_val))
  for i in range(0, len(indices), self.batch_size):
    j = tf.constant(indices[i : i+self.batch_size])
    yield tf.gather(self.X, j), tf.gather(self.y, j)

為了建立一些直覺,讓我們檢查第一個小批量數(shù)據(jù)。每個小批量特征都為我們提供了它的大小和輸入特征的維度。同樣,我們的小批量標簽將具有由 給出的匹配形狀batch_size。

X, y = next(iter(data.train_dataloader()))
print('X shape:', X.shape, 'ny shape:', y.shape)

X shape: torch.Size([32, 2])
y shape: torch.Size([32, 1])

X, y = next(iter(data.train_dataloader()))
print('X shape:', X.shape, 'ny shape:', y.shape)

X shape: (32, 2)
y shape: (32, 1)

X, y = next(iter(data.train_dataloader()))
print('X shape:', X.shape, 'ny shape:', y.shape)

X shape: (32, 2)
y shape: (32, 1)

X, y = next(iter(data.train_dataloader()))
print('X shape:', X.shape, 'ny shape:', y.shape)

X shape: (32, 2)
y shape: (32, 1)

雖然看似無害,但調用 iter(data.train_dataloader())說明了 Python 面向對象設計的強大功能。請注意,我們 在創(chuàng)建對象后SyntheticRegressionData向類添加了一個方法。盡管如此,該對象受益于事后向類添加功能。data

在整個迭代過程中,我們獲得不同的小批量,直到整個數(shù)據(jù)集都用完(試試這個)。雖然上面實現(xiàn)的迭代有利于教學目的,但它的效率低下,可能會讓我們在實際問題上遇到麻煩。例如,它要求我們將所有數(shù)據(jù)加載到內存中,并執(zhí)行大量隨機內存訪問。在深度學習框架中實現(xiàn)的內置迭代器效率要高得多,它們可以處理諸如存儲在文件中的數(shù)據(jù)、通過流接收的數(shù)據(jù)以及動態(tài)生成或處理的數(shù)據(jù)等來源。接下來讓我們嘗試使用內置迭代器實現(xiàn)相同的方法。

3.3.3. 數(shù)據(jù)加載器的簡潔實現(xiàn)

我們可以調用框架中現(xiàn)有的 API 來加載數(shù)據(jù),而不是編寫我們自己的迭代器。和以前一樣,我們需要一個具有特征X 和標簽的數(shù)據(jù)集y。除此之外,我們設置了batch_size內置的數(shù)據(jù)加載器,讓它有效地處理混洗示例。

@d2l.add_to_class(d2l.DataModule) #@save
def get_tensorloader(self, tensors, train, indices=slice(0, None)):
  tensors = tuple(a[indices] for a in tensors)
  dataset = torch.utils.data.TensorDataset(*tensors)
  return torch.utils.data.DataLoader(dataset, self.batch_size,
                    shuffle=train)

@d2l.add_to_class(SyntheticRegressionData) #@save
def get_dataloader(self, train):
  i = slice(0, self.num_train) if train else slice(self.num_train, None)
  return self.get_tensorloader((self.X, self.y), train, i)

@d2l.add_to_class(d2l.DataModule) #@save
def get_tensorloader(self, tensors, train, indices=slice(0, None)):
  tensors = tuple(a[indices] for a in tensors)
  dataset = gluon.data.ArrayDataset(*tensors)
  return gluon.data.DataLoader(dataset, self.batch_size,
                 shuffle=train)

@d2l.add_to_class(SyntheticRegressionData) #@save
def get_dataloader(self, train):
  i = slice(0, self.num_train) if train else slice(self.num_train, None)
  return self.get_tensorloader((self.X, self.y), train, i)

JAX is all about NumPy like API with device acceleration and the functional transformations, so at least the current version doesn’t include data loading methods. With other libraries we already have great data loaders out there, and JAX suggests using them instead. Here we will grab TensorFlow’s data loader, and modify it slightly to make it work with JAX.

@d2l.add_to_class(d2l.DataModule) #@save
def get_tensorloader(self, tensors, train, indices=slice(0, None)):
  tensors = tuple(a[indices] for a in tensors)
  # Use Tensorflow Datasets & Dataloader. JAX or Flax do not provide
  # any dataloading functionality
  shuffle_buffer = tensors[0].shape[0] if train else 1
  return tfds.as_numpy(
    tf.data.Dataset.from_tensor_slices(tensors).shuffle(
      buffer_size=shuffle_buffer).batch(self.batch_size))

@d2l.add_to_class(SyntheticRegressionData) #@save
def get_dataloader(self, train):
  i = slice(0, self.num_train) if train else slice(self.num_train, None)
  return self.get_tensorloader((self.X, self.y), train, i)

@d2l.add_to_class(d2l.DataModule) #@save
def get_tensorloader(self, tensors, train, indices=slice(0, None)):
  tensors = tuple(a[indices] for a in tensors)
  shuffle_buffer = tensors[0].shape[0] if train else 1
  return tf.data.Dataset.from_tensor_slices(tensors).shuffle(
    buffer_size=shuffle_buffer).batch(self.batch_size)

@d2l.add_to_class(SyntheticRegressionData) #@save
def get_dataloader(self, train):
  i = slice(0, self.num_train) if train else slice(self.num_train, None)
  return self.get_tensorloader((self.X, self.y), train, i)

新數(shù)據(jù)加載器的行為與之前的數(shù)據(jù)加載器一樣,只是它更高效并且增加了一些功能。

X, y = next(iter(data.train_dataloader()))
print('X shape:', X.shape, 'ny shape:', y.shape)

X shape: torch.Size([32, 2])
y shape: torch.Size([32, 1])

X, y = next(iter(data.train_dataloader()))
print('X shape:', X.shape, 'ny shape:', y.shape)

X shape: (32, 2)
y shape: (32, 1)

X, y = next(iter(data.train_dataloader()))
print('X shape:', X.shape, 'ny shape:', y.shape)

X shape: (32, 2)
y shape: (32, 1)

X, y = next(iter(data.train_dataloader()))
print('X shape:', X.shape, 'ny shape:', y.shape)

X shape: (32, 2)
y shape: (32, 1)

例如,框架API提供的數(shù)據(jù)加載器支持內置__len__方法,所以我們可以查詢它的長度,即批次數(shù)。

len(data.train_dataloader())

32

len(data.train_dataloader())

32

len(data.train_dataloader())

32

len(data.train_dataloader())

32

3.3.4. 概括

數(shù)據(jù)加載器是一種抽象加載和操作數(shù)據(jù)過程的便捷方式。這樣,相同的機器學習 算法無需修改即可處理許多不同類型和來源的數(shù)據(jù)。數(shù)據(jù)加載器的優(yōu)點之一是它們可以組合。例如,我們可能正在加載圖像,然后有一個后期處理過濾器來裁剪或修改它們。因此,數(shù)據(jù)加載器可用于描述整個數(shù)據(jù)處理管道。

至于模型本身,二維線性模型是我們可能遇到的最簡單的模型。它使我們能夠測試回歸模型的準確性,而不必擔心數(shù)據(jù)量不足或方程組未定。我們將在下一節(jié)中充分利用它。

3.3.5. 練習

如果樣本數(shù)量不能除以批量大小,將會發(fā)生什么。如何通過使用框架的 API 指定不同的參數(shù)來更改此行為?

如果我們想要生成一個巨大的數(shù)據(jù)集,其中參數(shù)向量的大小w和示例的數(shù)量 num_examples都很大怎么辦?

如果我們不能將所有數(shù)據(jù)保存在內存中會怎樣?

如果數(shù)據(jù)保存在磁盤上,您將如何打亂數(shù)據(jù)?您的任務是設計一種不需要太多隨機讀取或寫入的高效算法。提示:偽隨機排列生成器 允許您設計重新洗牌而不需要顯式存儲排列表(Naor 和 Reingold,1999)。

實現(xiàn)一個數(shù)據(jù)生成器,在每次調用迭代器時動態(tài)生成新數(shù)據(jù)。

您將如何設計一個隨機數(shù)據(jù)生成器,使其在每次調用時生成相同的數(shù)據(jù)?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    Pytorch模型訓練實用PDF教程【中文】

    PyTorch 提供的數(shù)據(jù)增強方法(22 個)、權值初始化方法(10 個)、損失函數(shù)(17 個)、優(yōu)化器(6 個)及 tensorboardX 的方法(13 個)進行了詳細介紹。本教程分為四章
    發(fā)表于 12-21 09:18

    回歸算法有哪些,常用回歸算法(3種)詳解

    回歸是數(shù)學建模、分類和預測中最古老但功能非常強大的工具之一。回歸在工程、物理學、生物學、金融、社會科學等各個領域都有應用,是數(shù)據(jù)科學家常用的基本工具。回歸通常是機器學習中使用的第一個算
    發(fā)表于 07-28 14:36

    為什么學習深度學習需要使用PyTorch和TensorFlow框架

    如果你需要深度學習模型,那么 PyTorch 和 TensorFlow 都是不錯的選擇。 并非每個回歸或分類問題都需要通過深度學習來解決。甚至可以說,并非每個回歸或分類問題都需要通過機器學習來解決。畢竟,許多
    的頭像 發(fā)表于 09-14 10:57 ?3465次閱讀

    基于PyTorch的深度學習入門教程之PyTorch重點綜合實踐

    前言 PyTorch提供了兩個主要特性: (1) 一個n維的Tensor,與numpy相似但是支持GPU運算。 (2) 搭建和訓練神經網絡的自動微分功能。 我們將會使用一個全連接的ReLU網絡作為
    的頭像 發(fā)表于 02-15 10:01 ?1806次閱讀

    PyTorch教程之數(shù)據(jù)預處理

    電子發(fā)燒友網站提供《PyTorch教程之數(shù)據(jù)預處理.pdf》資料免費下載
    發(fā)表于 06-02 14:11 ?0次下載
    <b class='flag-5'>PyTorch</b>教程之<b class='flag-5'>數(shù)據(jù)</b>預處理

    PyTorch教程3.1之線性回歸

    電子發(fā)燒友網站提供《PyTorch教程3.1之線性回歸.pdf》資料免費下載
    發(fā)表于 06-05 11:30 ?0次下載
    <b class='flag-5'>PyTorch</b>教程3.1之線性<b class='flag-5'>回歸</b>

    PyTorch教程3.3綜合回歸數(shù)據(jù)

    電子發(fā)燒友網站提供《PyTorch教程3.3綜合回歸數(shù)據(jù).pdf》資料免費下載
    發(fā)表于 06-05 15:48 ?0次下載
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>3.3</b>之<b class='flag-5'>綜合</b><b class='flag-5'>回歸</b><b class='flag-5'>數(shù)據(jù)</b>

    PyTorch教程3.4之從頭開始執(zhí)行線性回歸

    電子發(fā)燒友網站提供《PyTorch教程3.4之從頭開始執(zhí)行線性回歸.pdf》資料免費下載
    發(fā)表于 06-05 11:25 ?0次下載
    <b class='flag-5'>PyTorch</b>教程3.4之從頭開始執(zhí)行線性<b class='flag-5'>回歸</b>

    PyTorch教程3.5之線性回歸的簡潔實現(xiàn)

    電子發(fā)燒友網站提供《PyTorch教程3.5之線性回歸的簡潔實現(xiàn).pdf》資料免費下載
    發(fā)表于 06-05 11:28 ?0次下載
    <b class='flag-5'>PyTorch</b>教程3.5之線性<b class='flag-5'>回歸</b>的簡潔實現(xiàn)

    PyTorch教程4.1之Softmax回歸

    電子發(fā)燒友網站提供《PyTorch教程4.1之Softmax回歸.pdf》資料免費下載
    發(fā)表于 06-05 15:46 ?0次下載
    <b class='flag-5'>PyTorch</b>教程4.1之Softmax<b class='flag-5'>回歸</b>

    PyTorch教程4.4之從頭開始實現(xiàn)Softmax回歸

    電子發(fā)燒友網站提供《PyTorch教程4.4之從頭開始實現(xiàn)Softmax回歸.pdf》資料免費下載
    發(fā)表于 06-05 15:37 ?0次下載
    <b class='flag-5'>PyTorch</b>教程4.4之從頭開始實現(xiàn)Softmax<b class='flag-5'>回歸</b>

    PyTorch教程-3.1. 線性回歸

    3.1. 線性回歸? Colab [火炬]在 Colab 中打開筆記本 Colab [mxnet] Open the notebook in Colab Colab [jax
    的頭像 發(fā)表于 06-05 15:38 ?522次閱讀
    <b class='flag-5'>PyTorch</b>教程-3.1. 線性<b class='flag-5'>回歸</b>

    PyTorch教程-4.1. Softmax 回歸

    4.1. Softmax 回歸? Colab [火炬]在 Colab 中打開筆記本 Colab [mxnet] Open the notebook in Colab Colab [jax
    的頭像 發(fā)表于 06-05 15:38 ?634次閱讀
    <b class='flag-5'>PyTorch</b>教程-4.1. Softmax <b class='flag-5'>回歸</b>

    pytorch如何訓練自己的數(shù)據(jù)

    本文將詳細介紹如何使用PyTorch框架來訓練自己的數(shù)據(jù)。我們將從數(shù)據(jù)準備、模型構建、訓練過程、評估和測試等方面進行講解。 環(huán)境搭建 首先,我們需要安裝PyTorch??梢酝ㄟ^訪問
    的頭像 發(fā)表于 07-11 10:04 ?556次閱讀

    PyTorch 數(shù)據(jù)加載與處理方法

    PyTorch 是一個流行的開源機器學習庫,它提供了強大的工具來構建和訓練深度學習模型。在構建模型之前,一個重要的步驟是加載和處理數(shù)據(jù)。 1. PyTorch 數(shù)據(jù)加載基礎 在
    的頭像 發(fā)表于 11-05 17:37 ?434次閱讀
    主站蜘蛛池模板: 最新日韩中文字幕| 99久久久精品| 色天天干| 日本特黄在线观看免费| 国产一级做a爱免费观看| aaaaaa精品视频在线观看| аⅴ天堂中文在线网| aa黄色大片| 天天干妹子| 夜夜摸视频网| 国产视频每日更新| www.夜色| 国产毛片久久久久久国产毛片| 四虎影院在线播放| 一卡二卡卡四卡无人区中文 | 色噜噜狠狠狠狠色综合久一| 黄免费看| 欧美男女交性过程视频| eee在线播放成人免费| 国产伦精品一区二区三区女| 人人做人人爽国产视| 天天干狠狠干| 5252欧美在线观看| 国产成人午夜片在线观看| 久久国产乱子伦精品免费午夜| 欧美精品久久天天躁| 奇米色88欧美一区二区| 2022年国产精品久久久久| 日本精品卡一卡2卡3卡四卡三卡 | 国产免费高清视频在线观看不卡 | 日日操操干干| 国产黄色片网站| 91大神成人偷拍在线观看| 久操视频免费| 69xxxxxxxxxhd日本| 亚洲三级黄色| 天天躁夜夜躁| 色婷婷综合在线视频最新| 色丁香在线视频| 欧美午夜在线播放| 模特视频一二三区|