1 つの記事で TensorFlow ディープラーニングをマスターする

1 つの記事で TensorFlow ディープラーニングをマスターする

[[200803]]

EnsorFlow ディープラーニングフレームワーク

Google はビッグデータとクラウドコンピューティングのリーダーであるだけでなく、機械学習とディープラーニングの分野でも豊富な経験を持っています。2015 年末には、ディープラーニング フレームワーク TensorFlow を社内向けにオープンソース化しました。

Caffe、Theano、Torch、MXNet などのフレームワークと比較して、TensorFlow は Github 上でフォークとスターの数が最も多く、グラフ分類、オーディオ処理、推奨システム、自然言語処理などのシナリオで幅広く応用されています。最近人気のKerasフレームワークは、デフォルトで最下層にTensorFlowを使用しています。有名なスタンフォード大学のCS231nコースでは、授業や課題のプログラミング言語としてTensorFlowを使用しています。国内外で多くのTensorFlowの本がすでに準備中または販売中です。AlphaGoの開発チームDeepmindも、ニューラルネットワークアプリケーションをTensorFlowに移行する予定です。これらすべてが、業界でのTensorFlowの人気を裏付けています。

TensorFlow は Github でソースコードを公開しただけでなく、論文「TensorFlow: 異機種分散システムでの大規模機械学習」でシステムフレームワークの設計と実装も紹介しました。テストされた 200 ノード規模のトレーニング クラスターは、他の分散型ディープラーニング フレームワークの追随を許しません。 Google はまた、論文「レコメンデーション システムのためのワイド & ディープ ラーニング」と「YouTube 動画レコメンデーション システム」で、Google Play App Store と YouTube 動画レコメンデーションのアルゴリズム モデルを紹介し、TensorFlow に基づくコード例を提供しました。TensorFlow を使用すれば、ImageNet や Kaggle のコンペティションで、誰でも最先端に近い優れた結果を得ることができます。

TensorFlow 入門から応用まで

TensorFlow の人気により、ディープラーニングの敷居がどんどん下がったと言っても過言ではありません。Python と機械学習の基本的な知識さえあれば、ニューラル ネットワーク モデルを使い始めるのは非常に簡単になります。 TensorFlow は、Python と C++ の 2 つのプログラミング言語をサポートしています。最も複雑な多層ニューラル ネットワーク モデルでも、Python で実装できます。ビジネスで他のプログラミング言語を使用している場合でも心配はいりません。また、クロス言語 gRPC または HTTP サービスを使用して、TensorFlow でトレーニングされたスマート モデルにアクセスすることもできます。

では、Python を使用して TensorFlow アプリケーションを作成するにはどうすればよいでしょうか? 始めるのはどれくらい難しいのでしょうか?

以下では、文字列を出力し、簡単な計算を実行する Hello World アプリケーションを作成します。

  1. # ライブラリをインポートする
  2. テンソルフローをtfとしてインポートする
  3.  
  4. # グラフを定義する
  5. hello_op = tf.constant( 'こんにちは、TensorFlow!' )
  6. a = tf.定数(10)
  7. b = tf.定数(32)
  8. compute_op = tf.add (a, b)を実行します。
  9.  
  10. #グラフを実行するセッションを定義する
  11. tf.Session()を sessとして使用:
  12. 印刷(sess.run(hello_op))
  13. 印刷(sess.run(compute_op))

このシンプルなコードから、TensorFlow が非常に使いやすいことがわかります。追加のサービスを開始せずに、Python 標準ライブラリを介してインポートできます。初めて TensorFlow に触れると、戸惑うかもしれません。このロジックは Python でも実装できますが、なぜ tf.constant() と tf.Session() を使用するのでしょうか。実際、TensorFlow は Graph と Session を使用して実行中のモデルとトレーニングを定義します。これは、この記事の後半で紹介する複雑なモデルと分散トレーニングに非常に役立ちます。

