张量恒定,大小可变

Eva*_* Pu 13 tensorflow

我有一个可变的批量大小,所以我的所有输入都是表格

tf.placeholder(tf.float32, shape=(None, ...)
Run Code Online (Sandbox Code Playgroud)

接受可变批量大小.但是,如何使用可变批量大小创建常量值?问题在于这一行:

log_probs = tf.constant(0.0, dtype=tf.float32, shape=[None, 1])
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误:

TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
Run Code Online (Sandbox Code Playgroud)

我确信可以用可变批量大小初始化一个恒定张量,我该怎么做?

我也尝试过以下方法:

tf.constant(0.0, dtype=tf.float32, shape=[-1, 1])
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ValueError: Too many elements provided. Needed at most -1, but received 1
Run Code Online (Sandbox Code Playgroud)

mrr*_*rry 33

A tf.constant()在图形构建时具有固定的大小和值,因此它可能不适合您的应用程序.

如果您尝试为每个元素创建具有动态大小和相同(常量)值的张量,则可以使用tf.fill()tf.shape()创建适当形状的张量.例如,要创建一个与各处t具有相同形状input和值的张量0.5:

input = tf.placeholder(tf.float32, shape=(None, ...))

# `tf.shape(input)` takes the dynamic shape of `input`.
t = tf.fill(tf.shape(input), 0.5)
Run Code Online (Sandbox Code Playgroud)

正如雅罗斯拉夫在评论中提到的那样,你也可以使用(NumPy式)广播来避免实现具有动态形状的张量.例如,如果input具有形状(None, 32)t具有形状,(1, 32)则计算tf.mul(input, t)t在第一维上广播以匹配形状input.