機(jī)器學(xué)習(xí)就是從數(shù)據(jù)中提取信息。所以你可能想知道,我們可以從合成數(shù)據(jù)中學(xué)到什么?雖然我們本質(zhì)上可能并不關(guān)心我們自己融入人工數(shù)據(jù)生成模型的模式,但此類數(shù)據(jù)集仍然可用于教學(xué)目的,幫助我們?cè)u(píng)估學(xué)習(xí)算法的屬性并確認(rèn)我們的實(shí)現(xiàn)是否按預(yù)期工作。例如,如果我們創(chuàng)建的數(shù)據(jù)的正確參數(shù)是先驗(yàn)已知的,那么我們可以驗(yàn)證我們的模型實(shí)際上可以恢復(fù)它們。
%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. 生成數(shù)據(jù)集
對(duì)于這個(gè)例子,我們將使用低維來簡潔。以下代碼片段生成 1000 個(gè)示例,這些示例具有從標(biāo)準(zhǔn)正態(tài)分布中提取的二維特征。生成的設(shè)計(jì)矩陣X屬于R1000×2. 我們通過應(yīng)用地面真值線性函數(shù)生成每個(gè)標(biāo)簽,通過加性噪聲破壞它們?,為每個(gè)示例獨(dú)立且相同地繪制:
為了方便起見,我們假設(shè)?取自均值為正態(tài)分布μ=0和標(biāo)準(zhǔn)差 σ=0.01. 請(qǐng)注意,對(duì)于面向?qū)ο蟮脑O(shè)計(jì),我們將代碼添加到__init__
子類的方法中d2l.DataModule
(在3.2.3 節(jié)中介紹)。允許設(shè)置任何額外的超參數(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í)參數(shù)設(shè)置為w=[2,?3.4]? 和b=4.2. 稍后,我們可以根據(jù)這些真實(shí)值檢查我們估計(jì)的參數(shù)。
每行由features
一個(gè)向量組成R2 每一行labels
都是一個(gè)標(biāo)量。讓我們看一下第一個(gè)條目。
評(píng)論
查看更多