機械学習: TensorFlow 2.0 の 10 のヒント

機械学習: TensorFlow 2.0 の 10 のヒント

この記事では、TensorFlow 2.0 の 10 の機能について説明します。

[[326673]]

1(a). 入力パイプラインを構築するためのtf.data API

テンソルからパイプラインを構築します。

  1. > > >  データセット= tf .data.Dataset.from_tensor_slices([8, 3, 0, 8, 2, 1])
  2. > > > iter(データセット).next().numpy()
  3. 8

バッチとシャッフル:

  1. # シャッフル
  2. > > >  データセット= tf .data.Dataset.from_tensor_slices([8, 3, 0, 8, 2, 1]).shuffle(6)
  3. > > > iter(データセット).next().numpy()
  4. 0
  5. # バッチ
  6. > > >  データセット= tf .data.Dataset.from_tensor_slices([8, 3, 0, 8, 2, 1]).batch(2)
  7. > > > iter(データセット).next().numpy()
  8. 配列([8, 3], dtype = int32 )
  9. # シャッフルとバッチ
  10. > > >  データセット= tf .data.Dataset.from_tensor_slices([8, 3, 0, 8, 2, 1]).shuffle(6).batch(2)
  11. > > > iter(データセット).next().numpy()
  12. 配列([3, 0], dtype = int32 )

2 つのデータセットを圧縮します。

  1. > > >  データセット0 = tf .data.Dataset.from_tensor_slices([8, 3, 0, 8, 2, 1])
  2. > > >  データセット1 = tf .data.Dataset.from_tensor_slices([1, 2, 3, 4, 5, 6])
  3. > > >  データセット= tf .data.Dataset.zip((データセット0, データセット1))
  4. > > > iter(データセット).next()
  5. ( < tf.Tensor:   shape =()、 dtype = int32 numpy = 8 > < tf.Tensor:  形状= (), dtype = int32 numpy = 1 > )

外部関数のマッピング:

  1. def into_2(数値):
  2. 数値 * 2 を返す
  3. > > >  データセット= tf .data.Dataset.from_tensor_slices([8, 3, 0, 8, 2, 1]).map(into_2)
  4. > > > iter(データセット).next().numpy()
  5. 16

1(b). イメージデータジェネレータ

これは、tensorflow.keras API の最も優れた機能の 1 つです。 ImageDataGenerator は、バッチ処理と前処理中にデータセットのスライスとデータ拡張をリアルタイムで生成できます。

ジェネレーターを使用すると、ディレクトリまたはデータフレームから直接データ ストリームにアクセスできます。

