【tensorflow】tf.Variable、tf.constant、tf.placeholder

  張量(Tensor)是TensorFlow的核心數據單位。一個張量由一組形成陣列(任意維數)的原始值組成。張量的階是它的維數,而它的形狀是一個整數元組,指定了陣列每個維度的長度。
下面會介紹 Tensorflow 中幾個特殊張量:
- tf.Variable
- tf.constant
- tf.placeholder

tf.Variable

  Tensorflow 變量是表示程序處理的共享持久狀態的最佳方法。

創建變量

  創建變量的最佳方式是調用 tf.get_variable函數。此函數需要指定變量的名字與形狀。

# 創建名爲‘variable_a’,形狀爲[1,2,3]的3維張量
variable_a = tf.get_variable("a",shape=[1,2,3])

  tf.get_variable還可以指定數據類型(默認的是 tf.float32)和初始化器。Tensorflow 提供了許多方便的初始化器,比如

  • tf.zeros_initializer

    初始化爲0

    variable_b = tf.get_variable("b", shape=[1, 2, 3], dtype=tf.float32,
                                 initializer=tf.zeros_initializer)
  • tf.constant_initializer

    初始化爲常量

    value = np.array([0, 1, 2, 3, 4, 5, 6, 7])
    variable_c = tf.get_variable("c", dtype=tf.float32, shape=value.shape,
                                 initializer=tf.constant_initializer(value))
  • tf.truncated_normal_initializer

    隨機初始化

    variable_d = tf.get_variable('d', dtype=tf.float32, shape=[4, 3, 4], initializer=tf.truncated_normal_initializer)
    
  • tf.contrib.layers.xavier_initializer

    隨機初始化

    variable_e = tf.get_variable('e', dtype=tf.float32, shape=[4, 3, 4], initializer=xavier_initializer())
    

      此處介紹幾種常見的初始化器,其中在初始化方面使用比較多的是後兩種,建議使用xavier_initializer初始化器,之前在用 lstm模型進行文本分類過程中,使用truncated_normal_initializer進行初始化,發現在訓練過程中,lstm 模型執行少數batch後就收斂,致使模型在訓練集和測試集上的準確率都很低。當然,這個也不絕對,具體還是要根據自己的模型而定。

初始化變量

  變量必須先初始化後纔可使用。在低級別的編程中,需要明確初始化,高級別框架下是自動初始化的。此處介紹下低級別編程中初始化的問題。

  • 指定初始化某個變量

    sess=tf.Session()
    sess.run(tf.initialize_variables([variable_c]))
    

    在變量比較少的模型中,使用上述方法是很 ok 的,但是在變量比較多的情況下,使用上述方法可能會很不爽,至少對我是這樣的。

  • 初始化全部變量

    sess.run(tf.initialize_all_variables())

tf.constant

  使用tf.constant來創建一個常量。

```
# 創建0維常量
tf.constant(0.2,name='a')
# 創建1維常量
tf.constant([1,2,3,4],name='b')
tf.constant(-1.0, shape=[2, 3], name='b')
```

tf.placeholder

  此函數的作用可以作爲 java 方法中的形參,用於定義過程,在方法執行時再賦予具體的值。

a = tf.placeholder(dtype=tf.float32, shape=None, name='a')
b = tf.placeholder(dtype=tf.float32, shape=None, name='b')
with tf.Session() as sess:
    print(sess.run(a + b, feed_dict={a: 1, b: 2}))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章