2017-09-26 49 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