【问题标题】:How to drop last row and last col in a tensor using Keras Tensorflow如何使用 Keras Tensorflow 删除张量中的最后一行和最后一列
【发布时间】:2019-10-24 02:54:56
【问题描述】:

假设我有一个张量(None, 2, 56, 56, 256)。现在我想通过删除最后一列和最后一行来获得形状为(None, 2, 55, 55, 256) 的张量。如何使用 Keras/Tensorflow 实现这一目标?

【问题讨论】:

标签: tensorflow keras tensor


【解决方案1】:

在 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
])

【讨论】:

  • 啊,我不知道我们可以像通常的数组一样对待 Tensorflow 中的张量。谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
相关资源
最近更新 更多