×

PyTorch教程3.3之综合回归数据

消耗积分:0 | 格式:pdf | 大小:0.15 MB | 2023-06-05

梅利号

分享资料个

机器学习就是从数据中提取信息。所以你可能想知道,我们可以从合成数据中学到什么?虽然我们本质上可能并不关心我们自己融入人工数据生成模型的模式,但此类数据集仍然可用于教学目的,帮助我们评估学习算法的属性并确认我们的实现是否按预期工作。例如,如果我们创建的数据的正确参数是先验已知的那么我们可以验证我们的模型实际上可以恢复它们。

%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. 生成数据集

对于这个例子,我们将使用低维来简洁。以下代码片段生成 1000 个示例,这些示例具有从标准正态分布中提取的二维特征。生成的设计矩阵X属于R1000×2. 我们通过应用地面真值线性函数生成每个标签,通过加性噪声破坏它们ϵ,为每个示例独立且相同地绘制:

(3.3.1)y=Xw+b+ϵ.

为了方便起见,我们假设ϵ取自均值为正态分布μ=0和标准差 σ=0.01. 请注意,对于面向对象的设计,我们将代码添加到__init__子类的方法中d2l.DataModule (在3.2.3 节中介绍)。允许设置任何额外的超参数是一种很好的做法。我们用 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

下面,我们将真实参数设置为w=[2,−3.4]⊤b=4.2. 稍后,我们可以根据这些真实值检查我们估计的参数。

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 每一行labels都是一个标量。让我们看一下第一个条目。

print('features:', data.X[0],'\nlabel:', data.y[0])
features: tensor([-0.0499, -

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !