日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PyTorch教程-3.4. 從頭開(kāi)始執(zhí)行線性回歸

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

掃碼添加小助手

加入工程師交流群

我們現(xiàn)在準(zhǔn)備好通過(guò)線性回歸的全功能實(shí)現(xiàn)來(lái)工作。在本節(jié)中,我們將從頭開(kāi)始實(shí)現(xiàn)整個(gè)方法,包括(i)模型;(ii) 損失函數(shù);(iii) 小批量隨機(jī)梯度下降優(yōu)化器;(iv) 將所有這些部分拼接在一起的訓(xùn)練功能。最后,我們將運(yùn)行3.3 節(jié)中的合成數(shù)據(jù)生成器 并將我們的模型應(yīng)用于生成的數(shù)據(jù)集。雖然現(xiàn)代深度學(xué)習(xí)框架幾乎可以自動(dòng)執(zhí)行所有這些工作,但從頭開(kāi)始實(shí)施是確保您真正了解自己在做什么的唯一方法。此外,當(dāng)需要自定義模型、定義我們自己的層或損失函數(shù)時(shí),了解引擎蓋下的工作原理將很方便。在本節(jié)中,我們將僅依賴張量和自動(dòng)微分。稍后,我們將介紹一個(gè)更簡(jiǎn)潔的實(shí)現(xiàn),利用深度學(xué)習(xí)框架的花哨功能,同時(shí)保留以下結(jié)構(gòu)。

%matplotlib inline
import torch
from d2l import torch as d2l

%matplotlib inline
from mxnet import autograd, np, npx
from d2l import mxnet as d2l

npx.set_np()

%matplotlib inline
import jax
import optax
from flax import linen as nn
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 tensorflow as tf
from d2l import tensorflow as d2l

3.4.1. 定義模型

在我們開(kāi)始通過(guò)小批量 SGD 優(yōu)化模型參數(shù)之前,我們首先需要有一些參數(shù)。在下文中,我們通過(guò)從均值為 0 且標(biāo)準(zhǔn)差為 0.01 的正態(tài)分布中抽取隨機(jī)數(shù)來(lái)初始化權(quán)重?;脭?shù) 0.01 在實(shí)踐中通常效果很好,但您可以通過(guò)參數(shù)指定不同的值sigma。此外,我們將偏差設(shè)置為 0。注意,對(duì)于面向?qū)ο蟮脑O(shè)計(jì),我們將代碼添加到__init__子類的方法中(在3.2.2 節(jié)d2l.Module中介紹 )。

class LinearRegressionScratch(d2l.Module): #@save
  """The linear regression model implemented from scratch."""
  def __init__(self, num_inputs, lr, sigma=0.01):
    super().__init__()
    self.save_hyperparameters()
    self.w = torch.normal(0, sigma, (num_inputs, 1), requires_grad=True)
    self.b = torch.zeros(1, requires_grad=True)

class LinearRegressionScratch(d2l.Module): #@save
  """The linear regression model implemented from scratch."""
  def __init__(self, num_inputs, lr, sigma=0.01):
    super().__init__()
    self.save_hyperparameters()
    self.w = np.random.normal(0, sigma, (num_inputs, 1))
    self.b = np.zeros(1)
    self.w.attach_grad()
    self.b.attach_grad()

class LinearRegressionScratch(d2l.Module): #@save
  """The linear regression model implemented from scratch."""
  num_inputs: int
  lr: float
  sigma: float = 0.01

  def setup(self):
    self.w = self.param('w', nn.initializers.normal(self.sigma),
              (self.num_inputs, 1))
    self.b = self.param('b', nn.initializers.zeros, (1))

class LinearRegressionScratch(d2l.Module): #@save
  """The linear regression model implemented from scratch."""
  def __init__(self, num_inputs, lr, sigma=0.01):
    super().__init__()
    self.save_hyperparameters()
    w = tf.random.normal((num_inputs, 1), mean=0, stddev=0.01)
    b = tf.zeros(1)
    self.w = tf.Variable(w, trainable=True)
    self.b = tf.Variable(b, trainable=True)

