tf.Variable()
??tf.Variable(initializer,name),參數initializer是初始化參數佩捞,name是可自定義的變量名稱域庇,用法如下:
import tensorflow as tf
v1=tf.Variable(tf.random_normal(shape=[4,3],mean=0,stddev=1),name='v1')
v2=tf.Variable(tf.constant(2),name='v2')
v3=tf.Variable(tf.ones([4,3]),name='v3')
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(v1))
print(sess.run(v2))
print(sess.run(v3))
結果如下:
[[-1.2115501 1.0484737 0.55210656]
[-1.5301195 0.9060654 -2.6766613 ]
[ 0.27101386 -0.32336152 0.44544214]
[-0.0120788 -0.3409422 -0.48505628]]
2
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
tf.get_variable()
??tf.get_variable(name, shape, initializer): name就是變量的名稱携兵,shape是變量的維度疾掰,initializer是變量初始化的方式,初始化的方式有以下幾種:
tf.constant_initializer:常量初始化函數
tf.random_normal_initializer:正態(tài)分布
tf.truncated_normal_initializer:截取的正態(tài)分布
tf.random_uniform_initializer:均勻分布
tf.zeros_initializer:全部是0
tf.ones_initializer:全是1
tf.uniform_unit_scaling_initializer:滿足均勻分布徐紧,但不影響輸出數量級的隨機值
import tensorflow as tf;
import numpy as np;
import matplotlib.pyplot as plt;
a1 = tf.get_variable(name='a1', shape=[2,3], initializer=tf.random_normal_initializer(mean=0, stddev=1))
a2 = tf.get_variable(name='a2', shape=[1], initializer=tf.constant_initializer(1))
a3 = tf.get_variable(name='a3', shape=[2,3], initializer=tf.ones_initializer())
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
print sess.run(a1)
print sess.run(a2)
輸出:
[[ 0.42299312 -0.25459203 -0.88605702]
[ 0.22410156 1.34326422 -0.39722782]]
[ 1.]
[[ 1. 1. 1.]
[ 1. 1. 1.]]
tf.Variable()静檬、tf.get_variable() 兩者區(qū)別
?? tf.get_variable的參數列表為tf.get_variable(name, shape=None, initializer=None, dtype=tf.float32, trainable=True, collections=None),如果已存在參數定義相同的變量并级,就返回已存在的變量拂檩,否則創(chuàng)建由參數定義的新變量。
??所以tf.get_variable創(chuàng)建變量時嘲碧,會進行變量檢查稻励,當設置為共享變量時(通過scope.reuse_variables()或tf.get_variable_scope().reuse_variables()),檢查到第二個擁有相同名字的變量愈涩,就返回已創(chuàng)建的相同的變量望抽;如果沒有設置共享變量,則會報[ValueError: Variable varx alreadly exists, disallowed.]的錯誤履婉。
?? 而tf.Variable()創(chuàng)建變量時煤篙,name屬性值允許重復,檢查到相同名字的變量時毁腿,由自動別名機制創(chuàng)建不同的變量辑奈。
例如;
with tf.name_scope('name_scope_1'):
var1 = tf.get_variable(name='var1', shape=[1], initializer=None, dtype=tf.float32)
var2 = tf.Variable(name='var2', initial_value=[1], dtype=tf.float32)
var21 = tf.Variable(name='var2', initial_value=[2], dtype=tf.float32)
輸出name時,如下:
var1:0
name_scope_1/var2:0
name_scope_1/var2_1:0
而
with tf.name_scope('name_scope_2') as scope:
scope.reuse_variables() #tf.get_variable_scope().reuse_variables()
var1 = tf.get_variable(name='var1', shape=[1], initializer=None, dtype=tf.float32)
var11 = tf.get_variable(name='var1')
var2 = tf.Variable(name='var2', initial_value=[1], dtype=tf.float32)
var21 = tf.Variable(name='var2', initial_value=[2], dtype=tf.float32)
with tf.Session() as sess:
print(var1.name)
print(var11.name)
print(var2.name)
print(var21.name)
輸出name時已烤,如下:
var1:0
var1:0
name_scope_2/var2:0
name_scope_2/var2_1:0
tf.placeholder()
tf.placeholder(dtype, shape=None, name=None)
placeholder鸠窗,占位符,在tensorflow中類似于函數參數胯究,運行時必須傳入值稍计。
- dtype:數據類型。常用的是tf.float32,tf.float64等數值類型唐片。
- shape:數據形狀丙猬。默認是None涨颜,就是一維值,也可以是多維茧球,比如[2,3], [None, 3]表示列是3庭瑰,行不定。
- name:名稱抢埋。
import tensorflow as tf
import numpy as np
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1, input2)
with tf.Session() as sess:
print sess.run(output, feed_dict = {input1:[3.], input2: [4.]})