如何在Tensorflow中正确获取形状以便我可以再次重塑?

时间:2017-07-29 15:58:41

标签: python tensorflow deep-learning

我正在尝试执行以下代码

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是一个正确的张量流节点,可以在稍后的会话中计算?

2 个答案:

答案 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))

但是,如果没有看到更多代码,我无法确定。例如,如果您的神经网络被设计为卷积,那么重塑它是错误的