接下來(lái),我們必須定義我們的模型,將其輸入和參數(shù)與其輸出相關(guān)聯(lián)。在(3.1.4)中使用相同的符號(hào),對(duì)于我們的線性模型,我們簡(jiǎn)單地采用輸入特征的矩陣向量乘積X和模型權(quán)重w,并加上偏移量b每個(gè)例子。Xw是一個(gè)向量并且b是一個(gè)標(biāo)量。由于廣播機(jī)制(參見(jiàn) 第 2.1.4 節(jié)),當(dāng)我們添加一個(gè)向量和一個(gè)標(biāo)量時(shí),標(biāo)量將添加到向量的每個(gè)分量。生成的 方法 通過(guò)(在第 3.2.1 節(jié)中介紹 )forward在類中注冊(cè)。LinearRegressionScratchadd_to_class

@d2l.add_to_class(LinearRegressionScratch) #@save
def forward(self, X):
  return torch.matmul(X, self.w) + self.b

@d2l.add_to_class(LinearRegressionScratch) #@save
def forward(self, X):
  return np.dot(X, self.w) + self.b

@d2l.add_to_class(LinearRegressionScratch) #@save
def forward(self, X):
  return jnp.matmul(X, self.w) + self.b

@d2l.add_to_class(LinearRegressionScratch) #@save
def forward(self, X):
  return tf.matmul(X, self.w) + self.b

3.4.2. 定義損失函數(shù)

由于更新我們的模型需要采用損失函數(shù)的梯度,因此我們應(yīng)該首先定義損失函數(shù)。這里我們使用(3.1.5)中的平方損失函數(shù)。在實(shí)現(xiàn)中,我們需要將真實(shí)值轉(zhuǎn)換y為預(yù)測(cè)值的形狀 y_hat。以下方法返回的結(jié)果也將具有與y_hat. 我們還返回小批量中所有示例的平均損失值。

@d2l.add_to_class(LinearRegressionScratch) #@save
def loss(self, y_hat, y):
  l = (y_hat - y) ** 2 / 2
  return l.mean()

@d2l.add_to_class(LinearRegressionScratch) #@save
def loss(self, y_hat, y):
  l = (y_hat - y) ** 2 / 2
  return l.mean()

@d2l.add_to_class(LinearRegressionScratch) #@save
def loss(self, params, X, y, state):
  y_hat = state.apply_fn({'params': params}, *X) # X unpacked from a tuple
  l = (y_hat - y.reshape(y_hat.shape)) ** 2 / 2
  return l.mean()

@d2l.add_to_class(LinearRegressionScratch) #@save
def loss(self, y_hat, y):
  l = (y_hat - y) ** 2 / 2
  return tf.reduce_mean(l)

3.4.3. 定義優(yōu)化算法

正如第 3.1 節(jié)中所討論的,線性回歸有一個(gè)封閉形式的解決方案。然而,我們這里的目標(biāo)是說(shuō)明如何訓(xùn)練更通用的神經(jīng)網(wǎng)絡(luò),這需要我們教您如何使用小批量 SGD。因此,我們將借此機(jī)會(huì)介紹您的第一個(gè) SGD 工作示例。在每一步,使用從我們的數(shù)據(jù)集中隨機(jī)抽取的小批量,我們估計(jì)損失相對(duì)于參數(shù)的梯度。接下來(lái),我們朝著可能減少損失的方向更新參數(shù)。

以下代碼應(yīng)用更新,給定一組參數(shù),一個(gè)學(xué)習(xí)率lr。由于我們的損失是按小批量的平均值計(jì)算的,因此我們不需要根據(jù)批量大小調(diào)整學(xué)習(xí)率。在后面的章節(jié)中,我們將研究如何為分布式大規(guī)模學(xué)習(xí)中出現(xiàn)的非常大的小批量調(diào)整學(xué)習(xí)率。現(xiàn)在,我們可以忽略這種依賴性。

我們定義我們的SGD類,它是d2l.HyperParameters (在第 3.2.1 節(jié)中介紹的)的一個(gè)子類,以具有與內(nèi)置 SGD 優(yōu)化器類似的 API。我們更新方法中的參數(shù)step 。該zero_grad方法將所有梯度設(shè)置為 0,這必須在反向傳播步驟之前運(yùn)行。

