可变大小的张量流常量
tensorflow constant with variable size
我的批量大小可变,所以我所有的输入都是
的形式
tf.placeholder(tf.float32, shape=(None, ...)
接受可变批量大小。但是,如何创建具有可变批量大小的常量值?问题出在这一行:
log_probs = tf.constant(0.0, dtype=tf.float32, shape=[None, 1])
给我一个错误:
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
我确定可以使用可变批量大小初始化常量张量,我该怎么做?
我也试过以下方法:
tf.constant(0.0, dtype=tf.float32, shape=[-1, 1])
我收到这个错误:
ValueError: Too many elements provided. Needed at most -1, but received 1
A tf.constant()
在图形构造时具有固定大小和值,因此它可能不适合您的应用程序。
如果您尝试创建一个具有动态大小且每个元素都具有相同(恒定)值的张量,您可以使用 tf.fill()
and 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)
As , you may also be able to use (NumPy-style) broadcasting 以避免具体化具有动态形状的张量。例如,如果 input
具有 (None, 32)
的形状并且 t
具有 (1, 32)
的形状,那么计算 tf.mul(input, t)
将在第一个维度上广播 t
以匹配input
.
的形状
假设您想使用 log_probs
做某事。例如,您想对张量 v
和常量 log_probs
进行幂运算。并且您希望 log_probs 的形状随 v 的形状而变化。
v = tf.placeholder(tf.float32, shape=(None, 1)
log_probs = tf.constant(0.0, dtype=tf.float32, shape=[None, 1])
result = tf.pow(v, log_probs)
但是,您不能构造常量log_probs
。首先,你可以用形状 =[1] log_prob = tf.constant(0.0, dtype=tf.float32, shape=[None, 1])
构造 tf.constant。然后用tf.map_fn()
对v的每个元素做pow运算。
v = tf.placeholder(tf.float32, shape=(None, 1)
log_prob = tf.constant(0.0, dtype=tf.float32, shape=[1])
result = tf.map_fn(lambda ele : tf.pow(ele, log_prob), v)
我的批量大小可变,所以我所有的输入都是
的形式tf.placeholder(tf.float32, shape=(None, ...)
接受可变批量大小。但是,如何创建具有可变批量大小的常量值?问题出在这一行:
log_probs = tf.constant(0.0, dtype=tf.float32, shape=[None, 1])
给我一个错误:
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
我确定可以使用可变批量大小初始化常量张量,我该怎么做?
我也试过以下方法:
tf.constant(0.0, dtype=tf.float32, shape=[-1, 1])
我收到这个错误:
ValueError: Too many elements provided. Needed at most -1, but received 1
A tf.constant()
在图形构造时具有固定大小和值,因此它可能不适合您的应用程序。
如果您尝试创建一个具有动态大小且每个元素都具有相同(恒定)值的张量,您可以使用 tf.fill()
and 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)
As input
具有 (None, 32)
的形状并且 t
具有 (1, 32)
的形状,那么计算 tf.mul(input, t)
将在第一个维度上广播 t
以匹配input
.
假设您想使用 log_probs
做某事。例如,您想对张量 v
和常量 log_probs
进行幂运算。并且您希望 log_probs 的形状随 v 的形状而变化。
v = tf.placeholder(tf.float32, shape=(None, 1)
log_probs = tf.constant(0.0, dtype=tf.float32, shape=[None, 1])
result = tf.pow(v, log_probs)
但是,您不能构造常量log_probs
。首先,你可以用形状 =[1] log_prob = tf.constant(0.0, dtype=tf.float32, shape=[None, 1])
构造 tf.constant。然后用tf.map_fn()
对v的每个元素做pow运算。
v = tf.placeholder(tf.float32, shape=(None, 1)
log_prob = tf.constant(0.0, dtype=tf.float32, shape=[1])
result = tf.map_fn(lambda ele : tf.pow(ele, log_prob), v)