あなたは1件の記事を読んでください!TensorFlowエントリ

個人ブログのナビゲーションページ(クリック、右側にリンク個人のブログを開くために):ダニエルは、テクノロジ・スタックにあなたを取ります 

TensorFlowエントリ

この記事は、人民元がプログラムされている農家や手続きに初期コードTensorFlowを使用する方法について説明します。してください読む前に  TensorFlowをインストールし、より良い記事の内容を理解するために加えて、あなたは以下を読む前に少しの知識を理解する必要があります。

  1. 基本的なプログラミングのpython。Pythonのコードを理解することができ、それはコードを書くようなツールやpycharm IDCスクリプトを使用するのが最適です。
  2. 少なくとも、アイデアは配列です。
  3. 理想的な状態は、機械学習と知識の基盤です。あなたがスタートを学習抄紙機を理解することができますとしてではなく、任意の機械学習関連の知識がない深刻な問題を読む前に理解していない場合。MNISTは、機械学習の基礎を理解してそれは、後に別のものを開きます。

TensorFlowはTensorFlowコアはTensorFlowの開発のための基本的なサポートを提供最下位レベルのインタフェースであるAPIインタフェース、の広い範囲を提供しています。機械学習の研究と関連するデータモデリングとして正式勧告TensorFlowコア。また、より高い抽象TensorFlowコアAPIインタフェースがあり、APIインタフェースTensorFlowコアよりも使いやすいが、より簡単に素早くビジネスニーズを達成するために。データ管理、データの評価、トレーニング、および他の推論機能のセットを提供する例示tf.contrib.learnインターフェイスの。TensorFlowの使用の開発中に特別な注意を必要とし  contrib 、まだ、まだ進化しているAPIインタフェースの冒頭、将来のリリースやあからさまキャンセルに調整される可能性があります。

本論文では、TensorFlowコアを紹介し、tf.contrib.learn簡単なモデリングを使用する方法について説明します。学びTensorFlowコアは、トレーニングデータにおけるより適切なモデルを作成するために、抽象インタフェースを使用した場合、開発者はどのように根本的な仕事を理解することができるようにすることです。

TensorFlow

TensorFlow基本データユニットは、テンソル(テンソル)です。谷に、このデータ構造は、キュー(テンソルの複数のセットに格納された値の集合と等価であることを理解すべき点からのベクトルの集合であるテンソル決してより明確にいくつかの単語、女の子の兄弟や「テンソル解析」の検索が簡単に多次元の配列)として考えることができます。オーダー表現テンソル次元テンソルのテンソルは、ここにいくつか例を示します。

3 # 0阶张量,可以用图形[]来表示
[1. ,2., 3.] # 1阶张量,是一个图形为[3]的向量
[[1., 2., 3.], [4., 5., 6.]] # 2阶张量,是一个图形为[2,3]的矩阵
[[[1., 2., 3.]], [[7., 8., 9.]]] # 图形为[2,1,3]的三阶张量

TensorFlowコアコース

インポートTensorFlow

以下は、標準的な方法のTensorFlowパッケージに導入されています。

import tensorflow as tf

導入の仕方によってパイソン後、TFは、すべての入口TensorFlowクラス、メソッド、およびシンボルへのアクセスを提供します。

図算出(計算グラフ)

プログラミング開発TensorFlowコアは2つのことを行うために見ることができます。

  1. 建設計算図。(モデル化)
  2. ファイル名を指定して実行計算チャート。(実行)

図(グラフ、また、接続図と呼ぶことができる)は、リンクは、図1の複数の点によって形成されることを示しています。図は、本明細書でモデリング操作は、全体形状がTensorBoard図を使用することができる参照TensorFlow経路を指します。

コンピューティングタスクを代表するものであり、点の各図に示したノード(ノード)。

だから、要するに:プログラミング  TensorFlowコアは  うまく前に配置されたノードコンピューティングタスクのシリーズです、その後、これらのタスクを実行します。

下に、我々は、第1の入力のような簡単なグラフ、グラフ内のノード(ノード)が0以上テンソルを構築し、出力としてテンソルを生成します。典型的なノードは、「定数」(定数)です。定数は、建物の計算モデルに存在していたTensorFlowランニングを計算するとき、それは、任意の入力を必要としません。次のコードは、2つの浮動小数点定数定数値を作成  node1 し、  node2

node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0) # also tf.float32 implicitly
print(node1, node2)

ランはプリントアウトされた後:

Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)

印刷の結果は、それがとして期待される出力に応じていないことがわかります守っ  3.0  または 4.0 値。ここで、ノード・オブジェクト情報の出力があります。ここでは2番目のタスクを実行していないので-計算モデルダイアグラムを実行します。実行時にのみ、ノードの実際の値に使用される  3.0  と4.0セッション図動作(セッション)、セッション制御方法及び各種状態量TensorFlowランタイム(コンテキスト)のパッケージを作成するために。