class SGD(d2l.HyperParameters): #@save
  """Minibatch stochastic gradient descent."""
  def __init__(self, params, lr):
    self.save_hyperparameters()

  def step(self):
    for param in self.params:
      param -= self.lr * param.grad

  def zero_grad(self):
    for param in self.params:
      if param.grad is not None:
        param.grad.zero_()

We define our SGD class, a subclass of d2l.HyperParameters (introduced in Section 3.2.1), to have a similar API as the built-in SGD optimizer. We update the parameters in the step method. It accepts a batch_size argument that can be ignored.

class SGD(d2l.HyperParameters): #@save
  """Minibatch stochastic gradient descent."""
  def __init__(self, params, lr):
    self.save_hyperparameters()

  def step(self, _):
    for param in self.params:
      param -= self.lr * param.grad

class SGD(d2l.HyperParameters): #@save
  """Minibatch stochastic gradient descent."""
  # The key transformation of Optax is the GradientTransformation
  # defined by two methods, the init and the update.
  # The init initializes the state and the update transforms the gradients.
  # https://github.com/deepmind/optax/blob/master/optax/_src/transform.py
  def __init__(self, lr):
    self.save_hyperparameters()

  def init(self, params):
    # Delete unused params
    del params
    return optax.EmptyState

  def update(self, updates, state, params=None):
    del params
    # When state.apply_gradients method is called to update flax's
    # train_state object, it internally calls optax.apply_updates method
    # adding the params to the update equation defined below.
    updates = jax.tree_util.tree_map(lambda g: -self.lr * g, updates)
    return updates, state

  def __call__():
    return optax.GradientTransformation(self.init, self.update)

We define our SGD class, a subclass of d2l.HyperParameters (introduced in Section 3.2.1), to have a similar API as the built-in SGD optimizer. We update the parameters in the apply_gradients method. It accepts a list of parameter and gradient pairs.

class SGD(d2l.HyperParameters): #@save
  """Minibatch stochastic gradient descent."""
  def __init__(self, lr):
    self.save_hyperparameters()

  def apply_gradients(self, grads_and_vars):
    for grad, param in grads_and_vars:
      param.assign_sub(self.lr * grad)

接下來(lái)我們定義configure_optimizers方法,它返回類的一個(gè)實(shí)例SGD。

@d2l.add_to_class(LinearRegressionScratch) #@save
def configure_optimizers(self):
  return SGD([self.w, self.b], self.lr)

@d2l.add_to_class(LinearRegressionScratch) #@save
def configure_optimizers(self):
  return SGD([self.w, self.b], self.lr)

@d2l.add_to_class(LinearRegressionScratch) #@save
def configure_optimizers(self):
  return SGD(self.lr)

@d2l.add_to_class(LinearRegressionScratch) #@save
def configure_optimizers(self):
  return SGD(self.lr)

3.4.4. 訓(xùn)練

現(xiàn)在我們已經(jīng)準(zhǔn)備好所有的部分(參數(shù)、損失函數(shù)、模型和優(yōu)化器),我們準(zhǔn)備好實(shí)施主要的訓(xùn)練循環(huán)。理解這段代碼至關(guān)重要,因?yàn)槟鷮?duì)本書涵蓋的所有其他深度學(xué)習(xí)模型使用類似的訓(xùn)練循環(huán)。在每個(gè)epoch中,我們遍歷整個(gè)訓(xùn)練數(shù)據(jù)集,通過(guò)每個(gè)示例一次(假設(shè)示例的數(shù)量可以被批量大小整除)。在每次迭代中,我們獲取一小批訓(xùn)練示例,并通過(guò)模型的 training_step方法計(jì)算其損失。接下來(lái),我們計(jì)算每個(gè)參數(shù)的梯度。最后,我們將調(diào)用優(yōu)化算法來(lái)更新模型參數(shù)??傊覀儗?zhí)行以下循環(huán):

初始化參數(shù)(w,b)

重復(fù)直到完成

計(jì)算梯度 g←?(w,b)1|B|∑i∈Bl(x(i),y(i),w,b)

更新參數(shù) (w,b)←(w,b)?ηg

