色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

PyTorch教程-4.3. 基本分類模型

jf_pJlTbmA9 ? 來源:PyTorch ? 作者:PyTorch ? 2023-06-05 15:43 ? 次閱讀

您可能已經注意到,在回歸的情況下,從頭開始的實現和使用框架功能的簡潔實現非常相似。分類也是如此。由于本書中的許多模型都處理分類,因此值得添加專門支持此設置的功能。本節為分類模型提供了一個基類,以簡化以后的代碼。

import torch
from d2l import torch as d2l

from mxnet import autograd, gluon, np, npx
from d2l import mxnet as d2l

npx.set_np()

from functools import partial
import jax
import optax
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.)

import tensorflow as tf
from d2l import tensorflow as d2l

4.3.1. 類Classifier_

我們在下面定義Classifier類。在中,validation_step我們報告了驗證批次的損失值和分類準確度。我們為每個批次繪制一個更新num_val_batches 。這有利于在整個驗證數據上生成平均損失和準確性。如果最后一批包含的示例較少,則這些平均數并不完全正確,但我們忽略了這一微小差異以保持代碼簡單。

class Classifier(d2l.Module): #@save
  """The base class of classification models."""
  def validation_step(self, batch):
    Y_hat = self(*batch[:-1])
    self.plot('loss', self.loss(Y_hat, batch[-1]), train=False)
    self.plot('acc', self.accuracy(Y_hat, batch[-1]), train=False)

We define the Classifier class below. In the validation_step we report both the loss value and the classification accuracy on a validation batch. We draw an update for every num_val_batches batches. This has the benefit of generating the averaged loss and accuracy on the whole validation data. These average numbers are not exactly correct if the last batch contains fewer examples, but we ignore this minor difference to keep the code simple.

class Classifier(d2l.Module): #@save
  """The base class of classification models."""
  def validation_step(self, batch):
    Y_hat = self(*batch[:-1])
    self.plot('loss', self.loss(Y_hat, batch[-1]), train=False)
    self.plot('acc', self.accuracy(Y_hat, batch[-1]), train=False)

We define the Classifier class below. In the validation_step we report both the loss value and the classification accuracy on a validation batch. We draw an update for every num_val_batches batches. This has the benefit of generating the averaged loss and accuracy on the whole validation data. These average numbers are not exactly correct if the last batch contains fewer examples, but we ignore this minor difference to keep the code simple.

We also redefine the training_step method for JAX since all models that will subclass Classifier later will have a loss that returns auxiliary data. This auxiliary data can be used for models with batch normalization (to be explained in Section 8.5), while in all other cases we will make the loss also return a placeholder (empty dictionary) to represent the auxiliary data.

class Classifier(d2l.Module): #@save
  """The base class of classification models."""
  def training_step(self, params, batch, state):
    # Here value is a tuple since models with BatchNorm layers require
    # the loss to return auxiliary data
    value, grads = jax.value_and_grad(
      self.loss, has_aux=True)(params, batch[:-1], batch[-1], state)
    l, _ = value
    self.plot("loss", l, train=True)
    return value, grads

  def validation_step(self, params, batch, state):
    # Discard the second returned value. It is used for training models
    # with BatchNorm layers since loss also returns auxiliary data
    l, _ = self.loss(params, batch[:-1], batch[-1], state)
    self.plot('loss', l, train=False)
    self.plot('acc', self.accuracy(params, batch[:-1], batch[-1], state),
         train=False)

We define the Classifier class below. In the validation_step we report both the loss value and the classification accuracy on a validation batch. We draw an update for every num_val_batches batches. This has the benefit of generating the averaged loss and accuracy on the whole validation data. These average numbers are not exactly correct if the last batch contains fewer examples, but we ignore this minor difference to keep the code simple.

class Classifier(d2l.Module): #@save
  """The base class of classification models."""
  def validation_step(self, batch):
    Y_hat = self(*batch[:-1])
    self.plot('loss', self.loss(Y_hat, batch[-1]), train=False)
    self.plot('acc', self.accuracy(Y_hat, batch[-1]), train=False)

