高度な機械学習ノート 1 | TensorFlow のインストールと開始方法

高度な機械学習ノート 1 | TensorFlow のインストールと開始方法

[[185581]]

導入

TensorFlow は、DistBelief に基づいて Google が開発した第 2 世代の人工知能学習システムです。音声認識や画像認識など、多くの機械学習のディープラーニング分野で広く使用されています。その名前はその動作原理に由来しています。 Tensor は N 次元配列を意味し、Flow はデータフローグラフに基づく計算を意味します。TensorFlow は、グラフの一方の端からもう一方の端に流れるテンソルの計算プロセスを表します。これは、複雑なデータ構造を分析および処理するために人工知能ニューラル ネットワークに転送するプロセスです。

TensorFlow は完全にオープンソースであり、誰でも使用できます。スマートフォンのような小型デバイスからデータセンター内の数千台のサーバーまで、さまざまなデバイスで動作します。

「上級機械学習ノート」シリーズでは、TensorFlow システムの技術的な実践をゼロから浅いところから深いところまで深く分析し、皆さんと一緒に機械学習の高度な道を歩んでいきます。

CUDA と TensorFlow のインストール

過去の経験によれば、 fq ツールがあれば、TensorFlow は 1 つの pip コマンドだけでインストールできます。 fq ツールがない場合は、壁の内側で他の人が共有しているアドレスを探してください。最も落とし穴が多いのは、GPUのサポートをインストールすることです。Nvidiaのcudaを事前にインストールする必要があります。ここには多くの落とし穴があります。cudaをインストールするには、ubuntu debインストール方法を使用することをお勧めします。run.shメソッドは常に多くの問題があるように感じます。cudaの具体的なインストールを参照してください。 リンク先の tensorflow バージョンは古いバージョンですので、ご注意ください。現在 tensorflow の公式要件は cuda7.5+cudnnV4 です。インストールの際はこの点にご注意ください。

こんにちは世界

  1. テンソルフローをtfとしてインポートする
  2. hello = tf.constant( 'こんにちは、TensorFlow!' )
  3. sess = tf.Session()
  4. sess.run(hello) を印刷します。

まず、tf.constant を通じて定数を作成し、次に Tensorflow セッションを開始し、sess の run メソッドを呼び出してグラフ全体を開始します。

次に簡単な計算をします。

  1. テンソルフローをtfとしてインポートする
  2. a = tf.定数(2)
  3. b = tf.定数(3)
  4. tf.Session()を sessとして使用:
  5. 「a=2, b=3」と印刷する 
  6. print "定数による加算: %i" % sess.run(a+b)
  7. 「定数による乗算: %i」を印刷% sess.run(a*b)
  8. #出力 
  9. a=2、b=3
  10. 定数による加算: 5
  11. 定数による乗算: 6

次に、Tensorflow のプレースホルダーを使用して、同様の計算用の変数を定義します。

プレースホルダーの使用については、https://www.tensorflow.org/versions/r0.8/api_docs/python/io_ops.html#placeholder を参照してください。

  1. テンソルフローをtfとしてインポートする
  2. a = tf.プレースホルダー(tf.int16)
  3. b = tf.プレースホルダー(tf.int16)
  4. 追加= tf.add (a, b )
  5. mul = tf.mul(a, b)
  6. tf.Session()を sessとして使用:
  7. #変数入力すべての操作を実行する
  8. print "変数を使用した加算: %i" % sess.run( add , feed_dict={a: 2, b: 3})
  9. 「変数を使用した乗算: %i」を出力します% sess.run(mul, feed_dict={a: 2, b: 3})
  10. #出力:
  11. 変数を使った加算: 5
  12. 変数を使った乗算: 6
  13. 行列1 = tf.定数([[3., 3.]])
  14. 行列2 = tf.定数([[2.],[2.]])
  15. tf.Session()を sessとして使用:
  16. 結果 = sess.run(製品)
  17. 結果を印刷

線形回帰

