apeescape2.com
  • メイン
  • アジャイル
  • ライフスタイル
  • ブランドデザイン
  • 収益と成長
技術

方程式の解法からディープラーニングまで:TensorFlowPythonチュートリアル

最近、人工知能の世界では、自動運転車の進歩が広く公表されていることから、現在の機械に至るまで、いくつかの注目すべき進展がありました。 ショパンの模造品を作る または ビデオゲームが本当に得意です 。

s corp vsllcチャート

これらの進歩の中心となるのは、ディープラーニングやその他の機械学習モデル、特にTorch、Caffe、Theanoの導出に役立つツールです。ただし、Google Brainは2015年11月に独自のオープンソースを導入して以来、 フレームワーク 、TensorFlow、このソフトウェアライブラリの人気が急上昇しているのを見てきました フレームワーク 最も人気のあるディープラーニング。

TensorFlow



なぜこれが起こったのですか?理由には、利用可能な大量のサポートとドキュメント、本番環境への準備、さまざまなデバイス間での計算の分散の容易さ、および優れた視覚化ツールが含まれます。 TensorBoard 。

最終的に、TensorFlowは、包括的で柔軟な一連の技術機能と非常に使いやすい組み合わせを実現します。

この記事では、このツールを使用して、単純なニューラルネットワークの実装による深層学習での使用を紹介する前に、機械学習が通常含むもの以外の一般的な数値問題を解決することで、このツールの仕組みを理解します。

始める前に

機械学習方法の基本的な理解が前提となっています。追いつく必要がある場合は、これを確認してください 出版物 。

Python APIをデモンストレーションするので、Numpyを理解することも有益です。

TensorFlowを設定するには、見つかった手順に従います ここに 。

Windowsを使用している場合は、このドキュメントの執筆時点で、2.7ではなくPython3.4以降を使用している必要があることに注意してください。

準備ができたら、次のコマンドでライブラリをインポートできるようになります。

import tensorflow as tf

TensorFlowソリューションのステップ1/2:グラフを作成する

TensorFlowプログラムの構築は、通常2つの主要なステップで構成されます。最初のステップは、実行する計算を説明する計算グラフを作成することですが、実際には実行せず、値もありません。

他のグラフと同様に、ノードとエッジがあります。エッジはテンソルを表し、テンソルはn次元行列を表します。たとえば、次元(またはTensorFlowのランク)が0のテンソルはスカラー、ランク1はベクトル、ランク2は行列などです。

ノードは、出力テンソルを生成し、必要に応じてテンソルを入力として受け取る操作を表します。このような操作には、加算(tf.add)、行列の乗算(tf.matmul)、および定数の作成(tf.constant)が含まれます。

それでは、これらのいくつかを組み合わせて最初のグラフを作成しましょう。

a = tf.constant([2.5, 2]) b = tf.constant([3, 6], dtype=tf.float32) total = tf.add(a, b)

ここでは、3つの操作を作成しました。そのうちの2つは、定数の1次元配列を作成するためのものです。

データ型は、渡されたvalue引数から推測されます。または、dtype引数で指定することもできます。 bでこれを行っていなかった場合は、int32推測され、エラーはtf.addとして与えられます。私は2つの異なるタイプで加算を定義しようとしたでしょう。

独自のコーディング言語を作成する方法

TensorFlowソリューションのステップ2/2:オペレーションを実行する

グラフは定義されていますが、グラフ(またはグラフの一部)で計算を行うには、TensorFlowセッションをインストールする必要があります。

sess = tf.Session()

または、IPythonなどのインタラクティブコンソールでセッションを実行している場合は、次を使用します。

sess = tf.InteractiveSession()

runセッションオブジェクトでは、テンソルを評価する方法です。

したがって、上記で定義された加算計算を評価するために、「total」、つまり撤回するテンソルを渡します。これは、op tf.addの出力を表します。

print(sess.run(total)) # [ 5.5 8. ]

この時点で、TensorFlow変数を紹介します。定数がグラフ定義の固定部分である場合、変数を更新できます。クラスコンストラクターには初期値が必要ですが、変数には、他の操作が実行される前に明示的に初期化する操作が必要です。

変数は特定のセッションでグラフの状態を維持するため、変数をよりよく理解するには、同じグラフを使用して複数のセッションで何が起こるかを観察する必要があります。