默認情況下,我們使用隨機梯度下降優化器,在小批量上運行,就像我們在線性回歸的上下文中所做的那樣。

@d2l.add_to_class(d2l.Module) #@save
def configure_optimizers(self):
  return torch.optim.SGD(self.parameters(), lr=self.lr)

@d2l.add_to_class(d2l.Module) #@save
def configure_optimizers(self):
  params = self.parameters()
  if isinstance(params, list):
    return d2l.SGD(params, self.lr)
  return gluon.Trainer(params, 'sgd', {'learning_rate': self.lr})

@d2l.add_to_class(d2l.Module) #@save
def configure_optimizers(self):
  return optax.sgd(self.lr)

@d2l.add_to_class(d2l.Module) #@save
def configure_optimizers(self):
  return tf.keras.optimizers.SGD(self.lr)

4.3.2. 準確性

給定預測概率分布y_hat,每當我們必須輸出硬預測時,我們通常會選擇預測概率最高的類別。事實上,許多應用程序需要我們做出選擇。例如,Gmail 必須將電子郵件分類為“主要”、“社交”、“更新”、“論壇”或“垃圾郵件”。它可能會在內部估計概率,但最終它必須在類別中選擇一個。

當預測與標簽 class 一致時y,它們是正確的。分類準確度是所有正確預測的分數。盡管直接優化精度可能很困難(不可微分),但它通常是我們最關心的性能指標。它通常是基準測試中的相關數量。因此,我們幾乎總是在訓練分類器時報告它。

準確度計算如下。首先,如果y_hat是一個矩陣,我們假設第二個維度存儲每個類別的預測分數。我們使用argmax每行中最大條目的索引來獲取預測類。然后我們將預測的類別與真實的元素進行比較y。由于相等運算符== 對數據類型敏感,因此我們轉換 的y_hat數據類型以匹配 的數據類型y。結果是一個包含條目 0(假)和 1(真)的張量。求和得出正確預測的數量。

@d2l.add_to_class(Classifier) #@save
def accuracy(self, Y_hat, Y, averaged=True):
  """Compute the number of correct predictions."""
  Y_hat = Y_hat.reshape((-1, Y_hat.shape[-1]))
  preds = Y_hat.argmax(axis=1).type(Y.dtype)
  compare = (preds == Y.reshape(-1)).type(torch.float32)
  return compare.mean() if averaged else compare

@d2l.add_to_class(Classifier) #@save
def accuracy(self, Y_hat, Y, averaged=True):
  """Compute the number of correct predictions."""
  Y_hat = Y_hat.reshape((-1, Y_hat.shape[-1]))
  preds = Y_hat.argmax(axis=1).astype(Y.dtype)
  compare = (preds == Y.reshape(-1)).astype(np.float32)
  return compare.mean() if averaged else compare

@d2l.add_to_class(d2l.Module) #@save
def get_scratch_params(self):
  params = []
  for attr in dir(self):
    a = getattr(self, attr)
    if isinstance(a, np.ndarray):
      params.append(a)
    if isinstance(a, d2l.Module):
      params.extend(a.get_scratch_params())
  return params

@d2l.add_to_class(d2l.Module) #@save
def parameters(self):
  params = self.collect_params()
  return params if isinstance(params, gluon.parameter.ParameterDict) and len(
    params.keys()) else self.get_scratch_params()

@d2l.add_to_class(Classifier) #@save
@partial(jax.jit, static_argnums=(0, 5))
def accuracy(self, params, X, Y, state, averaged=True):
  """Compute the number of correct predictions."""
  Y_hat = state.apply_fn({'params': params,
              'batch_stats': state.batch_stats}, # BatchNorm Only
              *X)
  Y_hat = Y_hat.reshape((-1, Y_hat.shape[-1]))
  preds = Y_hat.argmax(axis=1).astype(Y.dtype)
  compare = (preds == Y.reshape(-1)).astype(jnp.float32)
  return compare.mean() if averaged else compare