前回の Hello world アプリケーションにはトレーニング済みのモデルがありませんでした。次に、ロジスティック回帰の問題とモデルを紹介します。 numpy を使用して線形関係データのセットを構築し、TensorFlow によって実装された確率的勾配アルゴリズムを使用して、十分な時間のトレーニング後に関数の傾きと切片を自動的に解きます。

  1. テンソルフローをtfとしてインポートする
  2. numpyをnpとしてインポートする
  3.  
  4. #列車データを準備する
  5. 訓練_X = np.linspace(-1, 1, 100)
  6. train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.33 + 10
  7.  
  8. # モデルを定義する
  9. X = tf.placeholder(tf.float32)
  10. Y = tf.placeholder(tf.float32)
  11. w = tf.Variable(0.0,名前= "重量" )
  12. b = tf.Variable(0.0、名前= "バイアス" )
  13. 損失 = tf.square(Y - tf.matmul(X, w) - b)
  14. train_op = tf.train.GradientDescentOptimizer(0.01).minimize(損失)
  15.  
  16. #実行するセッションを作成する
  17. tf.Session()を sessとして使用:
  18. sess.run(tf.initialize_all_variables())
  19. エポック = 1
  20. iが範囲(10)内にある場合:
  21. zip(train_X, train_Y)内の(x, y)の場合:
  22. _, w_value, b_value = sess.run([train_op, w, b],
  23. feed_dict={X: x, Y: y})
  24. print( "エポック: {}、 w: {}、 b: {}" .format(epoch、 w_value、 b_value))
  25. エポック += 1

上記のコードは、tensorflow_examples プロジェクトにあります。トレーニング後、出力の傾き w は約 2、切片 b は約 10 であることがわかります。これは、構築したデータ間の相関と一致しています。TensorFlow コードには最小二乗法やその他のアルゴリズムは実装されておらず、コード ロジックを制御する if-else もありません。これは完全にデータ駆動型であり、勾配降下アルゴリズムに従って Loss 値を動的に調整することで学習されます。このように、他のデータセットに変更したり、画像分類などの他の分野の問題に変更したりしても、コードを修正することなく機械が自動的に学習することができます。これもニューラルネットワークとTensorFlowの力です。

  1. エポック: 1、w: -0.909195065498352、b: 9.612462043762207
  2. エポック: 2、w: 0.296161413192749、b: 10.418954849243164
  3. エポック: 3、w: 1.108984351158142、b: 10.283171653747559
  4. エポック: 4、w: 1.5482335090637207、b: 10.143315315246582
  5. エポック: 5、w: 1.7749555110931396、b: 10.063009262084961
  6. エポック: 6、w: 1.8906776905059814、b: 10.020986557006836
  7. エポック: 7、w: 1.9495772123336792、b: 9.999467849731445
  8. エポック: 8、w: 1.9795364141464233、b: 9.988500595092773
  9. エポック: 9、w: 1.994771122932434、b: 9.982922554016113
  10. エポック: 10、幅: 2.0025179386138916、幅: 9.980087280273438

以前のモデルには、w と b の 2 つの変数しかありませんでした。データが非線形関係にある場合、良い結果を得ることは困難です。そのため、TensorFlow が設計に重点を置いているディープラーニング モデルでもあるディープ ニューラル ネットワークを使用することをお勧めします。 Google が 2014 年に Inception モデルで ImageNet グローバル コンペティションに勝利したことは知られています。そのコードは TensorFlow に基づいて実装されています。以下は、より複雑なモデル定義コードです。

  1. conv2d(inputs, 32, [3, 3], stride=2, scope= 'conv0' ) # 149 x 149 x 32 end_points[ 'conv1' ] = ops.conv2d(end_points[ 'conv0' ], 32, [3, 3], scope= ' conv0 ' ) # 149 x 149 x 32 end_points[ 'conv1' ] = ops.conv2d(end_points[ 'conv0' ], 32, [3, 3], scope= 'conv0' ) # 149 x 149 x 32 end_points[ 'conv1' ] = ops.conv2d(end_points[ 'conv0' ], 32, [3, 3], scope= conv2d(end_points [ 'conv1']、 64 、[ 3、3 ]、padding = 'same ' scope = ' conv2' end_points [ ' pool1 ' ] 、80、[1、1 ] scope = ' conv3 ' ops.conv2d(end_points[ 'conv3' ], 192, [3, 3], scope= 'conv4' ) # 71 x 71 x 192 end_points[ 'pool2' ] = ops.max_pool(end_points[ 'conv4' ], [3, 3], stride=2, scope= 'pool2' ) # 35 x 35 x 192 net = end_points[ 'pool2' ]