次のコードは、(セッション)セッション・オブジェクト・インスタンスを作成し、実行することになる  run モデルを計算する方法。

sess = tf.Session()
print(sess.run([node1, node2]))

実行した後、私たちは、印刷された結果は3.0と4.0であることを見つけます:

[3.0, 4.0]

次いで、  node1 及び  node2 和演算のために、この動作は、図の計算モデルです。次のコード構造で  node1 、  node2 和演算のための  node3 モデルが使用ビルドした後、運転を表し、  sess.run 実行します。

node3 = tf.add(node1, node2)
print("node3: ", node3)
print("sess.run(node3): ",sess.run(node3))

操作意志出力した後、次の:

node3:  Tensor("Add_2:0", shape=(), dtype=float32)
sess.run(node3):  7.0

これは、TensorFlowのプロセスは、チャートやグラフの実行を作成して完成しました。

上述TensorFlowツールが、図の動作ノードを表示することが可能である、TensorBoardと呼ばれるツールを提供します。以下は計算TensorBoardビジュアル参照図の一例です。

彼は常にだったので少し値のこの定数演算結果は、定数は、固定された結果を生成します。このような使用のプレースホルダとして - 図は、外部入力パラメータを受け入れることができるようにしてノード。プレースホルダには番号まで待ち、モデルの実行時を動的に計算することができます:

a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b  # + 可以代替tf.add(a, b)构建模型

関数またはラムダ式のようなビットで、このライン3上に入力パラメータを取得します。私たちは、実行時に入力各種パラメータは数字を計算することができます。

print(sess.run(adder_node, {a: 3, b:4.5}))
print(sess.run(adder_node, {a: [1,3], b: [2, 4]}))

出力は次のようになります。

7.5
[ 3.  7.]

TensorBoardでは、計算されたグラフが表示されます。

 

私たちは、計算されたコンテンツを追加するために、より複雑な式を使用することができます。

add_and_triple = adder_node * 3.
print(sess.run(add_and_triple, {a: 3, b:4.5}))

出力を計算します。

22.5

TensorBoard表示:

機械学習のモデルでは、多くの場合、入力としての各種データを受け取る必要です。一般的に可能な継続的な研修モデルを作成するためには、図の同じ入力修正モデルのための新たな出力を得ることができるようにする必要があります。変数(変数)は、それらが初期のタイプによって作成され、図にトレーニングパラメータを増やして、デフォルト値を指定することができます。

W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W * x + b

すでにコールで述べた  tf.constant 不変の定数を初期化します。そして、ここで呼び出すことによって  tf.Variable 作成された変数は、順番に(TensorFlow実行する前に、初期化されることはありませんsess.run動作モデルを実行する前に)すべての変数がステップ増加する必要が初期化  init 操作を:

init = tf.global_variables_initializer()
sess.run(init)

過負荷をできる  init グローバルすべての変数TensorFlow図を初期化すること。上記のコードでは、私たちが呼ぶ  sess.run 前に、すべての変数は初期化されません。

以下は  x 、プレースホルダである{x:[1,2,3,4]}  xの計算で置換値は[1,2,3,4]で表します。

print(sess.run(linear_model, {x:[1,2,3,4]}))

出力:

[ 0.          0.30000001  0.60000002  0.90000004]

今、あなたは計算モデルを作成しましたが、彼がより効果的なこのトレーニングモデルデータの必要性を作るために十分な効果的かどうかは明らかではないこと。以下のコードの定義は、指定された  y 所望の値を提供し、「損失関数」(損失関数)を書き込むためにプレースホルダ。

「損失関数は、」ツールからどのくらいの出力の目標を達成したい人のための現在のモデルを測定するために使用されます。次の例では、損失として、線形回帰モデルを使用しています。回帰プロセスは、次のとおり損失計算モデルの出力変数(y差)、この差(分散)を二乗し、その結果ベクトル及び差異計算が行われます。次のコードは、  linear_model - y ベクトルを作成し、各ベクトルは、エラーの増加に対応する値を表しています。その後、呼び出し  tf.square 増分エラー二乗に。最後に、分散結果のすべてが使用、抽象エラー差にスカラー値を作成するために追加され  tf.reduce_sum、この仕事をします。次のコードのように:

# 定义占位符
y = tf.placeholder(tf.float32)
# 方差运算
squared_deltas = tf.square(linear_model - y)
# 定义损益模型
loss = tf.reduce_sum(squared_deltas)
# 输出损益计算结果
print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))

差分値を算出した後です。