# Crea una variable con un valor inicial de 1 some_var = tf.Variable(1) # Crea una op para ejecutar inicializadores de variables init_op = tf.global_variables_initializer() # Crea una op para reemplazar el valor mantenido por some_var a 3 assign_op = some_var.assign(3) # Instala dos instancias de una sesión sess1 = tf.Session() sess2 = tf.Session() # Inicializa variables en ambas sesiones sess1.run(init_op) sess2.run(init_op) print(sess1.run(some_var)) # Salidas 1 # Cambia some_var en sesión1 sess1.run(assign_op) print(sess1.run(some_var)) # Salidas 3 print(sess2.run(some_var)) # Salidas 1 # Cierra Sesiones sess1.close() sess2.close()

グラフと2つのセッションをインストールしました。

両方のセッションで初期化を実行した後(これを実行せずに変数を評価するとエラーが発生します)、1つのセッションで割り当て操作を実行するだけです。ご覧のとおり、変数の値は保持されますが、すべてのセッションで保持されるわけではありません。

番号の問題に対処するためのグラフのフィード

もう1つの重要なTensorFlowの概念は、プレースホルダーです。変数は状態を維持しますが、プレースホルダーは、グラフが期待できる入力とそのデータ型(およびオプションでその形状)を定義するために使用されます。次に、計算を実行するときに、これらのプレースホルダーを介してデータをグラフにフィードできます。

TensorFlowグラフは、トレーニングしたいニューラルネットワークのように見え始めていますが、その前に、概念を使用して、金融の世界で一般的な数の問題を解決しましょう。

見つけたいとしましょうyこのような方程式で:

v =何-0。5年+これ-Y+これ-1。5年+(C + P)e-2年

v与えられた(定数CおよびP)。

これは、市場価値y、元本v、およびクーポンPの債券の満期利回り(C)を計算するための式です。半年ごとに支払われますが、継続的な構成ではキャッシュフローが割引されます。

基本的に、このような方程式を試行錯誤で解く必要があり、yの最終値に焦点を当てるために二分法を選択します。

まず、この問題をTensorFlowグラフとしてモデル化します。

CおよびPこれらは固定定数であり、グラフの定義の一部です。 yの下限と上限を調整するプロセスが必要です。したがって、これらの制限(「a」および「b」で示される)は、「y」(「a」および「b」の中点と見なされる)を推測するたびに変更する必要がある変数の適切な候補です。

# Especifica los valores que generarán nuestras operaciones constantes C = tf.constant(5.0) P = tf.constant(100.0) # Especificamos los valores iniciales que serán nuestros límites inferior y superior cuando se inicialicen. # Obviamente, el éxito final de este algoritmo depende de puntos de partida decentes a = tf.Variable(-10.0) b = tf.Variable(10.0) # Esperamos que se inserte un número flotante en la gráfica v_target = tf.placeholder('float') # Recuerda que las siguientes operaciones son definiciones, # ninguna se lleva a cabo hasta que se evalúa una operación en una sesión! y = (a+b)/2 v_guess = C*tf.exp(-0.5*y) + C*tf.exp(-y) + C*tf.exp(-1.5*y) + (C + P)*tf.exp(-2*y) # Operaciones para establecer valores temporales (a_ y b_) destinado a ser los próximos valores de a y b. # ej. si la conjetura resulta en una v mayor que la v objetivo, # estableceremos a_ como el valor actual de y a_ = tf.where(v_guess > v_target, y, a) b_ = tf.where(v_guess

これで、操作と変数のリストができました。これらはいずれも特定のセッションに対して評価できます。これらの操作の一部は、実行されている他の操作に依存しているため、たとえば、v_guessを実行します。 Cのような他のテンソルの連鎖反応を引き起こしますおよびPは、最初に評価されます。

これらの操作の一部は、値を指定する必要があるプレースホルダーに依存しているので、実際にその値をどのようにフィードするのでしょうか。

これは、引数feed_dictを使用して行われます。関数内run。

a_を評価する場合は、次のようにプレースホルダーv_targetの値をプラグインします。

sess.run(a_, feed_dict={v_target: 100})

結果として与える0.0。

v_targetを接続します130の場合、-10.0になります。

これは、他のすべての操作を前提条件として実際に実行する必要があり、実際にチャート全体を実行する「ステップ」操作です。これは、セッションの実際の状態を実際に変更する操作でもあります。したがって、ステップを実行すればするほど、変数を段階的にプッシュしますaおよびb yの実際の値に向けて。

それでは、vの値を考えてみましょう。私たちの方程式では、それは95に等しいです。セッションを設定し、その上でグラフを100回実行してみましょう。

# Configurar una sesión e inicializar variables sess = tf.Session() tf.global_variables_initializer().run() # Ejecuta la operación de paso (y, por lo tanto, toda la gráfica) 100 veces para i en el rango (100): sess.run(step, feed_dict={v_target:95})

テンソルを評価する場合y今、私たちは望ましい応答のようなものを手に入れます

