在 Keras 中,如何任意调整一维张量的大小?

Posted

技术标签:

【中文标题】在 Keras 中,如何任意调整一维张量的大小?【英文标题】:In Keras, how can I arbitrarily resize a 1D Tensor? 【发布时间】:2017-07-27 19:57:56 【问题描述】:

为了使单通道图像和一维张量之间的 keras 连接操作成为可能,我需要重塑我的一维张量的长度以匹配两个图像尺寸并 填充所有带零的额外神经元。我该怎么做?

显示等效问题的示例代码:

from keras.layers import Input, Dense, Conv2D, Reshape, concatenate

inputs = Input(shape = (784,))

dense_layer = Dense(10)(inputs)

reshaped_layer = Reshape((28, 28, 1))(inputs)

convolved_layer = Conv2D(10, (3, 3))(reshaped_layer)

concatenated_layer = concatenate([convolved_layer, dense_layer])

ValueError:连接层需要具有匹配形状的输入,连接轴除外。得到输入形状:[(None, 26, 26, 10), (None, 10)]

当然,我不能在一维张量上使用 Reshape 来执行此操作,因为它没有正确数量的神经元,而且我不想展平和重塑卷积层,因为这会涉及丢失有用的空间信息。 有什么方法可以让我使用 numpy 数组制作一个形状正确的新 keras 层,其中包含 dense_layer 数据和填充?

【问题讨论】:

那么,你有一个形状为 (26, 26, 10) 的张量 A 和一个形状为 (10,) 的张量 B,你想将它们连接在一起吗?你想怎么做?这样你就有了一个形状为 (27, 27, 10) 的张量 C,其中 C[-1, -1, :] = B? 好吧,由于 convolved_layer 是 10 个 26x26 过滤图像的堆栈,我可以将dense_layer 形成一个 26x26 像素的图像,其中前 10 个像素是密集层的值(和其余的都是零),并将其放在 10 个过滤图像的顶部。在这种情况下,concatenated_layer 的最终尺寸将是 (26, 26, 11)。 【参考方案1】:

好的,我需要 Keras ZeroPadding1D 层。 (线索就在名字里)。

from keras.layers import Input, Dense, Conv2D, Reshape, concatenate, ZeroPadding1D

inputs = Input(shape = (784,))

dense_layer = Dense(10)(inputs)

dense_layer_with_added_axis = Reshape((10, 1))(dense_layer)

dense_zero_padded = ZeroPadding1D(333)(dense_layer_with_added_axis)

dense_reshaped = Reshape((26, 26, 1))(dense_zero_padded)

reshaped_layer = Reshape((28, 28, 1))(inputs)

convolved_layer = Conv2D(10, (3, 3))(reshaped_layer)

concatenated_layer = concatenate([convolved_layer, dense_reshaped])

print(concatenated_layer._keras_shape)

输出:(无,26、26、11)

ZeroPadding1D 层的参数是在输入张量的任一侧添加的零的数量。所以在这种情况下,dense_zero_padded 层是一个一维数组,由 333 个零、来自dense_layer 的 10 个值和另外 333 个零组成。然后将其重新整形为 (26, 26, 1) 张量,它可以很好地堆叠在 convolved_layer 的过滤图像之上。

【讨论】:

以上是关于在 Keras 中,如何任意调整一维张量的大小?的主要内容,如果未能解决你的问题,请参考以下文章

keras中一维卷积网络的输入维度

Keras:构造一个与给定张量具有相同批量大小的完整张量

如何调整 PyTorch 张量的大小?

Keras和张量流连接和拟合错误

如何在 Keras 中使用张量板显示输入张量

如何从给定的索引和值列表创建一维稀疏张量?