以下のコードは GitHub から取得しました - aymericdamien/TensorFlow-Examples: 初心者向けの TensorFlow チュートリアルと例、学習目的のみ

  1. アクティベーション = tf.add ( tf.mul(X, W), b)
  2.  
  3. # 二乗誤差を最小化する
  4. コスト = tf.reduce_sum(tf.pow(activation-Y, 2))/(2*n_samples) #L2損失
  5. optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #勾配降下法
  6.  
  7. # 変数の初期化
  8. 初期化 = tf.initialize_all_variables()
  9.  
  10. # グラフを起動する
  11. tf.Session()を sessとして使用:
  12. セッションの実行(初期化)
  13.  
  14. #すべてのトレーニングデータを適合する
  15. 範囲内のエポックの場合(training_epochs):
  16. zip(train_X, train_Y)内の(x, y)の場合:
  17. sess.run(オプティマイザ、feed_dict={X: x, Y: y})
  18.  
  19. #エポックステップごとにログを表示する
  20. エポック% display_step == 0の場合:
  21. 「エポック:」 '%04d' % (エポック+1)、 "cost=" 、\ を印刷します
  22. "{:.9f}" .format(sess.run(コスト、feed_dict={X: train_X, Y:train_Y})), \
  23. "W=" 、 sess.run(W)、 "b=" 、 sess.run(b)
  24.  
  25. 「最適化が完了しました!」と印刷します。  
  26. 「cost=」を印刷します。sess.run(cost, feed_dict={X: train_X, Y: train_Y}), \
  27. "W=" 、 sess.run(W)、 "b=" 、 sess.run(b)
  28.  
  29. #グラフィック表示
  30. plt.plot(train_X, train_Y, 'ro' , label= '元のデータ' )
  31. plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label= '適合線' )
  32. plt.凡例()
  33. plt.show()

ロジスティック回帰

  1. テンソルフローをtfとしてインポートする
  2. # MINSTデータをインポート
  3. tensorflow.examples.tutorials.mnistからinput_dataをインポートします
  4. mnist = input_data.read_data_sets( "/tmp/data/" 、 one_hot= True )
  5.  
  6. # パラメータ
  7. 学習率 = 0.01
  8. トレーニングエポック = 25
  9. バッチサイズ = 100
  10. 表示ステップ = 1
  11.  
  12. # tf グラフ入力
  13. x = tf.placeholder(tf.float32, [None, 784]) #形状 28*28=784mnist データ画像
  14. y = tf.placeholder(tf.float32, [None, 10]) # 0~9の数字の認識 => 10クラス
  15.  
  16. #モデルの重みを設定する
  17. W = tf.Variable(tf.zeros([784, 10]))
  18. b = tf.Variable(tf.zeros([10]))
  19.  
  20. # モデルの構築
  21. pred = tf.nn.softmax(tf.matmul(x, W) + b) # ソフトマックス
  22.  
  23. #クロスエントロピーを使用してエラーを最小化する
  24. コスト = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))
  25. # 勾配降下法
  26. オプティマイザー = tf.train.GradientDescentOptimizer(learning_rate).minimize(コスト)
  27.  
  28. # 変数の初期化
  29. 初期化 = tf.initialize_all_variables()
  30.  
  31. # グラフを起動する
  32. tf.Session()を sessとして使用:
  33. セッションの実行(初期化)
  34.  
  35. # トレーニングサイクル
  36. 範囲内のエポックの場合(training_epochs):
  37. 平均コスト = 0。
  38. total_batch = int (mnist.train.num_examples/batch_size)
  39. #すべてのバッチをループする
  40. iが範囲(total_batch)の場合:
  41. batch_xs、batch_ys = mnist.train.next_batch(batch_size)
  42. # 最適化オペレーション(バックプロパゲーション)コストオペレーション(損失値を取得するため)を実行します
  43. _, c = sess.run([オプティマイザ, コスト], feed_dict={x: batch_xs,
  44. y: batch_ys})
  45. # 平均損失を計算する
  46. 平均コスト += c / 合計バッチ
  47. # エポックステップごとにログを表示する
  48. (エポック+1) % display_step == 0の場合:
  49. 「エポック:」 '%04d' % (エポック+1)、 「コスト=」 "{:.9f}" .format(avg_cost)を出力します。
  50.  
  51. 「最適化が完了しました!」と印刷します。  
  52.  
  53. # テストモデル
  54. 正しい予測 = tf.equal(tf.argmax(予測, 1), tf.argmax(y, 1))
  55. # 精度を計算する
  56. 精度 = tf.reduce_mean( tf.cast (correct_prediction, tf.float32))
  57. 「精度:」を印刷します。accuracy.eval({x: mnist.test.images, y: mnist.test.labels})
  58.  
  59. # 結果 :
  60. エポック: 0001 コスト = 29.860467369
  61. エポック: 0002 コスト = 22.001451784
  62. エポック: 0003 コスト = 21.019925554
  63. エポック: 0004 コスト = 20.561320320
  64. エポック: 0005 コスト = 20.109135756
  65. エポック: 0006 コスト = 19.927862290
  66. エポック: 0007 コスト = 19.548687116
  67. エポック: 0008 コスト = 19.429119071
  68. エポック: 0009 コスト = 19.397068211
  69. エポック: 0010 コスト = 19.180813479
  70. エポック: 0011 コスト = 19.026808132
  71. エポック: 0012 コスト = 19.057875510
  72. エポック: 0013 コスト = 19.009575057
  73. エポック: 0014 コスト = 18.873240641
  74. エポック: 0015 コスト = 18.718575359
  75. エポック: 0016 コスト = 18.718761925
  76. エポック: 0017 コスト = 18.673640560
  77. エポック: 0018 コスト = 18.562128253
  78. エポック: 0019 コスト = 18.458205289
  79. エポック: 0020 コスト = 18.538211225
  80. エポック: 0021 コスト = 18.443384213
  81. エポック: 0022 コスト = 18.428727668
  82. エポック: 0023 コスト = 18.304270616
  83. エポック: 0024 コスト = 18.323529782
  84. エポック: 0025 コスト = 18.247192113
  85. 最適化が完了しました!
  86. (10000, 784)
  87. 精度 0.9206

