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

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值