TensorFlow実際の研究ノート(A)

1.1 TensorFlowの概要

TensorFlow Googleは、分散機械学習システムの第二世代、2015年11月中のGitHub上でオープンソース、および2016年4月に分散バージョンを補完し、プレビューの1.0バージョンの2017年1月リリース、APIインタフェースの傾向であります安定インチ 現在TensorFlowは急速な発展の繰り返しではまだです。
    TensorFlow公式ウェブサイトのアドレス:www.tensorflow.org
    GitHubのURL:github.com/tensorflow/tensorflow
    モデル倉庫アドレスは:github.com/tensorflow/models
    TensorFlowは、機械学習アルゴリズムであるインターフェースが、また、機械学習アルゴリズムのフレームワークの実装を実現します。これは、フロントエンドのPython、C ++、ゴー、Javaや他の開発言語、バックエンドC ++、CUDAや他の言語をサポートしています。TensorFlowアルゴリズムの実装は簡単なAndroidの携帯電話、iPhone、通常のCPUサーバ、さらには大規模なGPUクラスタとして異種システムの数に移植することができます。深い学習アルゴリズムを実行することに加えて、TensorFlowは、線形回帰、ロジスティック回帰、ランダムな森林を含む他の多くのアルゴリズムを使用することができます。

プログラミングモデルに1.2 TensorFlow紹介

1.2.1コア・コンセプト

    TensorFlow計算は各算術演算(オペレーション)はノード(ノード)として動作する前記有向グラフ(有向グラフ)として表される、または図の算出(計算グラフ)で言及されてもよい、ノード間のエッジ接続と称される(エッジ)。この演算処理は、ユーザが操作または計算サイクル枝図の条件を制御することができ、また、状態を維持し、更新する責任があり、算出マップデータに記載されています。図の計算各ノードは、入力と出力の任意の数を有することができ、各ノードが演算を記述することができる、ノードは、算術演算(インスタンス)をインスタンス化することができます。図辺の流れの計算に(フロー)データは、そうTensorFlow命名テンソル(テンソル)と呼ばれます。テンソルデータタイプが予め定義することができると、図の推定演算の構造に応じて得ることができます。以下は、Pythonと、実行中の計算グラフの設計例です。

import tensorflow as tf
b = tf.Variable(tf.zeros([100])) #生成100维的向量,初始化为0
w = tf.Variable(tf.random_uniform([784,100],-1,1)) #生成784*100的随机矩阵W
x = tf.placeholder(name = "x") #输入的Placeholder
relu = tf.nn.relu(tf.matmul(W,x)+b)  #RELU(Wx+b)
C = [...]   #根据Relu函数的结果计算Cost
s = tf.Session()
for step in range(0,10):
	input = ...construct 100-D input array...  #为输入创建一个100维的向量
	result = s.run(c, feed_dict = {x:input})  #获取Cost,供给输入x
	print(step,result)

算術演算は、行列乗算又はベクトル加算として、抽象操作の種類を表します。算術演算は、独自の属性を持つことができますが、必要なすべてのプロパティが事前に設定されている、または図を計算作成するときに推測することができます。オペレーティング・コア(カーネル)は、特定のハードウェア(CPU / GPUなど)で実装演算です。TensorFlow新しい演算や機構動作コアを登録することによって追加することができます。表1-2は、組み込み演算部TensorFlowを示します。
セッションがTensorflowを使用して、ユーザーにインタラクティブなインタフェースです。ユーザーは、計算マップを作成するために、ノードとエッジによって拡張セッションの新しいメソッドを追加し、図の実行方法は、セッションによって実行することができる計算することができるユーザノードによって与えられる計算する、入力データを提供しながら、自動のTfを見つけますすべてのノードは、従属順次実行その応じて算出されます。ほとんどのユーザーのために、それらが算出マップを作成し、その後、繰り返しの全体の計算グラフ図又はその一部を実行します。ほとんどの操作では、算出マップは、繰り返し実行され、データはテンソルではなく持続しますが、何度も繰り返し計算の図です。

原則1.2.2

(1)ワーキング成分

クライアント:Sessionインターフェースマスターと労働者の多数を介して接続されたクライアント。

労働者:労働者が、このようなCPUやGPUなどの複数のハードウェアデバイスに接続し、ハードウェアの管理を担当することができます。

マスタ:マスタが全労働者を指示する責任があり、プロセス図に従って演算を行います。