TensorFlow がパッケージ化した完全接続ネットワーク、畳み込みニューラル ネットワーク、RNN、LSTM を使用すると、さまざまなネットワーク モデルを組み合わせることができ、Inception などの多層ニューラル ネットワークを実装するのはレゴを組み立てるのと同じくらい簡単です。ただし、最適化アルゴリズムの選択、TFRecord の生成、モデル ファイルのエクスポート、分散トレーニングのサポートには多くの詳細があります。次に、TensorFlow に関連するすべてのコアな使用スキルを 1 つの記事で紹介します。

TensorFlow コアの使用に関するヒント

TensorFlowのさまざまな使い方を紹介するために、deep_recommend_system(https://github.com/tobegit3hub/deep_recommend_system)を使用します。

このオープンソース プロジェクトは、TFRecords、QueueRunner、Checkpoint、TensorBoard、推論、GPU サポート、分散トレーニング、多層ニューラル ネットワーク モデルなどの機能を実装しています。また、Wide や Deep などのモデルを実装するように簡単に拡張でき、直接ダウンロードして実際のプロジェクト開発に使用できます。

1. トレーニングデータを準備する

一般的に、TensorFlow アプリケーション コードには、Graph の定義と Session の操作が含まれます。コードの量が多くない場合は、cancer_classifier.py ファイルなどの 1 つのファイルにカプセル化できます。トレーニングの前に、サンプル データとテスト データを準備する必要があります。通常、データ ファイルはスペースまたはカンマで区切られた CSV ファイルですが、TensorFlow では、QueuRunner と Coordinator によるマルチスレッド データ読み取りをサポートするバイナリ TFRecords 形式の使用を推奨しています。バッチ サイズとエポック パラメータを使用して、トレーニング中の単一バッチのサイズと、サンプル ファイルの反復トレーニング ラウンドの数を制御できます。 CSV ファイルを直接読み込む場合、次に読み込むデータのポインタをコード内に記録する必要があり、すべてのサンプルをメモリにロードできない場合には非常に不便です。

データ ディレクトリには、CSV と TFRecords 形式変換ツール generate_csv_tfrecords.py が用意されています。このスクリプトを参照することで、任意の形式の CSV ファイルを解析し、TensorFlow でサポートされている TFRecords 形式に変換できます。ビッグデータでもスモールデータでも、シンプルなスクリプトツールを使って TensorFlow に直接接続できます。また、このプロジェクトでは、API を呼び出して TFRecords ファイルの内容を直接読み取る print_csv_tfrecords.py スクリプトも提供しています。

  1. def generate_tfrecords(入力ファイル名、出力ファイル名):
  2. print( "{} を {} に変換し始めます" .format(input_filename, output_filename))
  3. ライター = tf.python_io.TFRecordWriter(出力ファイル名)
  4.  
  5. ライン入力 開く(input_filename, "r" ):
  6. データ = 行を分割します( ", " )
  7. ラベル = float (データ[9])
  8. 特徴 = [ float (i)データi場合[:9]]
  9.  
  10. 例 = tf.train.Example(features=tf.train.Features(feature={
  11. 「ラベル」 :
  12. tf.train.Feature(float_list=tf.train.FloatList(値=[ラベル]))、
  13. "特徴"
  14. tf.train.Feature(float_list=tf.train.FloatList(値=機能))、
  15. }))
  16. ライター.write(example.SerializeToString())
  17.  
  18. ライター.close ()
  19. print( "{} を {} に正常に変換しました" .format(input_filename,
  20. 出力ファイル名))

2. コマンドライン引数を受け入れる

TFRecords を使用すると、ニューラル ネットワーク モデルをトレーニングするためのコードを記述できます。ただし、ご存知のとおり、ディープラーニングには調整が必要なハイパーパラメータが多すぎます。最適化アルゴリズム、モデル レイヤー、さまざまなモデルを常に調整する必要があります。このとき、コマンド ライン パラメータを使用すると非常に便利です。

TensorFlow は最下層で python-gflags プロジェクトを使用し、それが tf.app.flags インターフェースにカプセル化されます。使い方は非常にシンプルで直感的です。実際のプロジェクトでは、特に後述する Cloud Machine Learning サービスでは、コマンドライン パラメータが事前に定義されているのが一般的で、パラメータによるハイパーパラメータのチューニングが簡素化されます。

  1. # ハイパーパラメータを定義する
  2. フラグ = tf.app.flags
  3. フラグ = flags.FLAGS
  4. flags.DEFINE_boolean( "enable_colored_log" , False , "色付きログを有効にする" )
  5. flags.DEFINE_string( "train_tfrecords_file" ,
  6. "./data/a8a/a8a_train.libsvm.tfrecords"
  7. 「列車の TFRecords ファイルの glob パターン」 )
  8. flags.DEFINE_string( "validate_tfrecords_file" ,
  9. "./data/a8a/a8a_test.libsvm.tfrecords"
  10. 「TFRecords ファイルを検証するための glob パターン」 )
  11. flags.DEFINE_integer( "feature_size" , 124, "フィーチャーサイズの数" )
  12. flags.DEFINE_integer( "label_size" , 2, "ラベルサイズの数" )
  13. flags.DEFINE_float( "learning_rate" , 0.01, "学習率" )
  14. flags.DEFINE_integer( "epoch_number" , 10, "トレーニングするエポックの数" )
  15. flags.DEFINE_integer( "batch_size" , 1024, "トレーニングのバッチサイズ" )
  16. flags.DEFINE_integer( "validate_batch_size" , 1024,
  17. 「検証のバッチサイズ
  18. flags.DEFINE_integer( "バッチスレッド番号" , 1,
  19. 「データを読み取るスレッドの数
  20. flags.DEFINE_integer( "min_after_dequeue" , ​​100,
  21. 「デキュー後の最小数
  22. flags.DEFINE_string( "checkpoint_path" , "./sparse_checkpoint/" ,
  23. 「チェックポイントの道
  24. flags.DEFINE_string( "output_path" , "./sparse_tensorboard/" ,
  25. 「テンソルボード イベント ファイルのパス」)
  26. flags.DEFINE_string( "model" , "dnn" , "dnn、lr、wide_and_deep をサポート" )
  27. flags.DEFINE_string( "model_network" , "128 32 8" , "モデルのニューラルネットワーク" )
  28. flags.DEFINE_boolean( "enable_bn" , False , "バッチ正規化を有効にするかどうか" )
  29. flags.DEFINE_float( "bn_epsilon" , 0.001, "バッチ正規化のイプシロン" )
  30. flags.DEFINE_boolean( "enable_dropout" , False , "ドロップアウトを有効にするかどうか" )
  31. flags.DEFINE_float( "dropout_keep_prob" , 0.5, "ドロップアウト保持確率" )
  32. flags.DEFINE_boolean( "enable_lr_decay" , False , "学習率の減衰を有効にする" )
  33. flags.DEFINE_float( "lr_decay_rate" , 0.96, "学習率の減衰率" )
  34. flags.DEFINE_string( "optimizer" , "adagrad" , "トレーニングするオプティマイザー" )
  35. flags.DEFINE_integer( "steps_to_validate" , 10,
  36. 「状態を検証して印刷する手順
  37. flags.DEFINE_string( "mode" , "train" , "train、export、inference をサポート" )
  38. flags.DEFINE_string( "saved_model_path" , "./sparse_saved_model/" ,
  39. 「保存されたモデルのパス」 )
  40. flags.DEFINE_string( "model_path" , "./sparse_model/" , "モデルのパス" )
  41. flags.DEFINE_integer( "model_version" , 1, "モデルのバージョン" )
  42. flags.DEFINE_string( "推論テストファイル" , "./data/a8a_test.libsvm" ,
  43. 「推論用テストファイル
  44. flags.DEFINE_string( "inference_result_file" , "./inference_result.txt" ,
  45. 「推論からの結果ファイル」 )

3. ニューラルネットワークモデルを定義する

データとパラメータを準備した後、最も重要なことはネットワーク モデルを定義することです。モデル パラメータの定義は、複数の変数を作成するだけの簡単なものから、tf.variable_scope() および tf.get_variables() インターフェイスを使用するなどの複雑なものまであります。各変数に一意の名前が付けられ、隠しノードとネットワーク層の数を簡単に変更できるようにするには、変数を定義するときに CPU のバインドに特に注意しながら、プロジェクト内のコードを参照することをお勧めします。TensorFlow はデフォルトで GPU を使用するため、パラメータの更新が遅くなる可能性があります。

  1. # モデルを定義する
  2. input_units = フィーチャーサイズ
  3. 隠し1ユニット = 10
  4. 隠し2ユニット = 10
  5. 隠し3_ユニット = 10
  6. 隠し4ユニット = 10
  7. 出力単位 = ラベルサイズ
  8.  
  9. def full_connect(入力、weights_shape、biases_shape):
  10. tf.device( '/gpu:0' )を使用する場合:
  11. 重み = tf.get_variable( "重み" , weights_shape,
  12. 初期化子 = tf.random_normal_initializer())
  13. バイアス = tf.get_variable( "バイアス" ,biases_shape,
  14. 初期化子 = tf.random_normal_initializer())
  15. tf.matmul(入力、重み) + バイアスを返す
  16.  
  17. full_connect_reluを定義します(入力、weights_shape、biases_shape):
  18. tf.nn.relu(full_connect(inputs, weights_shape,biases_shape))を返します
  19.  
  20. def deep_inference(入力):
  21. tf.variable_scope( "layer1" )を使用する場合:
  22. レイヤー = full_connect_relu(入力、[入力単位、隠し1単位]、
  23. [hidden1_units])
  24. tf.variable_scope( "layer2" )を使用する場合:
  25. レイヤー = full_connect_relu(入力、[hidden1_units、hidden2_units]、
  26. [hidden2_units])
  27. tf.variable_scope( "layer3" )を使用する場合:
  28. レイヤー = full_connect_relu(入力、[hidden2_units、hidden3_units]、
  29. [hidden3_units])
  30. tf.variable_scope( "layer4" )を使用する場合:
  31. レイヤー = full_connect_relu(入力、[hidden3_units、hidden4_units]、
  32. [hidden4_units])
  33. tf.variable_op_scope( "output" )を使用する場合:
  34. レイヤー = full_connect_relu(入力、[hidden4_units、output_units]、
  35. [出力単位])
  36. リターンレイヤー

上記のコードは実稼働環境でも非常に一般的であり、トレーニング、推論の実装、モデルの精度と AUC の検証に使用されます。プロジェクトでは、このコードに基づいて、Google Play App Storeのレコメンデーション業務で広く使用されているワイド&ディープモデルも実装しました。これは、従来のロジスティック回帰モデルとディープラーニングニューラルネットワークモデルを有機的に組み合わせたものであり、一般的なレコメンデーションシステムにも適しています。

4. 異なる最適化アルゴリズムを使用する

ネットワーク モデルを定義した後、モデル パラメータを最適化するためにどのオプティマイザーを使用するかを考える必要があります。Sgd、Rmsprop、Adagrad、Ftrl のどれを選択すればよいでしょうか。さまざまなシナリオやデータ セットに対して決まった答えはありません。最善の方法は実践することです。上記で定義したコマンド ライン パラメータを使用すると、さまざまな最適化アルゴリズムを使用してモデルを簡単にトレーニングできます。

  1. def get_optimizer(optimizer、learning_rate):logging.info( "optimizer:{}" .format(optionizer))if optimizer == " sgd" tf.gradient.centoptimizer(Learning_rate)elifizer == "adadelta" tf.train.adagradoptimizer (Learning_rate)elif optimizer == " adam" tf.train.adamoptimizer Learning_rate)elif optimizer == "ftrl" tf.train.ftrloptimizer(Learning_rate)elif elif amplopまたは " Unking Optimizer、exit now" )exit 1

実際の運用では、最適化アルゴリズムによってトレーニング結果とトレーニング速度に大きな違いがあります。ネットワークパラメータの過剰最適化は、他の最適化アルゴリズムを使用する場合ほど効果的ではない可能性があります。したがって、適切な最適化アルゴリズムを選択することも、ハイパーパラメータのチューニングにおいて非常に重要なステップです。このロジックを TensorFlow コードに追加することで、対応する機能も適切に実装できます。

5. オンライン学習と継続学習

多くの機械学習ベンダーは、自社製品がオンライン学習をサポートしていると主張しています。実際、これはオンライン データによるモデルの継続的な最適化をサポートするという TensorFlow の基本機能にすぎません。 TensorFlow は、tf.train.Saver() を通じてモデルを保存し、モデル パラメータを復元できます。Python を使用してモデル ファイルをロードした後、オンラインで要求されたデータを継続的に受け入れ、モデル パラメータを更新し、次の最適化またはオンライン サービスのために Saver を通じてチェックポイントとして保存できます。

  1. #グラフを実行するためのセッションを作成する
  2. tf.Session()を sessとして使用:
  3. summary_op = tf.merge_all_summaries()
  4. 書き込み = tf.train.SummaryWriter(tensorboard_dir, sess.graph)
  5. セッションを実行します(init_op)
  6. sess.run(tf.initialize_local_variables())
  7.  
  8. モード == "train"の場合 またはmode == "train_from_scratch" :
  9. モード!= "train_from_scratch"の場合:
  10. ckpt = tf.train.get_checkpoint_state(チェックポイントディレクトリ)
  11. ckptおよびckpt.model_checkpoint_path の場合:
  12. print( "モデルからトレーニングを続行します {}" .format(ckpt.model_checkpoint_path))
  13. saver.restore(sess、ckpt.model_checkpoint_path) を復元します。

継続的なトレーニングとは、トレーニングが中断された場合でも、前回のトレーニングの結果に基づいてモデルを最適化できることを意味します。TensorFlow では、これも Saver とチェックポイント ファイルを通じて実現されます。 deep_recommend_system プロジェクトでは、デフォルトで前回のトレーニングからモデルの最適化を継続できます。また、コマンドラインで train_from_scratch を指定することもできます。トレーニングプロセスが中断されることを心配する必要がないだけでなく、トレーニングと推論をしながらオンラインサービスを提供することもできます。

6. TensorFlowを使用してパラメータを最適化する

TensorFlow には、強力なグラフィカル ツールである TensorBoard も統合されています。通常は、必要なトレーニング インジケーターをコードに追加するだけで、TensorBoard がこれらのパラメーターに基づいてグラフを自動的に描画するため、モデル トレーニングの状態を視覚的に把握できます。

  1. tf.scalar_summary('損失', 損失)
  2. tf.scalar_summary('精度', 精度)
  3. tf.scalar_summary('auc', auc_op)

7. 分散TensorFlowアプリケーション

最後に、TensorFlow の強力な分散コンピューティング機能を紹介する必要があります。Caffe などの従来のコンピューティング フレームワークは、分散トレーニングをネイティブにサポートしておらず、データの量が膨大な場合にマシンを追加してスケールアウトできないことがよくあります。 TensorFlow は、Google のさまざまな事業から PB レベルのデータを運びます。分散コンピューティングのニーズは設計当初から考慮されており、ニューラル ネットワーク モデルの分散コンピューティングは、gRPC や Protobuf などの高性能ライブラリを通じて実装されています。

分散 TensorFlow アプリケーションを実装するのは難しくありません。グラフを構築するためのコードは、スタンドアロン バージョンと同じです。分散 cancer_classifier.py の例を実装しました。次のコマンドを使用して、マルチ ps マルチワーカー トレーニング クラスターを起動できます。

  1. cancer_classifier.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=ps --task_index=0  
  2.  
  3. cancer_classifier.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=ps --task_index=1  
  4.  
  5. cancer_classifier.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=ワーカー --task_index=0  
  6.  
  7. cancer_classifier.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=ワーカー --task_index=1

コードを詳しく読む前に、分散 TensorFlow における ps、ワーカー、グラフ内、グラフ間、同期トレーニング、非同期トレーニングの概念を理解する必要があります。まず、ps はトレーニング クラスター全体のパラメータ サーバーであり、モデルの変数を保存します。ワーカーはモデルの勾配を計算するノードであり、得られた勾配ベクトルは ps に渡され、モデルを更新します。イングラフはビトウィーングラフに対応しますが、どちらも同期トレーニングと非同期トレーニングを実現できます。イングラフとは、クラスター全体を 1 つのクライアントで構築し、クライアントがグラフをクラスターに送信することを意味します。他のワーカーは、勾配計算タスクの処理のみを担当します。ビトウィーングラフとは、クラスター内の複数のワーカーが複数のグラフを作成できることを意味しますが、ワーカーは同じコードを実行するため、構築されたグラフも同じであり、パラメーターは同じ PS に保存され、同じモデルのトレーニングが保証されます。このようにして、複数のワーカーがグラフを構築し、トレーニング データを読み取ることができるため、ビッグ データのシナリオに適しています。同期トレーニングと非同期トレーニングの違いは、同期トレーニングでは勾配が更新されるたびにブロックしてすべてのワーカーの結果を待つ必要があるのに対し、非同期トレーニングではブロックされず、トレーニング効率が高くなることです。非同期トレーニングは、通常、ビッグデータや分散シナリオで使用されます。

8. クラウド機械学習

TensorFlow に関するすべてのコンテンツを紹介しました。注意深いネットユーザーなら、TensorFlow は強力ですが、本質的にはライブラリであることに気付いたかもしれません。TensorFlow アプリケーション コードを記述するだけでなく、ユーザーは物理マシンでサービスを起動し、トレーニング データとモデル ファイルのディレクトリを手動で指定する必要があります。メンテナンス コストは比較的高く、マシン間で共有することはできません。

ビッグデータ処理とリソース スケジューリング業界を見ると、Hadoop エコシステムが業界標準になっています。データは MapReduce または Spark インターフェイスを介して処理されます。ユーザーは API を介してタスクを送信し、Yarn が統合されたリソース割り当てとスケジューリングを実行します。これにより、分散コンピューティングが可能になるだけでなく、リソース共有と統合されたスケジューリング プラットフォームを通じてサーバーの使用率が大幅に向上します。残念ながら、TensorFlow はディープラーニングフレームワークとして定義されており、クラスターリソース管理などの機能は含まれていません。しかし、TensorFlow をオープンソース化した後、Google はすぐに Google Cloud ML サービスを発表しました。私たちはアルファ版から Cloud ML の早期ユーザーであり、クラウドでのディープラーニングトレーニングの利便性を深く体験してきました。 Google Cloud ML サービスを使用すると、TensorFlow アプリケーション コードを直接クラウドに送信して実行したり、トレーニング済みのモデルをクラウドに直接デプロイして API から直接アクセスしたりすることができます。TensorFlow の優れた設計のおかげで、Kubernetes と TensorFlow サービングに基づく Cloud Machine Learning サービスを実装できました。アーキテクチャ設計と使用インターフェースは、Google Cloud ML のものと似ています。

TensorFlow は優れたディープラーニング フレームワークです。個人の開発者、研究者、企業にとって投資する価値のあるテクノロジーです。クラウド マシン ラーニングは、環境の初期化、トレーニング タスクの管理、ニューラル ネットワーク モデルのオンライン サービスにおけるユーザーの管理とスケジュールの問題を解決できます。現在、Google Cloud ML はハイパーパラメータの自動チューニングをすでにサポートしており、パラメータチューニングは将来的には技術的な問題ではなく計算上の問題になるでしょう。一部の開発者が TensorFlow の代わりに MXNet などを使用するとしても、私たちはより多くのディープラーニング ユーザーやプラットフォーム開発者とコミュニケーションをとり、コミュニティの発展を促進していきたいと考えています。

要約する

まとめると、この記事では主に TensorFlow ディープラーニング フレームワークの学習と応用について紹介しました。deep_recommend_system プロジェクトを通じて、TensorFlow を使用する際の次の 8 つのコア ポイントを紹介します。試用とフィードバックのためにソース コードをダウンロードすることもできます。

<<:  分散機械学習プラットフォームの比較: Spark、PMLS、TensorFlow、MXNet

>>:  ディープラーニングを自分の仕事にどのように統合しますか?

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

推薦する

RNN と LSTM は弱いです!注目モデルは王様!

リカレント ニューラル ネットワーク (RNN)、長期短期記憶 (LSTM)、これらの人気のニューラ...

マイクロソフトの動画編集ツールClipchampには、AI自動作成やAIテキスト読み上げなどの新機能が搭載されている。

IT Homeは12月12日、マイクロソフトが2021年にウェブベースの使いやすいビデオ編集ツール...

生成AI投資分析:テック大手はベンチャーキャピタルよりも積極的であり、コンピューティングパワーの支出は起業のハードルを押し上げる

ジェネレーティブ AI スタートアップの需要は高く、テクノロジー大手からの CVC および VC 資...

マイクロソフトが人工知能の小規模スタートアップBonsaiを買収

海外メディアの報道によると、マイクロソフトは水曜日、小規模な人工知能スタートアップ企業であるボンサイ...

...

2021年のAIチップの在庫:「2つの壁」を破り、ストレージとコンピューティングを統合することがトレンドに

​​著者: 張傑【51CTO.comオリジナル記事】 AI チップはなぜ必要なのでしょうか?新しいイ...

OpenAIの最強のライバルトレーニングAIがLLMブラックボックスを分解し、ビッグモデルの「魂」を予期せず垣間見る

大規模なモデルの「ブラックボックス」を解体するために、人類解釈可能性チームは、新しいモデルをトレーニ...

ジオメトリテクスチャ再構築における新しい SOTA!浙江大学がSIFUを提案:一枚の画像で高品質の3D人体モデルを再構築可能

AR、VR、3Dプリント、シーン構築、映画制作など多くの分野において、衣服を着た人体の高品質な3Dモ...

...

Baidu が DuerOS 3.0 会話型 AI システムをリリース: Bluetooth デバイスに会話機能を持たせる

昨年のAI開発者会議で、百度は「人工知能時代のAndroidシステム」であると主張する会話型人工知能...

...

...

OpenAIはChatGPTを軍事目的で使用する予定か?国防総省との協力禁止が解除、元グーグルCEO「AIは核爆弾になる」

AIの兵器化?大規模言語モデルの誕生以来、人々はその潜在的な影響について議論し続けています。しかし...