【问题标题】:How to create Keras ZeroTensor of specific shape如何创建特定形状的 Keras ZeroTensor
【发布时间】:2019-08-19 14:00:27
【问题描述】:

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

【问题讨论】:

  • 您可以尝试改用tf.keras.backend.shape(someTensor)。如果我没记错的话,这就是我在使用 'tf.keras' 制作 tensorflow 子类化模型时通常会得到“未知”batch_size 的方式。

标签: tensorflow keras tf.keras


【解决方案1】:

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

你应该:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多