部分内容参考了其他资源,谢谢。
使用tf.Variable()时,如果系统检测到重名,会做自动处理,不会报错。
import tensorflow as tf
w_1 = tf.Variable(3,name="w")
w_2 = tf.Variable(1,name="w")
print(w_1.name)
print(w_2.name)
使用tf.get-variable()时,会报错。
import tensorflow as tf
w_1 = tf.get_variable(name = 'w', initializer = 1)
w_2 = tf.get_variable(name = 'w', initializer = 2)
print(w_1.name)
print(w_2.name)
若需要给TensorFlow的变量赋值,可以使用 tf.assign()
tf.assign(ref, value, validate_shape=None, use_locking=None, name=None)
将值赋值给 ref 后再返回 ref
import tensorflow as tf;
A = tf.Variable(tf.constant(0.0), dtype=tf.float32)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(A))
sess.run(tf.assign(A, 10))
print(sess.run(A))
运行结果如下:
执行session会话后,A的值一开始为0.0,随后执行assign操作,变成10。
import tensorflow as tf
weights = tf.Variable(tf.random_normal([784,200], stddev = 0.35), name = 'weights')
bias = tf.Variable(tf.zeros([200]), name = 'biase')
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(bias))
print(weights.eval())
上面的代码中sess.run(bias) 与 bias.eval() 是一样的。
如果直接用 print(weights) ,则打印的结果是 weight 的 shape ,
只是一个占位符,占位符并没有初始值,只是在必要时分配内存,
在TensorFlow中,数据并不会保存为 integer, float, 或 string. 这些值都封装在 tensor 对象中,因此不能直接定义并使用一个变量例如x,因为你设计的模型可能需要受不同的数据集与不同的参数。所以TF使用placeholder()来传递一个tensor到session.run()中,并与feed_dict{}结合一起使用。
feed_dict{}是一个字典,在字典中需要给每一个用到的占位符取值。在训练神经网络时,需要大批量的训练样,如果每一次迭代选取的数据都需要常量表示,那么TensorFlow的计算图会非常大。因为每计算一个常量 ,TensorFlow会增加一个结点,所以说,拥有几百万次迭代的神经网络会拥有庞大的计算图,如果使用占位符的话,就可以很好的解决这一点,它只会拥有占位符这一个结点。
import tensorflow as tf
import numpy as np
x = tf.placeholder(tf.string)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
output = sess.run(x, feed_dict={x: 'Hello World'})
print(output)
import tensorflow as tf
import numpy as np
w1=tf.Variable(tf.random_normal([1,2],stddev=1,seed=1))
#因为需要重复输入x,而每建一个x就会生成一个结点,计算图的效率会低。所以使用占位符
x=tf.placeholder(tf.float32,shape=(1,2))
x1=tf.constant([[0.7,0.9]])
a=x+w1
b=x1+w1
sess=tf.Session()
sess.run(tf.global_variables_initializer())
#运行y时将占位符填上,feed_dict为字典,变量名不可变
y_1=sess.run(a,feed_dict={x:[[0.7,0.9]]})
y_2=sess.run(b)
print(sess.run(w1))
print(y_1)
print(y_2)
sess.close