回想一下,我們?cè)?.3 節(jié)中生成的綜合回歸數(shù)據(jù)集 不提供驗(yàn)證數(shù)據(jù)集。然而,在大多數(shù)情況下,我們將使用驗(yàn)證數(shù)據(jù)集來(lái)衡量我們的模型質(zhì)量。在這里,我們?cè)诿總€(gè)時(shí)期通過(guò)一次驗(yàn)證數(shù)據(jù)加載器來(lái)衡量模型性能。按照我們的面向?qū)ο笤O(shè)計(jì),prepare_batch和fit_epoch方法注冊(cè)在d2l.Trainer類中(在 3.2.4 節(jié)中介紹)。

@d2l.add_to_class(d2l.Trainer) #@save
def prepare_batch(self, batch):
  return batch

@d2l.add_to_class(d2l.Trainer) #@save
def fit_epoch(self):
  self.model.train()
  for batch in self.train_dataloader:
    loss = self.model.training_step(self.prepare_batch(batch))
    self.optim.zero_grad()
    with torch.no_grad():
      loss.backward()
      if self.gradient_clip_val > 0: # To be discussed later
        self.clip_gradients(self.gradient_clip_val, self.model)
      self.optim.step()
    self.train_batch_idx += 1
  if self.val_dataloader is None:
    return
  self.model.eval()
  for batch in self.val_dataloader:
    with torch.no_grad():
      self.model.validation_step(self.prepare_batch(batch))
    self.val_batch_idx += 1

@d2l.add_to_class(d2l.Trainer) #@save
def prepare_batch(self, batch):
  return batch

@d2l.add_to_class(d2l.Trainer) #@save
def fit_epoch(self):
  for batch in self.train_dataloader:
    with autograd.record():
      loss = self.model.training_step(self.prepare_batch(batch))
    loss.backward()
    if self.gradient_clip_val > 0:
      self.clip_gradients(self.gradient_clip_val, self.model)
    self.optim.step(1)
    self.train_batch_idx += 1
  if self.val_dataloader is None:
    return
  for batch in self.val_dataloader:
    self.model.validation_step(self.prepare_batch(batch))
    self.val_batch_idx += 1

@d2l.add_to_class(d2l.Trainer) #@save
def prepare_batch(self, batch):
  return batch

@d2l.add_to_class(d2l.Trainer) #@save
def fit_epoch(self):
  self.model.training = True
  if self.state.batch_stats:
    # Mutable states will be used later (e.g., for batch norm)
    for batch in self.train_dataloader:
      (_, mutated_vars), grads = self.model.training_step(self.state.params,
                              self.prepare_batch(batch),
                              self.state)
      self.state = self.state.apply_gradients(grads=grads)
      # Can be ignored for models without Dropout Layers
      self.state = self.state.replace(
        dropout_rng=jax.random.split(self.state.dropout_rng)[0])
      self.state = self.state.replace(batch_stats=mutated_vars['batch_stats'])
      self.train_batch_idx += 1
  else:
    for batch in self.train_dataloader:
      _, grads = self.model.training_step(self.state.params,
                        self.prepare_batch(batch),
                        self.state)
      self.state = self.state.apply_gradients(grads=grads)
      # Can be ignored for models without Dropout Layers
      self.state = self.state.replace(
        dropout_rng=jax.random.split(self.state.dropout_rng)[0])
      self.train_batch_idx += 1

  if self.val_dataloader is None:
    return
  self.model.training = False
  for batch in self.val_dataloader:
    self.model.validation_step(self.state.params,
                  self.prepare_batch(batch),
                  self.state)
    self.val_batch_idx += 1

@d2l.add_to_class(d2l.Trainer) #@save
def prepare_batch(self, batch):
  return batch

@d2l.add_to_class(d2l.Trainer) #@save
def fit_epoch(self):
  self.model.training = True
  for batch in self.train_dataloader:
    with tf.GradientTape() as tape:
      loss = self.model.training_step(self.prepare_batch(batch))
    grads = tape.gradient(loss, self.model.trainable_variables)
    if self.gradient_clip_val > 0:
      grads = self.clip_gradients(self.gradient_clip_val, grads)
    self.optim.apply_gradients(zip(grads, self.model.trainable_variables))
    self.train_batch_idx += 1
  if self.val_dataloader is None:
    return
  self.model.training = False
  for batch in self.val_dataloader:
    self.model.validation_step(self.prepare_batch(batch))
    self.val_batch_idx += 1

