如何创建特定形状的Keras ZeroTensor

时间:2019-08-19 14:00:27

标签: tensorflow keras tf.keras

我是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或任何其他恒定张量?还是我可以指定某种unknown(?)值?

1 个答案:

答案 0 :(得分: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)