ホームページ > テクノロジー周辺機器 > AI > Jax、Flax、およびOptaxによる画像分類

Jax、Flax、およびOptaxによる画像分類

Jennifer Aniston
リリース: 2025-03-18 11:50:23
オリジナル
1009 人が閲覧しました

このチュートリアルでは、Jax、Flax、およびOptaxを使用したMNIST Digit分類のための畳み込みニューラルネットワーク(CNN)の構築、トレーニング、評価を示しています。環境のセットアップやデータの前処理から、モデルアーキテクチャ、トレーニングループの実装、メトリックの視覚化、最後にカスタム画像の予測まで、すべてをカバーします。このアプローチは、効率的でスケーラブルな深い学習のために、これらのライブラリの相乗的強さを強調しています。

学習目標:

  • 合理化されたニューラルネットワーク開発のために、Jax、Flax、およびOptaxの統合をマスターします。
  • Tensorflowデータセット(TFD)を使用して、プレアセスおよびロードデータセットを学習します。
  • 効果的な画像分類のためにCNNを実装します。
  • 主要なメトリックを使用してトレーニングの進捗状況を視覚化します(損失と精度)。
  • カスタム画像でモデルのパフォーマンスを評価します。

この記事は、Data Science Blogathonの一部です。

目次:

  • 学習目標
  • Jax、Flax、およびOptax Powerhouse
  • JAXセットアップ:インストールとインポート
  • MNISTデータ:読み込みと前処理
  • CNNの構築
  • モデル評価:メトリックと追跡
  • トレーニングループ
  • トレーニングと評価の実行
  • パフォーマンスの視覚化
  • カスタム画像で予測します
  • 結論
  • よくある質問

Jax、Flax、およびOptax Powerhouse:

効率的でスケーラブルな深い学習には、計算、モデル設計、最適化のための強力なツールが必要です。 Jax、Flax、およびOptaxはこれらのニーズをまとめて対処します。

Jax:数値コンピューティングの卓越性:

JAXは、numpyのようなインターフェイスを使用して高性能の数値計算を提供します。その主な機能には次のようなものがあります。

  • 自動分化(オートグラード):複雑な関数の楽な勾配計算。
  • ジャストインタイム(JIT)コンピレーション: CPU、GPU、およびTPUでのアクセラレーション実行。
  • ベクトル化: vmapを介した簡略化されたバッチ処理。
  • ハードウェアアクセラレーション: GPUおよびTPUのネイティブサポート。

亜麻:柔軟なニューラルネットワーク:

JAXベースのライブラリであるFlaxは、ニューラルネットワーク構造に対するユーザーフレンドリーで高度にカスタマイズ可能なアプローチを提供します。

  • ステートフルモジュール:簡素化されたパラメーターと州管理。
  • 簡潔なAPI: @nn.compactデコレータを使用した直感的なモデル定義。
  • 適応性:シンプルから複雑なものまで、多様なアーキテクチャに適しています。
  • シームレスなJax統合: Jaxの機能を簡単に活用します。

Optax:包括的な最適化:

Optaxは、勾配の取り扱いと最適化を合理化し、次のことを提供します。

  • オプティマイザーの品種: SGD、Adam、RMSPropを含む幅広いオプティマザー。
  • 勾配操作:クリッピング、スケーリング、および正規化のためのツール。
  • モジュラー設計:勾配変換とオプティマイザーの簡単な組み合わせ。

この組み合わせフレームワークは、効率的な深い学習モデル開発のための強力でモジュラーエコシステムを提供します。

Jax、Flax、およびOptaxによる画像分類

JAXセットアップ:インストールとインポート:

必要なライブラリをインストールする:

 !PIPインストール-Upgrade -Q PIP JAX JAXLIB FLAX OPTAX TENSORFLOW -DATASETS
ログイン後にコピー

必須ライブラリをインポートします:

 Jaxをインポートします
JAX.numpyをJNPとしてインポートします
亜麻からnnとしてリネンを輸入します
Flax.Training Import Train_stateから
Optaxをインポートします
npとしてnumpyをインポートします
tensorflow_datasetsをtfdsとしてインポートします
pltとしてmatplotlib.pyplotをインポートします
ログイン後にコピー

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、Flax、およびOptaxによる画像分類

CNNの構築:

私たちのCNNアーキテクチャ:

クラスCNN(nn.module):
  @nn.compact
  def __call __(self、x):
    x = nn.conv(feature = 32、kernel_size =(3、3))(x)
    x = nn.relu(x)
    x = nn.avg_pool(x、window_shape =(2、2)、strides =(2、2))
    x = nn.conv(feature = 64、kernel_size =(3、3))(x)
    x = nn.relu(x)
    x = nn.avg_pool(x、window_shape =(2、2)、strides =(2、2))
    x = x.reshape((x.shape [0]、-1))
    x = nn.dense(feature = 256)(x)
    x = nn.relu(x)
    x = nn.dense(feature = 10)(x)
    xを返します
ログイン後にコピー

これには、畳み込み層、プーリング層、平坦な層、密な層が含まれます。

モデル評価:メトリックと追跡:

損失と精度を計算するための関数を定義します。

 def compute_metrics(logits、labels):
  loss = jnp.mean(optax.softmax_cross_entropy(logits、jax.nn.one_hot(labels、num_classes = 10))))
  精度= jnp.mean(jnp.argmax(logits、-1)==ラベル)
  Metrics = {'loss':loss、 'quarty':精度}
  メトリックを返します

#...(train_stepとeval_step関数はほぼ同じままです)...
ログイン後にコピー

(TRAIN_STEPおよびEVAL_STEP関数は、元のコードと同様に、ここに含まれます。)

トレーニングループ:

トレーニングループは、モデルを繰り返し更新します。

 #...(train_epochとeval_model関数はほぼ同じままです)...
ログイン後にコピー

(TRAIN_EPOCHおよびEVAL_MODEL関数は、元のコードと同様に、ここに含まれます。)

トレーニングと評価の実行:

トレーニングと評価プロセスを実行します。

 #...(トレーニングと評価の実行コードはほぼ同じままです)...
ログイン後にコピー

(パラメーターの初期化、オプティマイザーのセットアップ、トレーニングループを含むトレーニングと評価の実行コードは、元のコードと同様にここに含まれます。)

パフォーマンスの視覚化:

Matplotlibを使用して、トレーニングとテストメトリックを視覚化します。

 #...(matplotlibプロットコードはほぼ同じままです)...
ログイン後にコピー

(元のコードと同様に、ここには、損失と精度を視覚化するためのMatplotlibプロットコードがここに含まれます。)

カスタム画像での予測:

このセクションでは、カスタム画像の予測を示しています(コードはオリジナルとほぼ同じままです)。

 #...(カスタム画像のアップロード、前処理、予測のコードはほとんど同じままです)...
ログイン後にコピー

結論:

このチュートリアルでは、CNNの構築とトレーニングのためのJax、Flax、およびOptaxの効率と柔軟性を紹介しました。 TFDSの単純化されたデータ処理とメトリックの視覚化の使用は、貴重な洞察を提供しました。カスタム画像でモデルをテストする機能は、その実用的な適用性を強調しています。

よくある質問:

(FAQはオリジナルとほぼ同じままです。)

提供されたコラブリンクはここに含まれます。 /uploads/....webpの画像パスを、画像への実際のパスに置き換えることを忘れないでください。

以上がJax、Flax、およびOptaxによる画像分類の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート