国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

PyTorch教程-3.4. 從頭開始執行線性回歸

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

掃碼添加小助手

加入工程師交流群

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

%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. 定義模型

在我們開始通過小批量 SGD 優化模型參數之前,我們首先需要有一些參數。在下文中,我們通過從均值為 0 且標準差為 0.01 的正態分布中抽取隨機數來初始化權重?;脭?0.01 在實踐中通常效果很好,但您可以通過參數指定不同的值sigma。此外,我們將偏差設置為 0。注意,對于面向對象的設計,我們將代碼添加到__init__子類的方法中(在3.2.2 節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)

接下來,我們必須定義我們的模型,將其輸入和參數與其輸出相關聯。在(3.1.4)中使用相同的符號,對于我們的線性模型,我們簡單地采用輸入特征的矩陣向量乘積X和模型權重w,并加上偏移量b每個例子。Xw是一個向量并且b是一個標量。由于廣播機制(參見 第 2.1.4 節),當我們添加一個向量和一個標量時,標量將添加到向量的每個分量。生成的 方法 通過(在第 3.2.1 節中介紹 )forward在類中注冊。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. 定義損失函數

由于更新我們的模型需要采用損失函數的梯度,因此我們應該首先定義損失函數。這里我們使用(3.1.5)中的平方損失函數。在實現中,我們需要將真實值轉換y為預測值的形狀 y_hat。以下方法返回的結果也將具有與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. 定義優化算法

正如第 3.1 節中所討論的,線性回歸有一個封閉形式的解決方案。然而,我們這里的目標是說明如何訓練更通用的神經網絡,這需要我們教您如何使用小批量 SGD。因此,我們將借此機會介紹您的第一個 SGD 工作示例。在每一步,使用從我們的數據集中隨機抽取的小批量,我們估計損失相對于參數的梯度。接下來,我們朝著可能減少損失的方向更新參數。

以下代碼應用更新,給定一組參數,一個學習率lr。由于我們的損失是按小批量的平均值計算的,因此我們不需要根據批量大小調整學習率。在后面的章節中,我們將研究如何為分布式大規模學習中出現的非常大的小批量調整學習率?,F在,我們可以忽略這種依賴性。

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

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)

接下來我們定義configure_optimizers方法,它返回類的一個實例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. 訓練

現在我們已經準備好所有的部分(參數、損失函數、模型和優化器),我們準備好實施主要的訓練循環。理解這段代碼至關重要,因為您將對本書涵蓋的所有其他深度學習模型使用類似的訓練循環。在每個epoch中,我們遍歷整個訓練數據集,通過每個示例一次(假設示例的數量可以被批量大小整除)。在每次迭代中,我們獲取一小批訓練示例,并通過模型的 training_step方法計算其損失。接下來,我們計算每個參數的梯度。最后,我們將調用優化算法來更新模型參數。總之,我們將執行以下循環:

初始化參數(w,b)

重復直到完成

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

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

回想一下,我們在3.3 節中生成的綜合回歸數據集 不提供驗證數據集。然而,在大多數情況下,我們將使用驗證數據集來衡量我們的模型質量。在這里,我們在每個時期通過一次驗證數據加載器來衡量模型性能。按照我們的面向對象設計,prepare_batch和fit_epoch方法注冊在d2l.Trainer類中(在 3.2.4 節中介紹)。

@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

我們幾乎準備好訓練模型,但首先我們需要一些數據來訓練。這里我們使用SyntheticRegressionData類并傳入一些基本參數。然后,我們用學習率訓練我們的模型lr=0.03并設置max_epochs=3。請注意,一般來說,epoch 的數量和學習率都是超參數。一般來說,設置超參數很棘手,我們通常希望使用 3 路分割,一組用于訓練,第二組用于超參數選擇,第三組保留用于最終評估。我們暫時省略這些細節,但稍后會對其進行修改。

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

因為我們自己合成了數據集,所以我們確切地知道真正的參數是什么。因此,我們可以通過將真實參數與我們通過訓練循環學到的參數進行比較來評估我們在訓練中的成功。事實上,他們彼此非常接近。

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]

我們不應該把準確恢復地面實況參數的能力視為理所當然。一般來說,對于深度模型,參數的唯一解是不存在的,即使對于線性模型,只有當沒有特征與其他特征線性相關時,才有可能準確地恢復參數。然而,在機器學習中,我們通常不太關心恢復真正的底層參數,而更關心導致高度準確預測的參數 ( Vapnik, 1992 )。幸運的是,即使在困難的優化問題上,隨機梯度下降通常也能找到非常好的解決方案,部分原因在于,對于深度網絡,存在許多導致高精度預測的參數配置。

3.4.5. 概括

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

3.4.6. 練習

如果我們將權重初始化為零會發生什么。該算法仍然有效嗎?如果我們用方差初始化參數會怎樣1,000而不是0.01?

假設您是Georg Simon Ohm,正在嘗試建立一個與電壓和電流相關的電阻器模型。您可以使用自動微分來學習模型的參數嗎?

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

如果你想計算損失的二階導數,你可能會遇到什么問題?你會如何修復它們?

為什么函數reshape中需要方法loss?

嘗試使用不同的學習率來找出損失函數值下降的速度。你能通過增加訓練的次數來減少錯誤嗎?

如果樣本數不能除以批量大小,那么在data_iter一個紀元結束時會發生什么?

嘗試實現不同的損失函數,例如絕對值損失。(y_hat - d2l.reshape(y, y_hat.shape)).abs().sum()

檢查常規數據會發生什么。

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