ImageDataGenerator でのデータ拡張に関する誤解の 1 つは、既存のデータセットにさらにデータが追加されるというものです。これはデータ拡張の実際の定義ですが、ImageDataGenerator では、データセット内の画像はトレーニング中のさまざまなステップで動的に変換されるため、モデルはこれまで見たことのないノイズの多いデータでトレーニングできます。

  1. train_datagen =イメージデータジェネレータ(
  2. 再スケール= 1 ./255、
  3. せん断範囲= 0.2
  4. ズーム範囲= 0.2
  5. 水平反転= True  

ここでは、すべてのサンプルが(正規化のために)再スケーリングされ、他のパラメータは拡張のために使用されます。

  1. train_generator = train_datagen.flow_from_directory (
  2. 「データ/トレーニング」、
  3. ターゲットサイズ= (150, 150)、
  4. バッチサイズ= 32
  5. class_mode = 'バイナリ'  

リアルタイム データ ストリームのディレクトリを指定します。これはデータフレームを使用して実行することもできます。

  1. train_generator =データフレームからのフロー(
  2. データフレーム、
  3. x_col = 'ファイル名'
  4. y_col = 'クラス'
  5. class_mode = 'カテゴリ'
  6. バッチサイズ= 32  

x_col パラメータは画像への完全なパスを定義し、y_col パラメータは分類に使用するラベル列を定義します。

steps_per_epoch パラメータを指定する必要がありますが、実際には number_of_samples // batch_size です。

  1. モデル.フィット(
  2. 列車ジェネレータ、
  3. 検証データ= val_generator
  4. エポック= EPOCHS
  5. steps_per_epoch = (num_samples // batch_size)、
  6. 検証ステップ= (num_val_samples // バッチサイズ)

2. tf.image を使用したデータ拡張

データが不十分な場合は、データを変更して個別のデータ ポイントとして使用することが、より少ないデータでトレーニングを行う非常に効果的な方法です。

tf.image API には画像を変換するためのツールがあります。次の Python の例を参照してください。

  1. 反転= tf .image.flip_left_right(画像)
  2. 視覚化する(画像、反転)

  1. 飽和= tf .image.adjust_saturation(画像、5)
  2. 視覚化する(画像、飽和)


  1. 回転= tf .image.rot90(画像)
  2. 視覚化(画像、回転)


  1. 切り取られた= tf .image.central_crop(画像、 central_fraction = 0 .5)
  2. 視覚化(画像、切り抜き)

3. TensorFlowデータセット

  1. pip で tensorflow-datasets をインストールします

これは、Tensorflow によって収集されたよく知られたデータセットが含まれているため、非常に便利なライブラリです。

  1. tensorflow_datasets を tfds としてインポートする
  2. mnist_data = tfds.load ("mnist")
  3. mnist_train、 mnist_test = mnist_data ["train"]、mnist_data["test"]
  4. isinstance(mnist_train、tf.data.Dataset) をアサートする

tensorflow-datasets で利用可能なデータセットの詳細なリストは、ドキュメントのデータセット ページにあります。

オーディオ、画像、画像分類、オブジェクト検出、構造化、要約、テキスト、翻訳、ビデオはすべて tfds によって提供されるタイプです。

4. 転移学習に事前学習済みモデルを使用する

転移学習は機械学習の分野における新しいトレンドであり、TensorFlow は、目的のユースケースに合わせて簡単に拡張できる、ベンチマーク済みの事前トレーニング済みモデルを提供します。

  1. ベースモデル= tf .keras.applications.MobileNetV2(
  2. input_shape = IMG_SHAPE
  3. include_top = False
  4. 重み= 'imagenet'  

この base_model は、追加のレイヤーや異なるモデルを使用して簡単に拡張できます。のように:

  1. モデル= tf .keras.Sequential([
  2. ベースモデル、
  3. グローバル平均レイヤー、
  4. 予測レイヤー
  5. ])

tf.keras.applications の下にある他のモデルまたはモジュールの詳細なリストについては、ドキュメント ページを参照してください。

5. 推定値

推定器は TensorFlow の完全なモデルの高レベル表現であり、簡単にスケーリングして非同期的にトレーニングできるように設計されています。

組み込みの推定器は非常に高レベルのモデル抽象化を提供するため、モデルの複雑さを気にすることなく、モデルのトレーニングに直接集中できます。例えば:

  1. linear_est = tf.estimator.LinearClassifier (
  2. 機能列機能列=機能列
  3. 線形推定のトレーニング(train_input_fn)
  4. 結果= linear_est .evaluate(eval_input_fn)

TensorFlow には、LinearRegressor、BoostedTreesClassifier など、多くの組み込み推定器があります。見積もりもカスタマイズできます。

6. カスタムレイヤー

ニューラル ネットワークは多層ネットワークとして知られており、層はさまざまなタイプにすることができます。 TensorFlow には、多くの定義済みレイヤー (Dense、LSTM など) が含まれています。しかし、より複雑なアーキテクチャの場合、レイヤーのロジックはさらに複雑になる可能性があります。 TensorFlow では、tf.keras.layers.Layer クラスをサブクラス化することでカスタム レイヤーを構築できます。

  1. クラス CustomDense(tf.keras.layers.Layer):
  2. def __init__(self, num_outputs):
  3. super(CustomDense、self).__init__()
  4. 自己.num_outputs = num_outputs
  5.  
  6. def build(self, input_shape):
  7. 自己self.kernel = self.add_weight(
  8. "カーネル"、
  9. 形状= [int(入力形状[-1]),
  10. 自己.num_outputs]
  11.  
  12. def call(self, 入力):
  13. tf.matmul(入力、self.kernel) を返します。

カスタム レイヤーを実装する最良の方法は、tf.keras.Layer クラスを拡張することです。

  • __init__ は入力に関係なくすべての初期化を実行できます。
  • ビルドすると、入力テンソルの形状がわかり、残りの初期化を実行できます。
  • 呼び出して、順方向の計算を実行します。

カーネルの初期化は __init__ で実行できますが、ビルドで実行した方がよいでしょう。そうしないと、新しいレイヤーを作成するたびに input_shape を明示的に指定する必要があります。

7. カスタマイズされたトレーニング

tf.keras シーケンスおよびモデル API を使用すると、モデルのトレーニングが容易になります。ただし、複雑なモデルをトレーニングする場合は、ほとんどの場合、カスタム損失関数が使用されます。さらに、モデルのトレーニングもデフォルトと異なる場合があります (たとえば、異なるモデル コンポーネントに個別に勾配を適用するなど)。

TensorFlow の自動微分化は、勾配を効率的に計算するのに役立ちます。 Python の例は次のとおりです。

  1. def train(モデル、入力、出力、学習率):
  2. tf.GradientTape() を t として使用します:
  3. # モデル予測からの損失の計算
  4. current_loss = loss(出力、モデル(入力))
  5. # 得られた損失を持つ訓練可能な変数の勾配
  6. dW、 db = t.gradient (現在の損失、[モデル.W、モデル.b])
  7. # 重みにグラデーションを適用する
  8. モデル.W.assign_sub(学習率 * dW)
  9. model.b.assign_sub(学習率 * db)

このサイクルは複数のエポックで繰り返すことができ、ユースケースに応じて他のカスタマイズされた設定を使用することもできます。

8. チェックポイント

TensorFlow モデルの保存には 2 つの方法があります。

  • SavedModel: モデルの完全な状態とすべてのパラメータを保存します。
    1. model.save_weights('チェックポイント')
  • チェックポイント

チェックポイントは、機械学習モデルで使用されるすべてのパラメータの正確な値をキャプチャします。 Sequential API または Model API を使用して構築された機械学習モデルは、SavedModel 形式で簡単に保存できます。

ただし、カスタム モデルの場合はチェックポイントが必要です。

チェックポイントには、モデルによって定義された計算の説明は含まれていないため、通常はソース コードが利用可能な場合にのみ役立ちます。

チェックポイントを保存します:

  1. checkpoint_path = "save_path"
  2. # チェックポイントの定義
  3. ckpt = tf .train.Checkpoint(モデルモデル= モデル、オプティマイザーオプティマイザー= オプティマイザー)
  4. # CheckpointManager オブジェクトの作成
  5. ckpt_manager = tf .train.CheckpointManager(ckpt、checkpoint_path、 max_to_keep = 5 )
  6. # モデルの保存
  7. ckpt_manager.save()

チェックポイントをロードします:

TensorFlow は、ロードされたオブジェクトから開始して、名前付きエッジを持つ有向グラフをトラバースすることにより、変数をチェックポイント値に一致させます。

  1. ckpt_manager.latest_checkpointの場合:
  2. ckpt.restore(ckpt_manager.latest_checkpoint)

9. ケラスチューナー

これは TensorFlow のかなり新しい機能です。

  1. !pip keras-tuner をインストールします

ハイパーパラメータ チューニングは、機械学習モデルの構成を定義するパラメータを選択するプロセスです。これらは、特徴エンジニアリングと機械学習モデルのパフォーマンスを決定する要因です。

  1. # model_builderはモデルを構築して返す関数です
  2. チューナー= kt .ハイパーバンド(
  3. モデルビルダー、
  4. 目標= 'val_accuracy'
  5. 最大エポック= 10
  6. 係数= 3
  7. ディレクトリ= 'my_dir'
  8. プロジェクト名= 'intro_to_kt'  

HyperBand に加えて、BayesianOptimization と RandomSearch もチューニングに使用できます。

  1. チューナー.検索(
  2. 画像_train、ラベル_train、
  3. エポック= 10
  4. 検証データ= (img_test, label_test),
  5. コールバック= [ClearTrainingOutput()]
  6.  
  7. # 最適なハイパーパラメータを取得する
  8. best_hps = tuner.get_best_hyperparameters ( num_trials = 1 )[0]

次に、最適なハイパーパラメータを使用してモデルをトレーニングします。

  1. モデル=チューナー.hypermodel .build(best_hps)
  2. モデル.フィット(
  3. 画像_列車、
  4. ラベル_トレイン、
  5. エポック= 10
  6. 検証データ= (画像テスト、ラベルテスト)

10. 分散トレーニング

複数の GPU があり、複数の GPU にトレーニングを分散してトレーニングを最適化したい場合は、TensorFlow のさまざまな分散トレーニング戦略によって GPU の使用を最適化し、GPU 上でトレーニングを行うことができます。

tf.distribute.MirroredStrategy は最もよく使用される戦略です。どのように機能しますか?

  • すべての変数とモデル グラフがレプリカにコピーされます。
  • 入力はレプリカ全体に均等に分散されます。
  • 各レプリカは、受信した入力の損失と勾配を計算します。
  • 勾配は、すべてのレプリカを合計することによって同期されます。
  • 同期後、各レプリカ上の変数のコピーに対して同一の更新が行われます。
  1. 戦略= tf.distribute.MirroredStrategy ()
  2. strategy.scope() を使用する場合:
  3. モデル= tf .keras.Sequential([
  4. tf.keras.layers.Conv2D(
  5. 32, 3、アクティベーション= 'relu' 入力形状= (28, 28, 1)
  6. )、
  7. tf.keras.layers.MaxPooling2D()、
  8. tf.keras.layers.Flatten()、
  9. tf.keras.layers.Dense(64,アクティベーション= 'relu' )、
  10. tf.keras.layers.dense(10) の続きを読む
  11. ])
  12.  
  13. モデル.コンパイル(
  14. 損失= "sparse_categorical_crossentropy"
  15. オプティマイザー= "adam"
  16. メトリック= ['精度']

やっと

TensorFlow は、機械学習パイプラインのほぼすべてのコンポーネントを構築できるほど強力です。このチュートリアルの主な内容は、TensorFlow が提供するさまざまな API の紹介と、これらの API の使用方法に関するクイック ガイドです。

<<:  Verdict、2020年第1四半期のTwitterにおけるIoTトレンドトップ5を発表

>>:  GitHub のスター数は 10 万近くに達しています。インド人男性がすべての AI アルゴリズムを Python と Java で実装しました。

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

マイクロソフトはWindows 11の組み込みアプリにAI機能を導入すると報じられている。写真、スクリーンショット、描画などに新しい機能が追加される。

8月23日、マイクロソフトは過去1年間で人工知能の分野で大きな進歩を遂げており、同社の新製品のほぼ...

AI投資を最大限に活用するための6つのステップ

人工知能は、将来の発展にとって大きな破壊的技術の 1 つであるとよく考えられています。これにより、多...

必要なものを教えていただければ、当社のAIがコードを作成します

何をしたいのかを伝えるだけで、AI が自動的にコードを作成します。今、私たちはこの目標に一歩近づきま...

Google Bard「叙事詩」アップデート:カスタマイズされた中国語サービス、画像分析機能を公開

今年3月、Googleは生成AI「Bard」のベータ版のリリースを発表しました。当時、このバージョン...

人工知能と機械学習の違いを本当に理解していますか?

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

MapReduceアルゴリズムをわかりやすく説明する方法

Hackbright でメンターをしているときに、技術的な背景が限られている学生に MapReduc...

...

...

...

人工知能を活用して機密情報を保護する 5 つの方法

研究者たちは、人工知能技術が機密情報のセキュリティを確保するための非常に優れたツールであることを発見...

2022年の政府活動報告を聞いた後、人工知能業界が注目するべき点は以下のとおりです。

2022年全国人民代表大会と中国人民政治協商会議が開幕した。3月5日には2022年政府活動報告が発...

アジャイルプロジェクト管理における人工知能の 9 つのメリット

人工知能は、特にソフトウェア開発の効率性の向上において、ソフトウェア開発を改善・加速し、プロジェクト...

2018年に人工知能はどのように発展するでしょうか? 13人の専門家の予測を聞いてみよう

ウォール・ストリート・ジャーナル、フォーブス、フォーチュンなどの出版物は、2017 年を「AI の年...

...