TensorFlow各労働者が複数のデバイスを管理することができ、各デバイスは、ハードウェアのカテゴリ名、番号、タスク番号(無スタンドアロン版)が含まれています。

スタンドアローンモード:/仕事:ローカルホスト/デバイス: CPU:0
モード分散:/仕事:労働者/タスク: 17 /デバイス:GPU:3

(2)動作モード

スタンドアローンモード:図の計算は、順序の依存関係に行われます。すべてのアップストリームノードが依存(0の数に依存して)実行された場合、ノードは、実行待ちレディキューに追加され、一方、それは1マイナスの下流のすべてのノードの数に依存して、実際には、これは、標準的な計算であります道のトポロジカル順序。

分散モード:配信装置ノードのための戦略を設計します。この戦略は、最初に、このモデルは、各入力ノードのコスト、出力テンソルのサイズ、および必要な計算時間を推定し、コストモデルを計算する必要があります。得られた人間の経験によって開発された部品のコストモデルであるヒューリスティックルールは、他の部分は測定得られた実稼動データのごく一部です。デバイスは、プログラム・ノードに割り当てられると判定された場合、全体の計算グラフが同じサブ図に分割され、同じ装置及び隣接ノードを使用して、サブピクチャに分割されます。
同時に、マルチデバイス版のための単一のスタンドアロンデバイスの変換のスタンドアロン版からも、GPUの訓練の訓練に複数のGPUからの転換を達成するために、太字で次のコードにのみ、この行を追加することは非常に簡単です。

分散TensorFlowの公差(3)障害

フォールトトレラント分散TensorFlowも機能です。失敗は両方のケースで検出することができます。

①受信ノードに送信ノードから送信された情報は失敗します。

②労働者の周期的ハートビートの失敗。

障害が検出された場合、全体の計算が終了すると、図に再開されます。

1.2.3拡張機能

自動誘導のため(1)TensorFlowネイティブサポート。

(2)TensorFlowはまた、単独でサブピクチャの実装をサポートする他の側からの出力を得ながら、ユーザは、エッジの一部に沿って図の計算のサブグラフの任意入力データとを選択することができます。

(3)計算のTensorFlow支援制御フローチャートを、例えば:条件-IFとwhileループ、ほとんどの機械学習アルゴリズムは、反復が必要なので、これは非常に重要であるからです。

(4)供給ノードを介して除くTensorFlowデータエントリを、特殊入力ノードは、GoogleクラウドPlatfromへのファイルパスとして、ユーザーが直接ファイルシステムへのパスを入力することができるがあります。

(5)待ち行列(キュー)の重要性がTensorFlowタスクのスケジューリングでは、この機能は、異なるノードは、非同期計算グラフを実行可能にします。

(6)容器(コンテナ)TensorFlow長期変数、変数オブジェクトのような容器に格納されているを管理するための特別な機構です。

1.2.4パフォーマンスの最適化

(1)TensorFlowは、サードパーティのライブラリのいくつかの高度に最適化計算をサポートしています。

線形代数ライブラリ:固有

行列の乗算ライブラリ:BLAS、CUBLAS(CUDA BLAS)

深さの研究コンピューティング・ベース:CUDA-convnet、cuDNN

(2)TensorFlow並列計算モデルは、3回の異なる加速度ニューラルネットワークのトレーニングを提供します。

パラレルデータ:異なるデバイス上のミニバッチデータを割ることにより計算は、勾配は、並列化を達成するために計算されます。計算点は、同期、非同期であり、そして3つの方法で混合することができます。何の利点同期干渉勾配欠点は、フォールトトレランスを再実行してマシンに問題、悪いことではありませんがあります。勾配の各セットの利用効率が得られるフォールトトレランスのある程度のでなく、干渉問題の勾配による非同期の利点は、減少しました。一般的に、より良いトレーニングのモデル同期精度。

並列モデル:異なるコンピューティングデバイス上の計算グラフの異なる部分、単純なモデルは、並列の複数のデータに同時にトレーニングデータとは異なる、トレーニングの反復時間を短縮することを目的とするこれらの各々は、並行して実施することができます。

平行線:のようなパラレル非同期データが、同一のハードウェア・デバイス上で並行して実現されます。一般的な考え方は、連続的に機器の利用率を向上させる、並列に実行デバイス上で、パイプライン演算を行うことです。

参考文献:
"TensorFlow本当の"
https://blog.csdn.net/program_developer/article/details/78861954

おすすめ

転載: blog.csdn.net/xavier_muse/article/details/90613033