第一节 TensorFlow计算模型
- 图 graph
每个图都有着自己的tensor和运算,互不共享
import tensorflow as tf
tf.reset_default_graph()
defaultg1v1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1), name='defaultg1v1')
g1 = tf.Graph()
with g1.as_default():
g1v1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1), name='g1v1')
g1v2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1), name='g1v2')
g1x = tf.constant([[0.7, 0.9]], name='g1x')
# g1.get_collection(tf.GraphKeys.GLOBAL_VARIABLES) 做同样的事
with g1.as_default():
print(tf.global_variables())
g2 = tf.Graph()
with g2.as_default():
g2v1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1), name='g2v1')
g2v2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1), name='g2v2')
g2x = tf.constant([[0.7, 0.9]], name='g2x')
# g2.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)
with g2.as_default():
print(tf.global_variables())
print(tf.global_variables())
with tf.Session(graph=g2) as sess:
sess.run(g2v2.initializer)
print(g2v2.eval())
# sess.run(g1v1.initializer)
# 报错,因为g2图中没有g2v2
上面三代码中一共有三个图,一个是默认的图,第二个是g1,最后一个是g2,三者互不共享
另外,只要在with外面定义变量,就会被丢进默认图中
g2.clear_collections(tf.GraphKeys.GLOBAL_VARIABLE)
清空某个图的全局变量
第四节 TensorFlow实现神经网络
- 常量 constant
import tensorflow as tf
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([2.0, 3.0], name="b")
result=tf.add(a,b,'add')
sess = tf.InteractiveSession ()
print(a.eval())
print(b.eval())
print(result.eval())
sess.close()
sess = tf.Session ()
print(result.eval(session=sess))
print(sess.run(result))
sess.close()
a和b都是常量,在会话中可以直接取出他们的值
- 变量
import tensorflow as tf
weights = tf.Variable(initial_value=[1,2])
print(sess.run(weights.initializer))
#None,初始化,做的事就是计算[1,2],然后赋给weights
print(weights.eval())
#数字,获取weights里的值
print(sess.run(weights.initial_value))
#重新计算initial_value,也就是[1,2]这个成员变量,这不是weights里的值,尽管他们大小相同,但这是不同的东西
import tensorflow as tf
#initial_value也可以是生成器
weights = tf.Variable(initial_value=tf.random_normal([2, 3], stddev=2))
print(sess.run(weights.initializer))
#None,初始化,做的事就是计算tf.random_normal([2, 3], stddev=2),然后把值赋给weights
print(weights.eval())
#数字,获取weights里的值
print(sess.run(weights.initial_value))
#计算initial_value,也就是tf.random_normal([2, 3], stddev=2)这个成员变量
#所以sess.run(weights.initial_value)就是sess.run(tf.random_normal([2, 3], stddev=2)),是运算tf.random_normal([2, 3], stddev=2)这个tensor,所以他产生的值和weights里其实没什么关系
再结合图3-7就能理解了