@d2l.add_to_class(Classifier) #@save
def accuracy(self, Y_hat, Y, averaged=True):
  """Compute the number of correct predictions."""
  Y_hat = tf.reshape(Y_hat, (-1, Y_hat.shape[-1]))
  preds = tf.cast(tf.argmax(Y_hat, axis=1), Y.dtype)
  compare = tf.cast(preds == tf.reshape(Y, -1), tf.float32)
  return tf.reduce_mean(compare) if averaged else compare

4.3.3. 概括

分類是一個足夠普遍的問題,它保證了它自己的便利功能。分類中最重要的是 分類器的準確性。請注意,雖然我們通常主要關心準確性,但出于統計和計算原因,我們訓練分類器以優化各種其他目標。然而,無論在訓練過程中哪個損失函數被最小化,有一個方便的方法來根據經驗評估我們的分類器的準確性是有用的。

4.3.4. 練習

表示為Lv驗證損失,讓Lvq是通過本節中的損失函數平均計算的快速而骯臟的估計。最后,表示為lvb最后一個小批量的損失。表達Lv按照Lvq, lvb,以及樣本和小批量大小。

表明快速而骯臟的估計Lvq是公正的。也就是說,表明E[Lv]=E[Lvq]. 為什么你還想使用Lv反而?

給定多類分類損失,表示為l(y,y′) 估計的懲罰y′當我們看到y并給出一個概率p(y∣x), 制定最佳選擇規則y′. 提示:表達預期損失,使用 l和p(y∣x).

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

    關注

    2

    文章

    808

    瀏覽量

    13249
