我正在尝试执行以下代码
def f(x):
(_, H, W, C) = tf.shape(x)
x_reshaped = tf.reshape(x, (-1,C))
res = x_reshaped/(H*W*C)
return res
但是,这里的问题显然是我不知道H,W先进,所以他们是?,?因此,重塑和乘法不起作用。现在我的问题是,如何正确地执行上述计算,以便res
是一个正确的张量流节点,可以在稍后的会话中计算?
答案 0 :(得分:1)
以下内容应该有效:
X = tf.placeholder(tf.float32, shape=[None, None, None, 40])
def f(x):
s = tf.shape(x)
x_reshaped = tf.reshape(x, [-1,s[3]])
res = tf.div(x_reshaped, tf.cast((s[0]*s[1]*s[2]), tf.float32))
return res
out = f(X)
sess = tf.Session()
sess.run(out, {X:np.random.normal(size=(10,20,30,40))})
答案 1 :(得分:0)
我假设您希望x
成型(batch_size, H*W*C)
,这意味着x
中的每个项目都是"扁平化的"图像数据。在这种情况下,正确的代码是:
x_reshaped = tf.reshape(x, (-1, H*W*C))
但是,如果没有看到更多代码,我无法确定。例如,如果您的神经网络被设计为卷积,那么重塑它是错误的