作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我希望有人能解释 Keras 中的输入层和 Tensorflow 中的占位符之间的区别(如果有的话)?
我调查的越多,两者看起来就越相似,但到目前为止我还不能 100% 相信这两种方式。
以下是我观察到的支持输入层和 tf 占位符相同的说法:
1) 从keras.Input() 返回的张量可以像tf.Session 的run 方法的feed_dict 中的占位符一样使用。这是使用 Keras 的简单示例的一部分,它添加了两个张量(a 和 b)并将结果与第三个张量 (c) 连接:
model = create_graph()
con_cat = model.output[0]
ab_add = model.output[1]
# These values are used equivalently to tf.Placeholder() below
mdl_in_a = model.input[0]
mdl_in_b = model.input[1]
mdl_in_c = model.input[2]
sess = k.backend.get_session()
a_in = rand_array() # 2x2 numpy arrays
b_in = rand_array()
c_in = rand_array()
a_in = np.reshape( a_in, (1,2,2))
b_in = np.reshape( b_in, (1,2,2))
c_in = np.reshape( c_in, (1,2,2))
val_cat, val_add = sess.run([con_cat, ab_add],
feed_dict={ mdl_in_a: a_in, mdl_in_b: b_in, mdl_in_c: c_in})
2) 来自 Tensorflow Contrib 的关于 Keras 的文档 Input Layer在其参数描述中提及占位符:
"sparse: A boolean specifying whether the placeholder to be created is sparse"
以下是我观察到的支持输入层和 tf 占位符不相同的说法的观点:
1) 我看到人们使用 tf.Placeholder 代替输入层返回的张量。像这样的东西:
a_holder = tf.placeholder(tf.float32, shape=(None, 2,2))
b_holder = tf.placeholder(tf.float32, shape=(None, 2,2))
c_holder = tf.placeholder(tf.float32, shape=(None, 2,2))
model = create_graph()
con_cat, ab_add = model( [a_holder, b_holder, c_holder])
sess = k.backend.get_session()
a_in = rand_array() # 2x2 numpy arrays
b_in = rand_array()
c_in = rand_array()
a_in = np.reshape( a_in, (1,2,2))
b_in = np.reshape( b_in, (1,2,2))
c_in = np.reshape( c_in, (1,2,2))
val_cat, val_add = sess.run([con_cat, ab_add],
feed_dict={ a_holder: a_in, b_holder: b_in, c_holder: c_in})
最佳答案
Input() 返回创建的占位符的句柄,并且不创建其他 tf 运算符;张量既代表操作的输出又代表占位符,因此没有矛盾。
要分析 Input() 究竟创建了什么,让我们运行以下代码:
with tf.name_scope("INPUT_LAYER"):
input_l = Input(shape = [n_features])
然后:
writer = tf.summary.FileWriter('./my_graph', tf.get_default_graph())
writer.close()
然后从您的控制台启动 Tensorboard:
tensorboard --logdir="./my_graph"
关于python - Keras 输入层和 Tensorflow 占位符之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44689887/
我是一名优秀的程序员,十分优秀!