我們幾乎準(zhǔn)備好訓(xùn)練模型,但首先我們需要一些數(shù)據(jù)來(lái)訓(xùn)練。這里我們使用SyntheticRegressionData類并傳入一些基本參數(shù)。然后,我們用學(xué)習(xí)率訓(xùn)練我們的模型lr=0.03并設(shè)置max_epochs=3。請(qǐng)注意,一般來(lái)說(shuō),epoch 的數(shù)量和學(xué)習(xí)率都是超參數(shù)。一般來(lái)說(shuō),設(shè)置超參數(shù)很棘手,我們通常希望使用 3 路分割,一組用于訓(xùn)練,第二組用于超參數(shù)選擇,第三組保留用于最終評(píng)估。我們暫時(shí)省略這些細(xì)節(jié),但稍后會(huì)對(duì)其進(jìn)行修改。

model = LinearRegressionScratch(2, lr=0.03)
data = d2l.SyntheticRegressionData(w=torch.tensor([2, -3.4]), b=4.2)
trainer = d2l.Trainer(max_epochs=3)
trainer.fit(model, data)

poYBAGR5VHCAUsTJAADw2MzPvpA901.svg

model = LinearRegressionScratch(2, lr=0.03)
data = d2l.SyntheticRegressionData(w=np.array([2, -3.4]), b=4.2)
trainer = d2l.Trainer(max_epochs=3)
trainer.fit(model, data)

pYYBAGR5VHKARTk0AADw0FVcGlM047.svg

model = LinearRegressionScratch(2, lr=0.03)
data = d2l.SyntheticRegressionData(w=jnp.array([2, -3.4]), b=4.2)
trainer = d2l.Trainer(max_epochs=3)
trainer.fit(model, data)

poYBAGR5VHSAcQY3AADwXIN0FX8181.svg

model = LinearRegressionScratch(2, lr=0.03)
data = d2l.SyntheticRegressionData(w=tf.constant([2, -3.4]), b=4.2)
trainer = d2l.Trainer(max_epochs=3)
trainer.fit(model, data)

pYYBAGR5VHeAcRCzAADwdvmdkmw109.svg

因?yàn)槲覀冏约汉铣闪藬?shù)據(jù)集,所以我們確切地知道真正的參數(shù)是什么。因此,我們可以通過(guò)將真實(shí)參數(shù)與我們通過(guò)訓(xùn)練循環(huán)學(xué)到的參數(shù)進(jìn)行比較來(lái)評(píng)估我們?cè)谟?xùn)練中的成功。事實(shí)上,他們彼此非常接近。

print(f'error in estimating w: {data.w - model.w.reshape(data.w.shape)}')
print(f'error in estimating b: {data.b - model.b}')

error in estimating w: tensor([ 0.1006, -0.1535], grad_fn=)
error in estimating b: tensor([0.2132], grad_fn=)

print(f'error in estimating w: {data.w - model.w.reshape(data.w.shape)}')
print(f'error in estimating b: {data.b - model.b}')

error in estimating w: [ 0.10755348 -0.13104177]
error in estimating b: [0.18908024]

params = trainer.state.params
print(f"error in estimating w: {data.w - params['w'].reshape(data.w.shape)}")
print(f"error in estimating b: {data.b - params['b']}")

error in estimating w: [ 0.06764424 -0.183249 ]
error in estimating b: [0.23523378]

print(f'error in estimating w: {data.w - tf.reshape(model.w, data.w.shape)}')
print(f'error in estimating b: {data.b - model.b}')

error in estimating w: [ 0.08918679 -0.11773038]
error in estimating b: [0.211231]

我們不應(yīng)該把準(zhǔn)確恢復(fù)地面實(shí)況參數(shù)的能力視為理所當(dāng)然。一般來(lái)說(shuō),對(duì)于深度模型,參數(shù)的唯一解是不存在的,即使對(duì)于線性模型,只有當(dāng)沒(méi)有特征與其他特征線性相關(guān)時(shí),才有可能準(zhǔn)確地恢復(fù)參數(shù)。然而,在機(jī)器學(xué)習(xí)中,我們通常不太關(guān)心恢復(fù)真正的底層參數(shù),而更關(guān)心導(dǎo)致高度準(zhǔn)確預(yù)測(cè)的參數(shù) ( Vapnik, 1992 )。幸運(yùn)的是,即使在困難的優(yōu)化問(wèn)題上,隨機(jī)梯度下降通常也能找到非常好的解決方案,部分原因在于,對(duì)于深度網(wǎng)絡(luò),存在許多導(dǎo)致高精度預(yù)測(cè)的參數(shù)配置。