收藏 人收藏

    評論

    相關推薦

    Pytorch模型訓練實用PDF教程【中文】

    模型部分?還是優化器?只有這樣不斷的通過可視化診斷你的模型,不斷的對癥下藥,才能訓練出一個較滿意的模型。本教程內容及結構:本教程內容主要為在 PyTorch 中訓練一個
    發表于 12-21 09:18

    pyhanlp文本分類與情感分析

    關系如下:訓練訓練指的是,利用給定訓練集尋找一個能描述這種語言現象的模型的過程。開發者只需調用train接口即可,但在實現中,有許多細節。分詞目前,本系統中的分詞器接口一共有兩種實現: 但文本分類是否
    發表于 02-20 15:37

    pytorch模型轉化為onxx模型的步驟有哪些

    首先pytorch模型要先轉化為onxx模型,然后從onxx模型轉化為rknn模型直接轉化會出現如下問題,環境都是正確的,論壇詢問后也沒給出
    發表于 05-09 16:36

    通過Cortex來非常方便的部署PyTorch模型

    ?你可以部署一個 AlexNet 模型,使用 PyTorch 和 Cortex 來標記圖像。那語言分類器呢,比如 Chrome 用來檢測頁面不是用默認語言寫的那個?fastText 是這個任務的完美
    發表于 11-01 15:25

    Pytorch模型轉換為DeepViewRT模型時出錯怎么解決?

    我正在尋求您的幫助以解決以下問題.. 我在 Windows 10 上安裝了 eIQ Toolkit 1.7.3,我想將我的 Pytorch 模型轉換為 DeepViewRT (.rtm) 模型,這樣
    發表于 06-09 06:42

    pytorch模型轉換需要注意的事項有哪些?

    什么是JIT(torch.jit)? 答:JIT(Just-In-Time)是一組編譯工具,用于彌合PyTorch研究與生產之間的差距。它允許創建可以在不依賴Python解釋器的情況下運行的模型
    發表于 09-18 08:05

    基于PLSA主題模型的多標記文本分類_蔣銘初

    基于PLSA主題模型的多標記文本分類_蔣銘初
    發表于 01-08 10:40 ?0次下載

    textCNN論文與原理——短文本分類

    前言 之前書寫了使用pytorch進行短文本分類,其中的數據處理方式比較簡單粗暴。自然語言處理領域包含很多任務,很多的數據向之前那樣處理的話未免有點繁瑣和耗時。在pytorch中眾所周知的數據處理包
    的頭像 發表于 12-31 10:08 ?2542次閱讀
    textCNN論文與原理——短文<b class='flag-5'>本分類</b>

    結合BERT模型的中文文本分類算法

    針對現有中文短文夲分類算法通常存在特征稀疏、用詞不規范和數據海量等問題,提出一種基于Transformer的雙向編碼器表示(BERT)的中文短文本分類算法,使用BERT預訓練語言模型對短文本進行句子
    發表于 03-11 16:10 ?6次下載
    結合BERT<b class='flag-5'>模型</b>的中文文<b class='flag-5'>本分類</b>算法

    融合文本分類和摘要的多任務學習摘要模型

    文本摘要應包含源文本中所有重要信息,傳統基于編碼器-解碼器架構的摘要模型生成的摘要準確性較低。根據文本分類和文本摘要的相關性,提出一種多任務學習摘要模型。從文本分類輔助任務中學習抽象信
    發表于 04-27 16:18 ?11次下載
    融合文<b class='flag-5'>本分類</b>和摘要的多任務學習摘要<b class='flag-5'>模型</b>

    基于不同神經網絡的文本分類方法研究對比

    神經網絡、時間遞歸神經網絡、結構遞歸神經網絡和預訓練模型等主流方法在文本分類中應用的發展歷程比較不同模型基于常用數據集的分類效果,表明利用人工神經網絡伂構自動獲取文本特征,可避免繁雜的
    發表于 05-13 16:34 ?49次下載

    基于LSTM的表示學習-文本分類模型

    的關鍵。為了獲得妤的文本表示,提高文本分類性能,構建了基于LSTM的表示學習-文本分類模型,其中表示學習模型利用語言模型為文
    發表于 06-15 16:17 ?18次下載

    基于注意力機制的新聞文本分類模型

    基于注意力機制的新聞文本分類模型
    發表于 06-27 15:32 ?30次下載

    PyTorch本分類任務的基本流程

    本分類是NLP領域的較為容易的入門問題,本文記錄文本分類任務的基本流程,大部分操作使用了**torch**和**torchtext**兩個庫。 ## 1. 文本數據預處理
    的頭像 發表于 02-22 14:23 ?1127次閱讀

    PyTorch教程4.3之基本分類模型

    電子發燒友網站提供《PyTorch教程4.3之基本分類模型.pdf》資料免費下載
    發表于 06-05 15:43 ?0次下載
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>4.3</b>之基<b class='flag-5'>本分類</b><b class='flag-5'>模型</b>
    主站蜘蛛池模板: 国产婷婷色综合AV蜜臀AV| 国产精品视频在线自在线| 草民电影网午夜伦理电影网| 国产亚洲精品高清视频免费| 妻子+免费观看完整| 97色伦久久视频在观看| 久久亚洲这里只有精品18| 亚洲人成色777777老人头| 国产一区二区不卡老阿姨| 亚洲 欧美 国产 综合 在线| 国产精品涩涩涩视频网站| 四虎永久免费网址| 国产成人拍精品视频网| 熟女人妻-蜜臀AV-首页| 国产精品观看视频免费完整版| 日韩精品人成在线播放| 第一次破女初国产美女| 熟女人妻水多爽中文字幕| 国产精品久久久久久久人热| 亚洲aaaa级特黄毛片| 精品水蜜桃久久久久久久| 在线a视频| 欧美丰满白嫩bbxx| 戳女人屁股流水羞羞漫画| 臀精插宫NP文| 国产在线观看www| 在线免费中文字幕| 农民工老头在出租屋嫖老熟女| www精品一区二区三区四区| 色偷偷亚洲天堂| 极品色αv影院| 69夫妻交友网| 少妇两个奶头喷出奶水了怎么办| 国产人A片777777久久| 艳妇臀荡乳欲伦岳TXT下载| 乱叫抽搐流白浆免费视频| jjzz韩国| 亚洲精品天堂在线| 年轻的搜子8中字在线观看| 国产成人a一在线观看| 亚洲色噜噜狠狠站欲八|