首頁 > 科技週邊 > 人工智慧 > 使用JAX,亞麻和Optax的圖像分類

使用JAX,亞麻和Optax的圖像分類

Jennifer Aniston
發布: 2025-03-18 11:50:23
原創
1008 人瀏覽過

該教程展示了使用JAX,Flax和Optax進行MNIST數字分類的捲積神經網絡(CNN)的構建,培訓和評估。我們將介紹從環境設置和數據預處理到模型架構,訓練循環實現,指標可視化以及最終對自定義圖像的預測的所有內容。這種方法突出了這些圖書館的協同優勢,以高效且可擴展的深度學習。

學習目標:

  • 掌握JAX,亞麻和Optax的集成,以簡化神經網絡開發。
  • 學習使用TensorFlow數據集(TFD)進行預處理和加載數據集。
  • 實施CNN進行有效的圖像分類。
  • 使用關鍵指標(損失和準確性)可視化培訓進度。
  • 評估模型在自定義圖像上的性能。

本文是數據科學博客馬拉鬆的一部分。

目錄:

  • 學習目標
  • JAX,亞麻和Optax Powerhouse
  • JAX設置:安裝和導入
  • MNIST數據:加載和預處理
  • 構建CNN
  • 模型評估:指標和跟踪
  • 訓練循環
  • 培訓和評估執行
  • 可視化性能
  • 用自定義圖像預測
  • 結論
  • 常見問題

JAX,亞麻和Optax Powerhouse:

高效,可擴展的深度學習需要強大的計算,模型設計和優化工具。 JAX,亞麻和Optax共同滿足了這些需求:

JAX:數字計算卓越:

JAX提供了具有Numpy樣界面的高性能數值計算。它的主要功能包括:

  • 自動分化(自動克拉德):複雜功能的毫無梯度計算。
  • 即時(JIT)彙編: CPU,GPU和TPU上的執行加速。
  • 矢量化:通過vmap簡化批處理處理。
  • 硬件加速度:對GPU和TPU的本機支持。

亞麻:靈活的神經網絡:

基於JAX的圖書館Flax為神經網絡構建提供了一種用戶友好且高度可定制的方法:

  • 狀態模塊:簡化的參數和狀態管理。
  • 簡明API:使用@nn.compact裝飾器的直觀模型定義。
  • 適應性:適用於從簡單到復雜的各種體系結構。
  • 無縫JAX集成:輕鬆利用JAX的功能。

Optax:全面優化:

Optax簡化了梯度處理和優化,提供:

  • 優化器品種:包括SGD,ADAM和RMSPROP在內的廣泛優化器。
  • 梯度操作:用於剪接,縮放和歸一化的工具。
  • 模塊化設計:梯度轉換和優化器的簡單組合。

這個組合的框架為有效的深度學習模型開發提供了一個強大的模塊化生態系統。

使用JAX,亞麻和Optax的圖像分類

JAX設置:安裝和導入:

安裝必要的庫:

登入後複製

導入基本庫:

導入JAX
導入jax.numpy作為jnp
來自亞麻的亞麻亞麻作為nn
來自亞麻。培訓進口train_state
導入Optax
導入numpy作為NP
導入Tensorflow_dataset作為TFD
導入matplotlib.pyplot作為PLT
登入後複製

MNIST數據:加載和預處理:

我們使用TFD加載和預處理MNIST數據集:

 def get_datasets():
  ds_builder = tfds.builder('mnist')
  ds_builder.download_and_prepare()
  train_ds = tfds.as_numpy(ds_builder.as_dataset(split ='train',batch_size = -1))
  test_ds = tfds.as_numpy(ds_builder.as_dataset(split ='test',batch_size = -1))
  train_ds ['image'] = jnp.float32(train_ds ['image']) / 255.0
  test_ds ['image'] = jnp.float32(test_ds ['image']) / 255.0
  返回train_ds,test_ds

train_ds,test_ds = get_datasets()
登入後複製

圖像歸一化為[0,1]。

使用JAX,亞麻和Optax的圖像分類

構建CNN:

我們的CNN架構:

 CNN類(nn.模塊):
  @nn.compact
  def __call __(self,x):
    x = nn.conv(功能= 32,kernel_size =(3,3))(x)
    x = nn.relu(x)
    x = nn.avg_pool(x,window_shape =(2,2),步幅=(2,2))
    x = nn.conv(功能= 64,kernel_size =(3,3))(x)
    x = nn.relu(x)
    x = nn.avg_pool(x,window_shape =(2,2),步幅=(2,2))
    x = x.Reshape(((x.Shape [0],-1)))
    x = nn.dense(功能= 256)(x)
    x = nn.relu(x)
    x = nn.dense(功能= 10)(x)
    返回x
登入後複製

這包括卷積層,合併的層,更平坦的層和密集的層。

模型評估:指標和跟踪:

我們定義功能以計算損失和準確性:

 DEF COMPUTE_METRICS(LOGITS,標籤):
  損失= jnp.mean(optax.softmax_cross_entropy(logits,jax.nn.one_hot(標籤,num_classes = 10))))))
  精度= JNP.Mean(JNP.Argmax(logits,-1)==標籤)
  指標= {'損失':損失,'準確性':準確性}
  返回指標

#...(train_step和eval_step函數在很大程度上保持不變)...
登入後複製

(Train_Step和eval_step功能將在此處包括,類似於原始代碼。)

訓練循環:

培訓循環迭代更新模型:

 #...(train_epoch和eval_model函數在很大程度上保持不變)...
登入後複製

(此處將包括Train_epoch和eval_model功能,類似於原始代碼。)

培訓和評估執行:

我們執行培訓和評估過程:

 #...(培訓和評估執行代碼在很大程度上保持不變)...
登入後複製

(培訓和評估執行代碼,包括參數初始化,優化器設置和培訓循環,將包括此處,類似於原始代碼。)

可視化性能:

我們使用matplotlib可視化培訓和測試指標:

 #...(matplotlib繪製代碼在很大程度上保持不變)...
登入後複製

(此處將包括用於可視化損耗和準確性的Matplotlib繪製代碼,類似於原始代碼。)

使用自定義圖像進行預測:

本節演示了自定義圖像的預測(代碼與原始圖像的預測幾乎相同)。

 #...(用於上傳,預處理和預測自定義圖像的代碼基本相同)...
登入後複製

結論:

該教程展示了JAX,亞麻和Optax在建造和培訓CNN的效率和靈活性。 TFD的使用簡化數據處理和度量可視化提供了寶貴的見解。在自定義圖像上測試模型的能力突出了其實際適用性。

常見問題:

(常見問題解答與原始相同。)

提供的COLAB鏈接將在此處包括。請記住,用圖像的實際路徑替換/uploads/....webp圖像路徑。

以上是使用JAX,亞麻和Optax的圖像分類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板