3.4.5. 概括

在本節(jié)中,我們通過(guò)實(shí)施功能齊全的神經(jīng)網(wǎng)絡(luò)模型和訓(xùn)練循環(huán),朝著設(shè)計(jì)深度學(xué)習(xí)系統(tǒng)邁出了重要一步。在這個(gè)過(guò)程中,我們構(gòu)建了數(shù)據(jù)加載器、模型、損失函數(shù)、優(yōu)化程序以及可視化和監(jiān)控工具。為此,我們編寫了一個(gè) Python 對(duì)象,其中包含用于訓(xùn)練模型的所有相關(guān)組件。雖然這還不是專業(yè)級(jí)的實(shí)現(xiàn),但它具有完美的功能,并且像這樣的代碼已經(jīng)可以幫助您快速解決小問(wèn)題。在接下來(lái)的部分中,我們將看到如何更簡(jiǎn)潔 (避免樣板代碼)和更高效(充分利用我們的 GPU)。

3.4.6. 練習(xí)

如果我們將權(quán)重初始化為零會(huì)發(fā)生什么。該算法仍然有效嗎?如果我們用方差初始化參數(shù)會(huì)怎樣1,000而不是0.01?

假設(shè)您是Georg Simon Ohm,正在嘗試建立一個(gè)與電壓和電流相關(guān)的電阻器模型。您可以使用自動(dòng)微分來(lái)學(xué)習(xí)模型的參數(shù)嗎?

你能用普朗克定律通過(guò)光譜能量密度來(lái)確定物體的溫度嗎?作為參考,光譜密度B從黑體發(fā)出的輻射是 B(λ,T)=2hc2λ5?(exp?hcλkT?1)?1. 這里λ是波長(zhǎng),T是溫度, c是光速,h是普朗克量子,并且 k是玻爾茲曼常數(shù)。您測(cè)量不同波長(zhǎng)的能量λ現(xiàn)在您需要使譜密度曲線符合普朗克定律。

如果你想計(jì)算損失的二階導(dǎo)數(shù),你可能會(huì)遇到什么問(wèn)題?你會(huì)如何修復(fù)它們?

為什么函數(shù)reshape中需要方法loss?

嘗試使用不同的學(xué)習(xí)率來(lái)找出損失函數(shù)值下降的速度。你能通過(guò)增加訓(xùn)練的次數(shù)來(lái)減少錯(cuò)誤嗎?

如果樣本數(shù)不能除以批量大小,那么在data_iter一個(gè)紀(jì)元結(jié)束時(shí)會(huì)發(fā)生什么?

嘗試實(shí)現(xiàn)不同的損失函數(shù),例如絕對(duì)值損失。(y_hat - d2l.reshape(y, y_hat.shape)).abs().sum()

檢查常規(guī)數(shù)據(jù)會(huì)發(fā)生什么。

如果您主動(dòng)擾亂某些條目,請(qǐng)檢查行為是否存在差異y, 例如 y5=10,000.

你能想出一個(gè)便宜的解決方案來(lái)結(jié)合平方損失和絕對(duì)值損失的最佳方面嗎?提示:如何避免非常大的梯度值?

