2017-09-26 290 views
1

我想通过插值(比如说使用最近的邻居)来调整尺寸say(None,2,7,512)到(None,2,8,512)张量(层之间),类似于这个函数tf.image.resize_nearest_neighbor可在Tensorflow中获得。如何在Keras中调整(插入)张量?

有没有办法做到这一点?

我试图直接使用Tensorflow功能tf.image.resize_nearest_neighbor和通过张量到下一个Keras层,但与下一层这个错误被抛出:

AttributeError: 'Tensor' object has no attribute '_keras_history'

我相信这是由于一些属性是在Tensorflow张量中丢失,这是合理的,因为该层期望Keras张量被传递。

+0

'*(p-1)+ *(p + 1)' – ikegami

回答

2

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

2

令人惊讶的是,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层中使用的张量直接从tensorflow,作为丢失了一些额外的属性(一个keras张量需要)。此外,虽然Lambda层非常易于使用,但如果keras允许在未来通过keras图层直接使用tensorflow中的张量(如果可能),那将非常方便。

+0

对,我们不需要重复图层,并且可以在lambda内完成。 – xtof54