1

我是 tensorflow.keras 的初学者,我想知道如何创建一个特定形状的恒定零张量。

例如:

zeros = tf.keras.backend.zeros((someTensor.shape[0], someTensor.shape[1], someTensor.shape[2], channels))
concat = tf.kerasbackend.concatenate([someTensor, zeros], axis=3)

tf.keras.backend.zeros 操作失败,原因如下:

ValueError: Cannot convert a partially known TensorShape to a Tensor

我想那是因为在图形构建过程中批量大小是未知的。当我当时不知道批量大小时,如何创建 ZeroTensor 或任何其他常量张量?还是我可以指定某种未知(?)值?

4

1 回答 1

0

这很奇怪,因为您使用的是张量和整数的元组。有点奇怪。

你应该:

shape = K.shape(someTensor)
ch = K.variable([channels]) #I think K.constant also works. 
newShape = K.concatenate([shape[:3], ch])

zeros = K.zeros(newShape)

现在,如果由于未知形状而这不起作用,那么一个肮脏的解决方法是:

#if someTensor is 3D
    zeros = K.zeros_like(someTensor)
    zeros = K.stack([zeros] * channels, axis=-1) 

#if someTensor is 4D
    zeros = K.zeros_like(someTensor[:,:,:,0])
    zeros = K.stack([zeros]*channels, axis=-1)
于 2019-08-19T18:57:26.923 回答