為什么我們需要重新洗牌數(shù)據(jù)集?你能設(shè)計(jì)一個(gè)惡意數(shù)據(jù)集否則會(huì)破壞優(yōu)化算法的情況嗎?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    813

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何讓Design Studio 3.6.3適用于 K144 開(kāi)發(fā)板?

    \'ve followed the Getting Started and other tutorials but nothing ever seems to match how my software behaves. 有人可以從頭開(kāi)始詳細(xì)解釋一下如何讓這個(gè)軟件適用于 K144 開(kāi)發(fā)板嗎?????
    發(fā)表于 04-17 06:19

    線性回歸的類型和應(yīng)用

    線性回歸是一種統(tǒng)計(jì)建模方法,用來(lái)將連續(xù)響應(yīng)變量描述為一個(gè)或多個(gè)預(yù)測(cè)變量的函數(shù)。它有助于您理解和預(yù)測(cè)復(fù)雜系統(tǒng)的行為,或者分析試驗(yàn)、金融和生物數(shù)據(jù)。
    的頭像 發(fā)表于 03-13 10:20 ?324次閱讀
    <b class='flag-5'>線性</b><b class='flag-5'>回歸</b>的類型和應(yīng)用

    PyTorch 中RuntimeError分析

    \')# 執(zhí)行上采樣 x = x.to(torch.bfloat16)# 轉(zhuǎn)換回 BFloat16 方案2:升級(jí) PyTorch 版本 該問(wèn)題在 PyTorch 2.1.0 及更高版本中得到了修復(fù)。你可以
    發(fā)表于 03-06 06:02

    Pytorch 與 Visionfive2 兼容嗎?

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

    AI峰會(huì)冰火兩重天:英特爾亮劍GPU挑戰(zhàn)英偉達(dá),黃仁勛怒懟AI代替軟件

    美東時(shí)間2月3日,在思科AI大會(huì)上,英偉達(dá)CEO黃仁勛和英特爾CEO陳立武接連放出了重磅消息。英特爾CEO陳立武宣布,已指派新任架構(gòu)師,準(zhǔn)備打造首款GPU。英偉達(dá)CEO黃仁勛表示,擔(dān)心人工智能會(huì)使軟件公司變得不重要是錯(cuò)誤的,人工智能系統(tǒng)的設(shè)計(jì)初衷是與現(xiàn)有軟件進(jìn)行協(xié)同,而不是從頭開(kāi)始重建基本工具。
    的頭像 發(fā)表于 02-05 10:05 ?1.6w次閱讀
    AI峰會(huì)冰火兩重天:英特爾亮劍GPU挑戰(zhàn)英偉達(dá),黃仁勛怒懟AI代替軟件

    DRV2603:線性諧振執(zhí)行器的自動(dòng)共振檢測(cè)觸覺(jué)驅(qū)動(dòng)器的綜合解析

    DRV2603:線性諧振執(zhí)行器的自動(dòng)共振檢測(cè)觸覺(jué)驅(qū)動(dòng)器的綜合解析 在電子產(chǎn)品的觸覺(jué)反饋設(shè)計(jì)中,一款優(yōu)秀的觸覺(jué)驅(qū)動(dòng)器至關(guān)重要。TI公司的DRV2603就是這樣一款值得深入研究的產(chǎn)品,它專為解決驅(qū)動(dòng)線性
    的頭像 發(fā)表于 01-30 13:50 ?369次閱讀

    解讀SNx5DP149:3.4 Gbps DP++到HDMI的高性能Retimer

    解讀SNx5DP149:3.4 Gbps DP++到HDMI的高性能Retimer 在當(dāng)今的數(shù)字顯示領(lǐng)域,隨著高清、超高清顯示技術(shù)的不斷發(fā)展,對(duì)于高質(zhì)量、高速率視頻信號(hào)傳輸?shù)男枨笠踩找嬖鲩L(zhǎng)
    的頭像 發(fā)表于 01-07 18:20 ?2235次閱讀

    MAX2645:3.4GHz - 3.8GHz SiGe低噪聲放大器/PA預(yù)驅(qū)動(dòng)器的卓越性能與應(yīng)用

    MAX2645:3.4GHz - 3.8GHz SiGe低噪聲放大器/PA預(yù)驅(qū)動(dòng)器的卓越性能與應(yīng)用 在無(wú)線通信和數(shù)字微波領(lǐng)域,對(duì)于高性能、高線性度和低噪聲放大器的需求日益增長(zhǎng)。MAXIM推出
    的頭像 發(fā)表于 01-06 11:45 ?486次閱讀

    線性搜索與二分搜索介紹

    線性搜索(Linear Search):從數(shù)組的第一個(gè)元素開(kāi)始,依次將當(dāng)前元素與目標(biāo)值進(jìn)行比較,直到找到目標(biāo)值或搜索完整個(gè)數(shù)組。 二分搜索(Binary Search):在有序數(shù)組中查找某一特定元素
    發(fā)表于 12-01 07:36

    3.4 至 3.8 GHz、100 W 緊湊型高功率 SPDT 開(kāi)關(guān),帶集成驅(qū)動(dòng)器 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()3.4 至 3.8 GHz、100 W 緊湊型高功率 SPDT 開(kāi)關(guān),帶集成驅(qū)動(dòng)器相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有3.4 至 3.8 GHz、100 W 緊湊型高功率 SPDT
    發(fā)表于 10-27 18:29
    <b class='flag-5'>3.4</b> 至 3.8 GHz、100 W 緊湊型高功率 SPDT 開(kāi)關(guān),帶集成驅(qū)動(dòng)器 skyworksinc

    文件系統(tǒng)的文件怎么循環(huán)覆蓋的寫入數(shù)據(jù)?

    請(qǐng)教一個(gè)文件系統(tǒng)數(shù)據(jù)寫入的問(wèn)題。 比如我新建一個(gè)文件,test.txt,寫入數(shù)據(jù)超過(guò)512KB后,就從頭開(kāi)始寫,后面的數(shù)據(jù)不刪除,從頭開(kāi)始覆蓋。 比如原來(lái)寫了1000條數(shù)據(jù),然后從頭開(kāi)始循環(huán)覆蓋
    發(fā)表于 09-22 08:20

    如何在機(jī)器視覺(jué)中部署深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

    人士而言往往難以理解,人們也常常誤以為需要扎實(shí)的編程技能才能真正掌握并合理使用這項(xiàng)技術(shù)。事實(shí)上,這種印象忽視了該技術(shù)為機(jī)器視覺(jué)(乃至生產(chǎn)自動(dòng)化)帶來(lái)的潛力,因?yàn)樯疃葘W(xué)習(xí)并非只屬于計(jì)算機(jī)科學(xué)家或程序員。 從頭開(kāi)始:什么
    的頭像 發(fā)表于 09-10 17:38 ?1074次閱讀
    如何在機(jī)器視覺(jué)中部署深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

    如何在TPU上使用JAX訓(xùn)練GPT-2模型

    如果您對(duì)如何使用 JAX 從頭開(kāi)始構(gòu)建語(yǔ)言模型感到好奇,那么本文非常適合您。我們?cè)?2025 年 Google Cloud Next 大會(huì)上舉辦了一場(chǎng)關(guān)于此主題的研討會(huì),并獲得了一些很好的反饋,我們也為所有無(wú)法參會(huì)的開(kāi)發(fā)者編寫了這份指南。
    的頭像 發(fā)表于 09-03 11:39 ?1843次閱讀
    如何在TPU上使用JAX訓(xùn)練GPT-2模型

    Arm方案 基于Arm架構(gòu)的邊緣側(cè)設(shè)備(樹(shù)莓派或 NVIDIA Jetson Nano)上部署PyTorch模型

    本文將為你展示如何在樹(shù)莓派或 NVIDIA Jetson Nano 等基于 Arm 架構(gòu)的邊緣側(cè)設(shè)備上部署 PyTorch 模型。
    的頭像 發(fā)表于 07-28 11:50 ?3097次閱讀

    求助,關(guān)于CYUSB3KIT中的編程問(wèn)題求解

    我的工作,但我不太確定,所以如果有人可以告訴我從頭開(kāi)始做,以便我理解它,同時(shí)將數(shù)據(jù)捕獲到 PC 中是否可以通過(guò)CYPRESS?自己的軟件完成,還是我需要自己制作?數(shù)據(jù)將以 100 MHz 的頻率同步 16 位。 幫助?。?!
    發(fā)表于 05-09 08:06
    邢台市| 敖汉旗| 宜城市| 青河县| 民勤县| 兴安县| 东源县| 灯塔市| 曲沃县| 土默特左旗| 河北区| 彩票| 香格里拉县| 高陵县| 洞头县| 望江县| 淄博市| 锦州市| 儋州市| 习水县| 兴隆县| 海南省| 巴东县| 沙坪坝区| 临夏市| 洮南市| 泾阳县| 上饶县| 阿勒泰市| 金川县| 略阳县| 宜良县| 辽宁省| 都匀市| 纳雍县| 边坝县| 上饶县| 海门市| 齐河县| 双桥区| 郧西县|