ここでちょっとしたエピソードを。ノートブックで ipython ノートブックを開くと、GPU リソースを占有しています。以前から常に開いているノートブックがあり、それが GPU リソースを占有していたため、Accuracy を計算するときに「InternalError: Dst tensor is not initialized.」が発生していた可能性があります。その後、github でこの問題を見つけました: InternalError: Dst tensor is not initialized. GPU メモリに関連する問題であることは間違いないので、tf.device('/cpu:0') を追加して Accuracy ステップを CPU にプルして計算するようにしましたが、OOM 問題が再び発生しました。nvidia-smi を実行すると、python スクリプトが 3g を超えるビデオ メモリを占有していることがわかりました。それを強制終了して復元しました。以前は、10000*784 の float がビデオ メモリをバーストさせる可能性があると文句を言っていましたが、それは自分の問題であることが判明しました。

ここで、ロジスティック回帰モデルは多変量分類に使用されるソフトマックス関数であり、大まかに言えば、10 の中から *** 予測確率 *** を最終分類として選択することを意味します。

実際、基本的な tensorflow を説明するのは簡単ではありません。文法コースについては、基本的なドキュメントを読むことができます。後で、古典的で興味深い tensorflow コード アプリケーションをいくつか見つけて見ていきます。結局のところ、「コードを見せてください」というのは、プログラマーが持つべき姿勢です。

[この記事は51CTOコラムニスト「Big Uのテクノロジー教室」によるオリジナル記事です。転載については、WeChatパブリックアカウント(ucloud2012)を通じて著者にご連絡ください]

この著者の他の記事を読むにはここをクリックしてください

<<:  Lisp言語はどうやって生まれたのか?LISPとAIは幼なじみ

>>:  ホーキング:人工知能やその他の技術の発展は人類を滅ぼすかもしれない

推薦する

...

科学者たちは、より信頼性の高い予測を達成するために人工知能が「近道」をすることを避ける方法を研究している。

新しいアプローチにより、機械学習モデルはタスクを学習する際により多くのデータに焦点を当てるようになり...

臨床研究における人工知能と機械学習の活用の機会をいかに捉えるか

製薬業界の専門家は、人工知能(AI)が2021年に業界で最も破壊的な技術になると考えています。臨床開...

チップ設計の極めて高いハードルがAIによって「打ち破られる」

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

...

韓国はLK-99の室温超伝導は証明できないと信じており、国内チームは拡張された材料が魔法のような特性を持っていると信じている

韓国でセンセーショナルな「常温超伝導」事件が最近終息したようだ。韓国超伝導低温学会の検証委員会は最近...

海外メディア:ロボットは人間の生活を変え、雇用や結婚のパターンに影響を与える

[[442070]]レファレンス・ニュース・ネットワークは12月26日、ドイツのフランクフルター・ア...

2020年の世界産業用ロボット業界の現在の市場状況と競争環境の分析

2020年の世界産業用ロボット産業の現状と競争環境の分析:アジア太平洋地域が世界最大の市場に1. 世...

...

人間の農業の将来は主にロボットに依存することになるのでしょうか?基本的に人間の介入は必要ありません

予想外のことが起こらなければ、人類は人工知能の時代へと急速に進んでいくだろう。ウェイター、宅配便業者...

目に見えないものが見えるようになる!メタマテリアルとAIが融合し音像を解読

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

毎日のアルゴリズム: 二分木のレベルトラバーサル

[[423982]]バイナリ ツリーが与えられた場合、そのノード値のボトムアップ レベルのトラバーサ...

テンセントクラウドのフルリンクAI開発者サービスシステムがAIと産業の融合を加速

12月15日、第1回テンセントクラウド+コミュニティ開発者会議で、テンセントクラウドの副社長である王...

AIスタートアップが成熟するための4つの段階と懸念事項

[[281520]] [51CTO.com クイック翻訳] 現時点では、「人工知能企業」が何であるか...