フルスタックJavaScriptとは
print(sess.run(y)) # 0.125163

ニューラルネットワーク

TensorFlowの仕組みを理解したので、これをTensorFlowに組み込まれているいくつかの追加の機械学習操作と組み合わせて、単純なニューラルネットワークをトレーニングできます。

ここでは、原点を中心とする半径0.5の円の特定の領域にあるかどうかに応じて、データポイントを2D座標系で分類します。

もちろん、これは与えられた点を探すだけで具体的に確認できます(a,b)はいa^2 + b^2 <0.5ですが、この機械学習実験の目的のために、代わりにトレーニングセット(一連のランダムなポイントとそれらが予測領域に含まれるかどうか)を実行したいと思います。これを作成する1つの方法は次のとおりです。

import numpy as np NO_OF_RANDOM_POINTS = 100 CIRCLE_RADIUS = 0.5 random_spots = np.random.rand(NO_OF_RANDOM_POINTS, 2) * 2 - 1 is_inside_circle = (np.power(random_spots[:,0],2) + np.power(random_spots[:,1],2)

次の特性を持つニューラルネットワークを作成します。

  1. これは、2つのノードを持つ入力レイヤーで構成され、「random_spots」に含まれる一連の2次元ベクトルをフィードします。これは、トレーニングデータを待機しているプレースホルダーによって表されます。
  2. 出力レイヤーにも2つのノードがあるため、一連のトレーニングラベル( 'is_inside_circle')をスカラーのプレースホルダーにフィードしてから、それらの値を2次元のホットベクトルに変換する必要があります。
  3. 3つのノードで構成される隠れ層があるため、重み行列とバイアスベクトルに変数を使用する必要があります。これらは、トレーニングを行うときに調整する必要がある値です。
INPUT_LAYER_SIZE = 2 HIDDEN_LAYER_SIZE = 3 OUTPUT_LAYER_SIZE = 2 # Los valores iniciales para los pesos y los sesgos se dibujan aleatoria y uniformemente a partir de [-1, 1] # Por ejemplo, W1 es una matriz de forma 2x3 W1 = tf.Variable(tf.random_uniform([INPUT_LAYER_SIZE, HIDDEN_LAYER_SIZE], -1, 1)) b1 = tf.Variable(tf.random_uniform([HIDDEN_LAYER_SIZE], -1, 1)) W2 = tf.Variable(tf.random_uniform([HIDDEN_LAYER_SIZE, OUTPUT_LAYER_SIZE], -1, 1)) b2 = tf.Variable(tf.random_uniform([OUTPUT_LAYER_SIZE], -1, 1)) # Especificando que el marcador de posición X puede esperar una matriz de 2 columnas (pero cualquier cantidad de filas) # representando lugares aleatorios X = tf.placeholder(tf.float32, [None, INPUT_LAYER_SIZE]) # El marcador de posición Y puede esperar números enteros que representen si el punto correspondiente está en el círculo # o no (sin forma específica) Y = tf.placeholder(tf.uint8) # Una op para convertir a un único vector caliente onehot_output = tf.one_hot(Y, OUTPUT_LAYER_SIZE)

グラフの定義を完了するために、より良い分類器に到達するように変数をトレーニングするのに役立ついくつかの操作を定義します。これらには、行列計算、活性化関数、およびオプティマイザーが含まれます。

LEARNING_RATE = 0.01 # Op para ejecutar un cálculo de matriz X*W1 + b1 hidden_layer = tf.add(tf.matmul(X, W1), b1) # Utiliza la función de activación sigmoidea en el resultado activated_hidden_layer = tf.sigmoid(hidden_layer) # Aplica los siguientes pesos y sesgo (W2, b2) a la capa oculta y luego aplica la función softmax # para obtener nuestra capa de salida (cada vector sumando 1) output_layer = tf.nn.softmax(tf.add(tf.matmul(activated_hidden_layer, W2), b2)) # Calcula la entropía cruzada para nuestra función de pérdida loss = -tf.reduce_sum(onehot_output * tf.log(output_layer)) # Utiliza el optimizador de descenso de gradiente a la velocidad de aprendizaje especificada para minimizar el valor dado por el tensor de pérdida train_step = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(loss)

グラフを設定したら、セッションを設定して「トレインパス」を実行します(これは前提条件の操作も実行します)。これらの操作の一部はプレースホルダーを使用するため、値を指定する必要があります。このトレーニングステップは、学習アルゴリズムのエポックを表しているため、実行するエポックの数に関連付けられています。情報提供の目的で「損失」テンソルなど、グラフの他の部分を実行できます。

EPOCH_COUNT = 1000 sess = tf.Session() tf.global_variables_initializer().run() para i en rango(EPOCH_COUNT): if i%100 == 0: print('Loss after %d runs: %f' % (i, sess.run(loss, feed_dict={X: random_spots, Y: is_inside_circle}))) sess.run(train_step, feed_dict={X: random_spots, Y: is_inside_circle}) print('Final loss after %d runs: %f' % (i, sess.run(loss, feed_dict={X: random_spots, Y: is_inside_circle})))

アルゴリズムをトレーニングしたら、ポイントを入力して、次のようにニューラルネットワークの出力を取得できます。

sess.run(output_layer, feed_dict={X: [[1, 1]]}) # Hopefully something close to [1, 0] sess.run(output_layer, feed_dict={X: [[0, 0]]}) # Hopefully something close to [0, 1]

出力ベクトルの最初のメンバーが0.5より大きい場合は、点を円の外側として分類できます。それ以外の場合は、内側に分類できます。テンソルを実行する場合output_layer多くのポイントについて、学習者がポジティブにランク付けされたポイントを含む領域をどのように視覚化するかについてのアイデアを得ることができます。トレーニングセットのサイズ、学習率、およびその他のパラメーターは、意図した円にどれだけ近づくことができるかを確認するために試してみる価値があります。

ほぼ三角形

トレーニングセット:100ポイント
学習率:0.01
時間:1000

小さな三角形

トレーニングセット:1000ポイント
学習率:0.01
時間:1000

大きな三角形

トレーニングセット:1000ポイント
学習率:0.01
時間:10000

ほぼ円

トレーニングセット:1000ポイント
学習率:0.0001
時間:10000

AWS認定ソリューションアーキテクトの準備方法

最後まで

これは、トレーニングセットの増加、または時間の長さが優秀な学生を保証するものではないという良い教訓です。学習率は適切に調整する必要があります。

幸いなことに、これらのデモはTensorFlowの基本についての良いアイデアを提供し、より複雑な手法を実装するための強固な基盤を提供します。

TensorboardやGPUでのモデルのトレーニングなどの概念については説明していませんが、これらについては TensorFlowドキュメント 。この強力なフレームワークを使用して、エキサイティングな深層学習タスクに慣れるのに役立つさまざまなレシピがドキュメントにあります。

LTVとCAC:それらは何であり、なぜ重要なのですか?

財務プロセス

LTVとCAC:それらは何であり、なぜ重要なのですか?
強化学習の詳細

強化学習の詳細

データサイエンスとデータベース

人気の投稿
JavaScript、Python、Ruby、Swift、ScalaのOption / Maybe、Either、Future Monads
JavaScript、Python、Ruby、Swift、ScalaのOption / Maybe、Either、Future Monads
SQLインデックスの説明、Pt。 2
SQLインデックスの説明、Pt。 2
すべてのトレンドは価値がありますか? Webデザイナーが犯す最も一般的なUXの間違いトップ5
すべてのトレンドは価値がありますか? Webデザイナーが犯す最も一般的なUXの間違いトップ5
Init.js:完全なJavaScriptスタックの理由と方法のガイド
Init.js:完全なJavaScriptスタックの理由と方法のガイド
Swiftプロパティのラッパーにアプローチする方法
Swiftプロパティのラッパーにアプローチする方法
 
SSOボタンを作成する方法–Flaskログインチュートリアル
SSOボタンを作成する方法–Flaskログインチュートリアル
ベジェ曲線とQPainterを使用してC ++で丸みを帯びた角の形状を取得する方法:ステップバイステップガイド
ベジェ曲線とQPainterを使用してC ++で丸みを帯びた角の形状を取得する方法:ステップバイステップガイド
Angular 2をオンにする:1.5からのアップグレード
Angular 2をオンにする:1.5からのアップグレード
最小の価値のある製品から最大の影響を得る
最小の価値のある製品から最大の影響を得る
WowzaとAmazonElasticTranscoderを使用したオンラインビデオ
WowzaとAmazonElasticTranscoderを使用したオンラインビデオ
人気の投稿
  • 問題ステートメントを作成する際に、研究者は次の場合を除いて次のそれぞれに話しかけます。
  • elixir(プログラミング言語)
  • この設計の原則により、作業の一部が他の部分よりも支配的になります。
  • スプリングブーツ付きスプリングMVC
  • データの視覚化に最適なツール
カテゴリー
ヒントとツール プロジェクト管理 トレンド 設計プロセス ブランドデザイン 財務プロセス 収益と成長 モバイル プロセスとツール Kpiと分析

© 2021 | 全著作権所有

apeescape2.com