23.66

手動でもあり  W と  b の結果の違いを減らし値-1と1を変更します。TensorFlowを使用  tf.Variable 使用して、変数を作成するために  tf.assign 変更された変数を。たとえば  W=-1 、b=1 次のようにあなたがそれらの値を変更することができますので、それが現在の最高値モデルは、次のとおりです。

fixW = tf.assign(W, [-1.])
fixb = tf.assign(b, [1.])
sess.run([fixW, fixb])
print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))

 次のように最終的な出力結果は、後に改正します:

0.0

 インタフェースtf.train

機械学習のプロセスを完了ちょうど訓練の過程を説明するために、この記事の範囲を超えています。TensorFlowオファー多くのオプティマイザに徐々に(または反復ループ)ができるだけ小さく各パラメータ、そして最終的に損失の値を調整します。最も単純な最適化の一つは、「勾配降下」(あるの勾配降下導出(の結果に応じて)、それがあろう損失計算モデルの導出、および入力変数の値を調整するWb、)ように徐々に移動の導出結果の最終的な目的0。手によって調製誘導体を計算することは非常に退屈でエラーが発生しやすくなり、TensorFlowはまた、機能を提供する  tf.gradients 自動導出処理のため。次の例では、トレーニングサンプルを低下の勾配を使用してプロセスを示しています。

# 设定优化器,这里的0.01表示训练时的步进值
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
sess.run(init) # 初始化变量值.
for i in range(1000): # 遍历1000次训练数据,每次都重新设置新的W和b值
  sess.run(train, {x:[1,2,3,4], y:[0,-1,-2,-3]})

print(sess.run([W, b]))

この動作モードの結果は以下のとおりです。

[array([-0.9999969], dtype=float32), array([ 0.99999082], dtype=float32)]

 今、私たちは、機械学習の全体のプロセスを完了していること。単純な線形回帰計算があまりにも多くのTensorFlowコードを使用する必要はありませんが、これが唯一のインスタンスの場合ですが、多くの場合、実用的なアプリケーションでは、複雑なパターンマッチング操作を実装するために多くのコードを記述する必要があります。TensorFlowは抽象インタフェース共通パターン、構造および機能のより高いレベルを提供します。

完全なトレーニングコース

以下は、上記の説明、完全な線形回帰モデルの準備に基づいています。

import numpy as np
import tensorflow as tf

# 模型参数
W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
# 模型输入
x = tf.placeholder(tf.float32)
# 模型输出
linear_model = W * x + b
# 损益评估参数
y = tf.placeholder(tf.float32)
# 损益模式
loss = tf.reduce_sum(tf.square(linear_model - y)) # 方差和
# 优化器
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
# 训练数据
x_train = [1,2,3,4]
y_train = [0,-1,-2,-3]
# 定义训练的循环
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) # reset values to wrong
for i in range(1000):
  sess.run(train, {x:x_train, y:y_train})

# 评估训练结果的精确性
curr_W, curr_b, curr_loss  = sess.run([W, b, loss], {x:x_train, y:y_train})
print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))

出力を実行した後:

W: [-0.9999969] b: [ 0.99999082] loss: 5.69997e-11

この複雑なプログラムはまだ視覚的レンダリングをTensorBoardことができます。

tf.contrib.learn

すでに述べたように、事業開発を容易にするためにTensorFlow加えTensorFlowコアは、また、より多くの抽象インタフェースを提供します。tf.contrib.learn 高レベルのライブラリTensorFlowがあり、彼は、などのメカニズムを学ぶより簡略化され、機械を提供しました:

  1. ファイル名を指定して実行トレーニングサイクル
  2. ファイル名を指定して実行、評価サイクル
  3. 管理データの収集
  4. データ管理のトレーニング

tf.contrib.learnは、いくつかの共通のモジュールを定義します。

基本的な使い方

使用して見ましょう  tf.contrib.learn 線形回帰法を達成するために。

import tensorflow as tf
# NumPy常用语加载、操作、预处理数据.
import numpy as np

# 定义一个特性列表features。
# 这里仅仅使用了real-valued特性。还有其他丰富的特性功能
features = [tf.contrib.layers.real_valued_column("x", dimension=1)]

# 一个评估者(estimator)是训练(fitting)与评估(inference)的开端。
# 这里预定于了许多类型的训练评估方式,比如线性回归(linear regression)、
# 逻辑回归(logistic regression)、线性分类(linear classification)和回归(regressors)
# 这里的estimator提供了线性回归的功能
estimator = tf.contrib.learn.LinearRegressor(feature_columns=features)

