tensorflow 学习笔记之 变量的一些操作

部分内容参考了其他资源,谢谢。

1、 区别

使用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)

错误如图所示

2、tensorflow 赋值操作

若需要给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。

3、TensorFlow创建变量

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 ,
这里写图片描述
这里写图片描述

4、tf.placeholder()

只是一个占位符,占位符并没有初始值,只是在必要时分配内存,
在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

这里写图片描述

猜你喜欢

转载自blog.csdn.net/wchzh2015/article/details/78408335