你能想出一個便宜的解決方案來結合平方損失和絕對值損失的最佳方面嗎?提示:如何避免非常大的梯度值?

為什么我們需要重新洗牌數據集?你能設計一個惡意數據集否則會破壞優化算法的情況嗎?

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

    關注

    2

    文章

    813

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Pytorch 與 Visionfive2 兼容嗎?

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

    AI峰會冰火兩重天:英特爾亮劍GPU挑戰英偉達,黃仁勛怒懟AI代替軟件

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

    DRV2603:線性諧振執行器的自動共振檢測觸覺驅動器的綜合解析

    DRV2603:線性諧振執行器的自動共振檢測觸覺驅動器的綜合解析 在電子產品的觸覺反饋設計中,一款優秀的觸覺驅動器至關重要。TI公司的DRV2603就是這樣一款值得深入研究的產品,它專為解決驅動線性
    的頭像 發表于 01-30 13:50 ?131次閱讀

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

    解讀SNx5DP149:3.4 Gbps DP++到HDMI的高性能Retimer 在當今的數字顯示領域,隨著高清、超高清顯示技術的不斷發展,對于高質量、高速率視頻信號傳輸的需求也日益增長
    的頭像 發表于 01-07 18:20 ?1849次閱讀

    MAX2645:3.4GHz - 3.8GHz SiGe低噪聲放大器/PA預驅動器的卓越性能與應用

    MAX2645:3.4GHz - 3.8GHz SiGe低噪聲放大器/PA預驅動器的卓越性能與應用 在無線通信和數字微波領域,對于高性能、高線性度和低噪聲放大器的需求日益增長。MAXIM推出
    的頭像 發表于 01-06 11:45 ?313次閱讀

    線性搜索與二分搜索介紹

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

    3.4 至 3.8 GHz、100 W 緊湊型高功率 SPDT 開關,帶集成驅動器 skyworksinc

    電子發燒友網為你提供()3.4 至 3.8 GHz、100 W 緊湊型高功率 SPDT 開關,帶集成驅動器相關產品參數、數據手冊,更有3.4 至 3.8 GHz、100 W 緊湊型高功率 SPDT
    發表于 10-27 18:29
    <b class='flag-5'>3.4</b> 至 3.8 GHz、100 W 緊湊型高功率 SPDT 開關,帶集成驅動器 skyworksinc

    文件系統的文件怎么循環覆蓋的寫入數據?

    請教一個文件系統數據寫入的問題。 比如我新建一個文件,test.txt,寫入數據超過512KB后,就從頭開始寫,后面的數據不刪除,從頭開始覆蓋。 比如原來寫了1000條數據,然后從頭開始循環覆蓋
    發表于 09-22 08:20

    如何在機器視覺中部署深度學習神經網絡

    人士而言往往難以理解,人們也常常誤以為需要扎實的編程技能才能真正掌握并合理使用這項技術。事實上,這種印象忽視了該技術為機器視覺(乃至生產自動化)帶來的潛力,因為深度學習并非只屬于計算機科學家或程序員。 從頭開始:什么
    的頭像 發表于 09-10 17:38 ?900次閱讀
    如何在機器視覺中部署深度學習神經網絡

    如何在TPU上使用JAX訓練GPT-2模型

    如果您對如何使用 JAX 從頭開始構建語言模型感到好奇,那么本文非常適合您。我們在 2025 年 Google Cloud Next 大會上舉辦了一場關于此主題的研討會,并獲得了一些很好的反饋,我們也為所有無法參會的開發者編寫了這份指南。
    的頭像 發表于 09-03 11:39 ?1694次閱讀
    如何在TPU上使用JAX訓練GPT-2模型

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

    本文將為你展示如何在樹莓派或 NVIDIA Jetson Nano 等基于 Arm 架構的邊緣側設備上部署 PyTorch 模型。
    的頭像 發表于 07-28 11:50 ?2872次閱讀

    求助,關于CYUSB3KIT中的編程問題求解

    我的工作,但我不太確定,所以如果有人可以告訴我從頭開始做,以便我理解它,同時將數據捕獲到 PC 中是否可以通過CYPRESS?自己的軟件完成,還是我需要自己制作?數據將以 100 MHz 的頻率同步 16 位。 幫助?。?!
    發表于 05-09 08:06

    如何實現MC33774IC在Simulink環境中使用基于模型的設計?

    我想熟悉如何實現MC33774IC 在 Simulink 環境中使用基于模型的設計。 盡管 MATLAB 提供了一些示例文件,但它們似乎是最終版本。要更深入地了解如何配置MC33774,我正在尋找一個教程,該教程解釋了如何從頭開始在 Simulink 中設置和添加必要的模塊。
    發表于 04-10 08:05

    使用win11并安裝S32DS 3.4,安裝失敗的原因?

    請幫我解決這個問題。我正在使用 win11 并計劃安裝 S32DS 3.4,安裝失敗的原因?
    發表于 03-27 06:02

    KiCad直播活動(三):在 Windows上編譯KiCad 手把手教您編譯/構建 KiCad 源碼

    及 KiCad 貼紙,趕緊報名參加吧~ 直播安排 在 Windows 上編譯 KiCad 時間:3月27日 19:30 內容:手把手幫助您從頭開始學習編譯 KiCad 代碼。 后續精彩內容: KiCad 代碼編譯指南 插件
    的頭像 發表于 03-24 11:14 ?1672次閱讀
    KiCad直播活動(三):在 Windows上編譯KiCad 手把手教您編譯/構建 KiCad 源碼