tensorflow使用时的问题,计算图
(一)计算图在调用时才有
def add():
#如果仅在
a1 = tf.placeholder(tf.float32)
b1 = tf.placeholder(tf.float32)
c = tf.add(a1,b1)
return c
def main(_):
a = tf.constant(5)
b = tf.constant(3)
c = add(a,b)
#在执行add这个函数的时候是没有计算图的
with tf.Session() as sess:
print(sess.run(c)
上面代码中的a,b时常量
(二)计算图可以传递参数
# 导入tensorflow框架
import tensorflow as tf
import numpy as np
# 导入mnist数据集输入方法
#from tensorflow.examples.tutorials.mnist import input_data
import lib.dataset as mnist
import os
def add(a,b):
c = tf.add(a1,b1)
return c
def main(_):
#a = tf.constant(5)
#b = tf.constant(3)
#变量
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
c = add(a,b)
#在执行add这个函数的时候是没有计算图的
with tf.Session() as sess:
print(sess.run(c,feed_dict={a:2,b:3}))
if __name__ == "__main__":
tf.app.run()
可以用tf.placeholder占位符来占位置,之后用feed_dict传递值
(三)如果占位符被申明在函数里
# 导入tensorflow框架
import tensorflow as tf
import numpy as np
# 导入mnist数据集输入方法
#from tensorflow.examples.tutorials.mnist import input_data
import lib.dataset as mnist
import os
def add():
#如果仅在
a1 = tf.placeholder(tf.float32)
b1 = tf.placeholder(tf.float32)
c = tf.add(a1,b1)
return c
def main(_):
c = add()
#在执行add这个函数的时候是没有计算图的
with tf.Session() as sess:
print(sess.run(c, feed_dict={a1: 3, b1: 5}))
print(sess.run(c, feed_dict={a1: 7, b1: 9}))
if __name__ == "__main__":
tf.app.run()
上面的代码会出现问题,因为add()函数申明的a1,b1对主函数不可见
如果的确想要在函数中申明变量,可以通过返回a1,b1,代码如下
# 导入tensorflow框架
import tensorflow as tf
import numpy as np
# 导入mnist数据集输入方法
#from tensorflow.examples.tutorials.mnist import input_data
import lib.dataset as mnist
import os
def add():
#如果仅在
a1 = tf.placeholder(tf.float32)
b1 = tf.placeholder(tf.float32)
c = tf.add(a1,b1)
return a1,b1,c
def main(_):
a2,b2,c = add()
#在执行add这个函数的时候是没有计算图的
with tf.Session() as sess:
print(sess.run(c,feed_dict={a2:2,b2:3}))
print(sess.run(c, feed_dict={a1: 3, b1: 5}))
if __name__ == "__main__":
tf.app.run()
上面的代码中第一个print正确执行,第二个print出错,找不到a1,b1