【问题标题】:How to resize (interpolate) a tensor in Keras?如何在 Keras 中调整(插值)张量的大小?
【发布时间】:2017-09-26 05:21:25
【问题描述】:

我想通过插值(比如使用最近邻)将张量(层之间)的大小(例如(None, 2, 7, 512))调整为(None, 2, 8, 512),类似于这个函数tf.image.resize_nearest_neighbor 在 Tensorflow 中可用。

有没有办法做到这一点?

我尝试直接使用 Tensorflow 函数 tf.image.resize_nearest_neighbor 并将张量传递给下一个 Keras 层,但是在下一层时抛出了这个错误:

AttributeError: 'Tensor' 对象没有属性 '_keras_history'

我相信这是由于 Tensorflow 张量中缺少某些属性,这是有道理的,因为该层期望通过 Keras 张量。

【问题讨论】:

  • *(p-1) + *(p+1)

标签: python tensorflow deep-learning keras keras-2


【解决方案1】:

令人惊讶的是,keras 中没有现有的层/函数可以对张量进行这种插值(如 xtof54 所指出的那样)。因此,我使用 lambda 层实现了它,并且效果很好。

    def resize_like(input_tensor, ref_tensor): # resizes input tensor wrt. ref_tensor
        H, W = ref_tensor.get_shape()[1], ref_tensor.get_shape()[2]
        return tf.image.resize_nearest_neighbor(input_tensor, [H.value, W.value])

首先,问题是由于在 Keras 层中直接使用来自 tensorflow 的张量,因为缺少一些附加属性(keras 张量所必需的)。此外,虽然 Lambda 层很容易使用,但如果 keras 允许在 keras 层中直接使用来自 tensorflow 的张量(如果可能的话),那将非常方便。

【讨论】:

  • 对,我们不需要Repeat层,可以在lambda中完成。
【解决方案2】:

我会使用 Repeat 添加一个元素并将插值实现为新的 lambda 层。我认为 keras 中没有现有的层。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 2020-02-28
    • 2015-06-08
    • 2018-11-16
    • 1970-01-01
    • 2019-04-21
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多