如何在 Keras 中调整(插值)张量?
How to resize (interpolate) a tensor in Keras?
我想调整大小为 (None, 2, 7, 512) 的张量(层间)到 (None, 2, 8, 512),方法是对它进行插值 (比如说使用最近的邻居),类似于 Tensorflow 中提供的这个函数 tf.image.resize_nearest_neighbor
。
有什么办法吗?
我尝试直接使用 Tensorflow 函数 tf.image.resize_nearest_neighbor
并将张量传递到下一个 Keras 层,但是在下一个层抛出了这个错误:
AttributeError: 'Tensor' object has no attribute '_keras_history'
我认为这是由于 Tensorflow 张量中缺少一些属性,这是有道理的,因为该层期望传递 Keras 张量。
我会使用 Repeat 添加一个元素并将插值实现为一个新的 lambda 层。我认为 keras 中没有现成的图层。
令人惊讶的是,keras 中不存在对张量进行这种插值的 layer/function(正如 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 的张量(如果可能的话),那将非常方便。
我想调整大小为 (None, 2, 7, 512) 的张量(层间)到 (None, 2, 8, 512),方法是对它进行插值 (比如说使用最近的邻居),类似于 Tensorflow 中提供的这个函数 tf.image.resize_nearest_neighbor
。
有什么办法吗?
我尝试直接使用 Tensorflow 函数 tf.image.resize_nearest_neighbor
并将张量传递到下一个 Keras 层,但是在下一个层抛出了这个错误:
AttributeError: 'Tensor' object has no attribute '_keras_history'
我认为这是由于 Tensorflow 张量中缺少一些属性,这是有道理的,因为该层期望传递 Keras 张量。
我会使用 Repeat 添加一个元素并将插值实现为一个新的 lambda 层。我认为 keras 中没有现成的图层。
令人惊讶的是,keras 中不存在对张量进行这种插值的 layer/function(正如 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 的张量(如果可能的话),那将非常方便。