機器學習就是從數據中提取信息。所以你可能想知道,我們可以從合成數據中學到什么?雖然我們本質上可能并不關心我們自己融入人工數據生成模型的模式,但此類數據集仍然可用于教學目的,幫助我們評估學習算法的屬性并確認我們的實現是否按預期工作。例如,如果我們創建的數據的正確參數是先驗已知的,那么我們可以驗證我們的模型實際上可以恢復它們。
%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
3.3.1. 生成數據集
對于這個例子,我們將使用低維來簡潔。以下代碼片段生成 1000 個示例,這些示例具有從標準正態分布中提取的二維特征。生成的設計矩陣X屬于R1000×2. 我們通過應用地面真值線性函數生成每個標簽,通過加性噪聲破壞它們?,為每個示例獨立且相同地繪制:
為了方便起見,我們假設?取自均值為正態分布μ=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. 稍后,我們可以根據這些真實值檢查我們估計的參數。
每行由features
一個向量組成R2 每一行labels
都是一個標量。讓我們看一下第一個條目。
評論
查看更多