为了在单通道图像和1维张量之间进行keras连接操作,我需要重新构造我的1维张量的长度以匹配两个图像尺寸并且填充所有带有零的额外神经元。我怎么能这样做?
显示等效问题的示例代码:
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:连接图层要求输入具有匹配的形状,但concat轴除外。得到输入形状:[(无,26,26,10),(无,10)]
当然,我不能在一维张量上使用Reshape来做这个,因为它没有正确数量的神经元,我不想压扁和重塑卷积层,因为这会导致丢失有用的空间信息。
有没有什么方法可以使用numpy数组来创建一个包含dense_layer
数据和填充的新形状的keras图层?
答案 0 :(得分:0)
好的,Keras ZeroPadding1D层是我需要的。 (线索在名称中)。
elem
输出:(无,26,26,11)
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)
是一个一维数组,由333个零,10个来自dense_zero_padded
的值和另外333个零组成。然后将其重新整形为(26,26,1)张量,它可以很好地堆叠在dense_layer
的过滤图像上。