【TensorFlow】Chapter3-从入门到不会

第一节 TensorFlow计算模型

  1. 图 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实现神经网络

  1. 常量 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都是常量,在会话中可以直接取出他们的值

  1. 变量
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就能理解了

猜你喜欢

转载自blog.csdn.net/dominic_z/article/details/88533643
今日推荐