ホームページ >テクノロジー周辺機器 >AI >Jax、Flax、およびOptaxによる画像分類
このチュートリアルでは、Jax、Flax、およびOptaxを使用したMNIST Digit分類のための畳み込みニューラルネットワーク(CNN)の構築、トレーニング、評価を示しています。環境のセットアップやデータの前処理から、モデルアーキテクチャ、トレーニングループの実装、メトリックの視覚化、最後にカスタム画像の予測まで、すべてをカバーします。このアプローチは、効率的でスケーラブルな深い学習のために、これらのライブラリの相乗的強さを強調しています。
学習目標:
この記事は、Data Science Blogathonの一部です。
目次:
Jax、Flax、およびOptax Powerhouse:
効率的でスケーラブルな深い学習には、計算、モデル設計、最適化のための強力なツールが必要です。 Jax、Flax、およびOptaxはこれらのニーズをまとめて対処します。
Jax:数値コンピューティングの卓越性:
JAXは、numpyのようなインターフェイスを使用して高性能の数値計算を提供します。その主な機能には次のようなものがあります。
vmap
を介した簡略化されたバッチ処理。亜麻:柔軟なニューラルネットワーク:
JAXベースのライブラリであるFlaxは、ニューラルネットワーク構造に対するユーザーフレンドリーで高度にカスタマイズ可能なアプローチを提供します。
@nn.compact
デコレータを使用した直感的なモデル定義。Optax:包括的な最適化:
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]に正規化されます。
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 サイトの他の関連記事を参照してください。