# TensorFlow提供了许多帮助类来读取和设置数据集合
# 这里使用了‘numpy_input_fn’。
# 我们必须告诉方法我们许多多少批次的数据,以及每次批次的规模有多大。
x = np.array([1., 2., 3., 4.])
y = np.array([0., -1., -2., -3.])
input_fn = tf.contrib.learn.io.numpy_input_fn({"x":x}, y, batch_size=4,
                                              num_epochs=1000)

# ‘fit’方法通过指定steps的值来告知方法要训练多少次数据
estimator.fit(input_fn=input_fn, steps=1000)

# 最后我们评估我们的模型价值。在一个实例中,我们希望使用单独的验证和测试数据集来避免过度拟合。
estimator.evaluate(input_fn=input_fn)

出力を実行した後:

    {'global_step': 1000, 'loss': 1.9650059e-11}

カスタムモデル

tf.contrib.learn デフォルトのモデルを使用するように限定されるものではありません。私たちは今ではないモデルでTensorFlowにプリセットを作成する必要があるとします。我々はまだ使用することができtf.contrib.learn、高度に抽象データ保持のセット、トレーニングデータ、トレーニングプロセスを。私たちは、同等のモデルを使用LinearRegressor自分自身を達成する方法を示す、低レベルTensorFlow APIの知識を使用します。

使用  tf.contrib.learn そのサブクラスを使用するカスタムモデルの必要性を作成します  tf.contrib.learn.Estimator 。そして、  tf.contrib.learn.LinearRegressor ある   tf.contrib.learn.Estimator サブクラス。以下のコードに  Estimator 追加  model_fn 教えてくれる機能が、  tf.contrib.learn トレーニングと損益勘定を評価する方法:

import numpy as np
import tensorflow as tf
# 定义一个特征数组,这里仅提供实数特征
def model(features, labels, mode):
  # 构建线性模型和预设值
  W = tf.get_variable("W", [1], dtype=tf.float64)
  b = tf.get_variable("b", [1], dtype=tf.float64)
  y = W*features['x'] + b
  # 损益子图
  loss = tf.reduce_sum(tf.square(y - labels))
  # 训练子图
  global_step = tf.train.get_global_step()
  optimizer = tf.train.GradientDescentOptimizer(0.01)
  train = tf.group(optimizer.minimize(loss),
                   tf.assign_add(global_step, 1))
  # ModelFnOps方法将创建我们自定义的一个抽象模型。
  return tf.contrib.learn.ModelFnOps(
      mode=mode, predictions=y,
      loss=loss,
      train_op=train)

estimator = tf.contrib.learn.Estimator(model_fn=model)
# 定义数据集
x = np.array([1., 2., 3., 4.])
y = np.array([0., -1., -2., -3.])
input_fn = tf.contrib.learn.io.numpy_input_fn({"x": x}, y, 4, num_epochs=1000)

# 训练数据
estimator.fit(input_fn=input_fn, steps=1000)
# 评估模型
print(estimator.evaluate(input_fn=input_fn, steps=10))

出力を実行した後:

{'loss': 5.9819476e-11, 'global_step': 1000}

付属のJava / C / C ++ /機械学習/アルゴリズムとデータ構造/フロントエンド/アンドロイド/パイソン/プログラマ読み/シングル書籍図書Daquanは:

(乾燥した個人ブログでそこ開くには、右クリックしてください):技術的なドライ開花を
===== >> ①[Javaのダニエルは、高度なへの道であなたを取る] << ====
===== >> ②[+ ACMアルゴリズムデータ構造ダニエルは、高度なへの道であなたを取る] << ===
===== >> ③[データベースダニエルは高度への道であなたを取る] << == ===
===== >> ④[ダニエルWebフロントエンドの高度への道であなたを取るために] << ====
===== >> ⑤[機械学習のPythonとダニエルあなたにエントリを取ります高度なロード] << ====
===== >> ⑥[建築家ダニエルは高度への道であなたを取る] << =====
===== >> ⑦[C ++ダニエルは、道路上をお連れに進ん] << ====
===== >> ⑧[ダニエルは高度への道であなたを取るのiOS] << ====
=====> > ⑨[ウェブセキュリティダニエルは、高度なへの道であなたを取る] ===== <<
===== >> ⑩[Linuxオペレーティングシステムを、ダニエルは高度への道であなたを取る] = << ====

何の未収果物はありません、あなたの若い友人は、友人がテクニックを学びたい願って、道路の方法ですべての障害を克服することは、技術に結びつける本を理解して、コードをノック、原理を理解し、実践を行くことになります決定しましたそれはあなたの将来、あなたの夢を生活、あなたの仕事をもたらすでしょう。

公開された47元の記事 ウォンの賞賛0 ビュー274

おすすめ

転載: blog.csdn.net/weixin_41663412/article/details/104860505