如何在Keras中调整(插值)张量?

时间:2017-09-26 05:21:25

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

我想通过插值(比如使用最近邻居)来调整大小说(无,2,7,512)到(无,2个,8个,512个)的张量(在层之间),类似于此函数Tensorflow中提供tf.image.resize_nearest_neighbor

有没有办法做到这一点?

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

  

属性错误:' Tensor'对象没有属性' _keras_history'

我认为这是由于Tensorflow张量中缺少的一些属性,这有意义,因为该层期望Keras张量传递。

2 个答案:

答案 0 :(得分:3)

令人惊讶的是,keras中没有现有的层/函数来执行张量的插值(如xtof54所指出的)。所以,我使用lambda层实现了它,它工作正常。

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

resized_tensor = Lambda(resize_like, arguments={'ref_tensor':ref_tensor})(input_tensor)

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

答案 1 :(得分:2)

我会使用Repeat添加一个元素并将插值实现为新的lambda图层。我不认为在keras中存在这样的现有层。