gpt4 book ai didi

python - tf.reshape 没有为第一个元素提供 ?(None)

转载 作者:行者123 更新时间:2023-12-04 21:28:51 28 4
gpt4 key购买 nike

我是 tensorflow 的新手,我有如下的张量,

a = tf.constant([[1, 2, 3], [4, 5, 6]])
a.shape 的输出是

TensorShape([Dimension(2), Dimension(3)])



对于我的计算过程,我想将张量 reshape 为 (?, 2, 3)
我无法将其 reshape 为所需的格式。

我试过,
tf.reshape(a, [-1, 2, 3])

但它回来了,
<tf.Tensor 'Reshape_18:0' shape=(1, 2, 3) dtype=int32> # 1 has to be replaced by ?

我进一步尝试,
tf.reshape(a, [-1, -1, 2, 3])

它返回,
<tf.Tensor 'Reshape_19:0' shape=(?, ?, 2, 3) dtype=int32> # two ? are there

我怎样才能得到想要的结果?

对不起,如果这听起来很简单的问题。

最佳答案

“问题”是 TensorFlow 尽可能多地进行形状推断,这通常是件好事,但如果您明确想要 None,它会使事情变得更加复杂。方面。不是一个理想的解决方案,但一种可能的解决方法是使用 tf.placeholder_with_default ,例如像这样:

import tensorflow as tf

a = tf.constant([[1, 2, 3], [4, 5, 6]])
# This placeholder is never actually fed
z = tf.placeholder_with_default(tf.zeros([1, 1, 1], a.dtype), [None, 1, 1])
b = a + z
print(b)
# Tensor("add:0", shape=(?, 2, 3), dtype=int32)

或另一个类似的选项,只是 reshape :
import tensorflow as tf

a = tf.constant([[1, 2, 3], [4, 5, 6]])
s = tf.placeholder_with_default([1, int(a.shape[0]), int(a.shape[1])], [3])
b = tf.reshape(a, s)
b.set_shape(tf.TensorShape([None]).concatenate(a.shape))
print(b)
# Tensor("Reshape:0", shape=(?, 2, 3), dtype=int32)

关于python - tf.reshape 没有为第一个元素提供 ?(None),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58620552/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com