【发布时间】:2019-10-24 02:54:56
【问题描述】:
假设我有一个张量(None, 2, 56, 56, 256)。现在我想通过删除最后一列和最后一行来获得形状为(None, 2, 55, 55, 256) 的张量。如何使用 Keras/Tensorflow 实现这一目标?
【问题讨论】:
标签: tensorflow keras tensor
假设我有一个张量(None, 2, 56, 56, 256)。现在我想通过删除最后一列和最后一行来获得形状为(None, 2, 55, 55, 256) 的张量。如何使用 Keras/Tensorflow 实现这一目标?
【问题讨论】:
标签: tensorflow keras tensor
在 tensorflow 中,我们可以使用 python slice notation 对张量进行切片。所以,给定一个形状为(20,2,56,56,256) 的张量X 说(如您所描述的,但批量大小为20),我们可以轻松地将它切片,除了第二维和第三维中的最后一个“行”之外,如下所示:
X[:,:,:-1,:-1,:]
注意使用:-1 表示“最后'行'之前的所有内容”。
鉴于在 tensorflow 中对张量进行切片的知识,我们只需要针对 keras 进行调整即可。当然,我们可以写一个完整的custom layer 来实现这个(或者甚至可能找到一个其他人写的——我没看过但切片很常见,所以怀疑有人在某个地方写了一些东西!)。
但是,对于这么简单的事情,我建议只使用 Lambda layer,我们可以定义如下:
my_slicing_layer = Lambda(lambda x: x[:,:,:-1,:-1,:], name='slice')
并且可以在我们的 keras 模型中正常使用:
my_model = Sequential([
Activation('relu', input_shape=(2,56,56,256)),
my_slicing_layer
])
【讨论】: