Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 变尺寸张量流常数_Tensorflow - Fatal编程技术网

Tensorflow 变尺寸张量流常数

Tensorflow 变尺寸张量流常数,tensorflow,Tensorflow,我有一个可变的批量大小,所以我所有的输入都是 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.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在图形构建时具有固定的大小和值,因此它可能不适合您的应用程序

如果试图创建具有动态大小且每个元素的值相同(恒定)的张量,可以使用和创建形状适当的张量。例如,要创建与
input
形状相同的张量
t
,并且值
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)

同样,您也可以使用来避免用动态形状具体化张量。例如,如果
input
具有形状
(无,32)
t
具有形状
(1,32)
,则计算
tf.mul(input,t)
将在第一维度上广播
t
,以匹配
input

的形状,假设您想使用
log probs
执行某些操作。例如,您希望对张量
v
和常数
log\u 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\u probs
。然而,首先,您可以使用shape=[1]
log\u prob=tf.constant(0.0,dtype=tf.float32,shape=[None,1])构造tf.constant
。然后使用
tf.map\u 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.constant”显式构造数组,因此它需要知道维度。然而,许多tensorflow操作都支持广播,所以您可以使用它来代替吗?如果我希望形状仅取决于批次大小,该怎么办?假设我的输入张量为shape
(batch\u size、height、width、num\u channels)
,其中batch\u size为None。我想创建一个用值填充的形状张量
(批量大小)
。你可以使用相同的方法:
height\u vector=tf.fill(tf.shape(输入张量)[0:1],tf.shape(输入张量)[1])
。这也很好:
height\u vector=tf.fill([tf.shape(输入张量)[0],tf.shape(输入张量)[1])