Tensorflowの基本的な概念-定数、変数、プレースホルダー、計算グラフ、セッション

Tensorflowの基本概念

Tensorflowに基づくニューラルネットワークは、定数、変数、プレースホルダーなどを通じて、ニューラルネットワークの構造、データ入力、およびデータに関連するその他の操作を完了します。これらは計算グラフを構成し、セッションを実行して、以前に定義された計算グラフを実行します、ニューラルネットワークをトレーニングし、最終的により高い精度のモデルを取得します(重みパラメーターのセットとして理解できます)。

1 Tensorflowワークフロー

  • テンソルを作成
  • 演算の定義(演算はTensorを入力し、次に別のTensorを出力します)
  • 計算を実行する(つまり、計算可能なグラフを実行する)

Tensorには、主に3つのタイプがあります。

  • 定数:tf.constant()
  • 変数:tf.Variable()
  • プレースホルダー:tf.palceholder()

2定数

2.1呼び出し構文

tf.constant(value, dtype=None, shape=None, name="Const", verify_shape=False)
  • value:tfで定義されたデータ型に準拠する定数値または定数リスト。
  • dtype:データ型、オプション。
  • 形状:一定形状、オプション;
  • name:定数の名前、オプション。
  • verify_shape:定数の形状を変更できるかどうか。デフォルトでは変更できません。

constant()は、テンソルフローで定数(変更不可能なテンソル)を定義する方法を提供する関数です。

定数は更新不可能なテンソルであり、初期化する必要はありません。計算グラフで計算した後、セッションを割り当てることができます。

2.2例

import tensorflow as tf

# 常量
a0 = tf.constant(1,name='a0')
print(a0)

with tf.Session() as sess:
    a1 = sess.run(a0)
    print(a1)

2.3演算結果

Tensor("a0:0", shape=(), dtype=int32)
1

2.4まとめ

定数は、定義時にテンソルの形で計算グラフに格納されname='a0'ます。テンソルは計算グラフマーキングによって区別され、セッションが実行されて計算が実行されると、割り当てられた値を取得できます。


3変数

3.1呼び出し構文

tf.Variable(self,
               initial_value=None,
               trainable=True,
               collections=None,
               validate_shape=True,
               caching_device=None,
               name=None,
               variable_def=None,
               dtype=None,
               expected_shape=None,
               import_scope=None)

tensorflowの変数は、Variableクラスを介して実装されます。クラス初期化関数はtf.Variable()であり、クラス名の最初の文字は大文字にする必要があります。これには注意が必要です。

変数は更新可能なテンソルであり、ニューラルネットワークの重みで頻繁に使用され、継続的に繰り返し更新されます。

3.2例

import tensorflow as tf

# 变量
b0 = tf.Variable(2, tf.int16, name='b0')

with tf.Session() as sess:
    tf.global_variables_initializer().run() # 变量需要初始化
    b1 = sess.run(b0)
    print(b0)
    print(b1)

3.3演算結果

<tf.Variable 'b0:0' shape=() dtype=int32_ref>
2

3.4まとめ

変数はセッションで更新でき、初期化する必要があります。ここでの初期化はグローバルに初期化することも、各変数を手動で初期化することもできます。実行後、割り当てを取得できます。

以下は、いくつかの変数初期化メソッドです。

# 手动初始化
ses.run(var1.initializer)
ses.run(var2.initializer)
ses.run(var3.initializer)

# 分步骤全局初始化
init_op = tf.global_variables_initializer()
sess.run(init_op)

# 简洁的初始化
var1.initializer.run()
tf.global_variables_initializer().run()

4プレースホルダー

4.1呼び出し構文

tf.placeholder(dtype, shape=None, name=None)
  • dtype:tf.float32、tf.float64などの一般的に使用される数値型など、テンソルフローのデータ型を表します。
  • shape:データ型を示します。デフォルトのNoneは1次元の値で、shape = [None、5]です。これは、行が不明確で、列が5であることを示します。
  • 名前:テンソル名;

プレースホルダーはテンソルのデータ形式を宣言するために使用され、この形式でテンソルが存在することをシステムに伝えますが、特定の値は指定されておらず、特定の値は公式の実行中に指定する必要があります。プレースホルダー変数は、大量のトレーニングデータの読み取りの問題を解決するためにTensorFlowで使用されるメカニズムです。これにより、値を割り当てることができなくなります。トレーニングが始まると、トレーニングデータはトレーニングネットワークに送信されて学習されます。

4.2例

import tensorflow as tf

# 占位符
c0 = tf.placeholder(tf.float32,name = 'c0')
c1 = tf.placeholder(tf.float32,name = 'c1')
c2 = tf.add(c0,c1,name='c2')

with tf.Session() as sess:
    c3 = sess.run(c2,feed_dict = {c0:1.0,c1:2.0})  # 占位符在运算时喂入数据
    print(c2)
    print(c3)

4.3演算結果

Tensor("c2:0", dtype=float32)
3.0

4.4まとめ

プレースホルダーは通常feed_dict、データ入力を完了するために使用されます。


5計算チャート

通常、計算グラフが定義されていない場合、システムはデフォルトの計算グラフを自動的に維持します。これは、tf.get_default_graph()関数で取得できます。新しい計算グラフが定義されると、計算グラフ内の変数は、計算グラフに属するローカル変数のみと見なされ、他の計算グラフと共有されません。

5.1呼び出し構文

import tensorflow as tf

graph1 = tf.Graph()
graph2 = tf.Graph()  # 直接无视默认缺省的Graph
# graph2 = tf.get_default_graph() 为其分配一个句柄

with graph1.as_default():
    pass

with graph2.as_default():
    pass

5.2例

import tensorflow as tf

# 计算图
d0 = tf.constant(2, tf.int16,name='d0')
d1 = tf.constant(4, tf.float32,name='d1')

graph = tf.Graph()
with graph.as_default():
    d0 = tf.Variable(8, tf.float32,name='d0')
    d1 = tf.Variable(tf.zeros([2,2], tf.float32),name='d1')
    
with tf.Session(graph=graph) as sess:
    tf.global_variables_initializer().run()
    print(sess.run(d0))
    print(sess.run(d1))

5.3演算結果

8
[[ 0.  0.]
 [ 0.  0.]]

5.4まとめ

デフォルトの計算グラフで定義されたテンソルは値を取得しませんが、指定した計算グラフでセッションを実行すると、計算グラフのテンソル値が取得されます。

おすすめ

転載: www.cnblogs.com/ctgu/p/12731005.html