我是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(?)值?
答案 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)