连续的Keras模型可以获取未扁平的多维输入(例如图像)(即输入形状为每个图像的MXN像素)



我是KERAS的初学者,并且正在尝试构建最简单的自动编码器。它由三层组成:一个输入层,一个编码的表示层和一个输出层。我的数据(培训和验证图像(是一个NDARRAY,每个图像为214x214x3(Pixels X Pixels X RGB通道(。我以为我可以在输入层中使用图像的输入形状,但是我不知何故遇到错误。

我尝试将数据弄平,这很好。我当然可以这样做,然后重塑输出,但是我很好奇为什么这不起作用。

# Shape and size of single image
input_shape = x_tr.shape[1:] # --> (214, 214, 3)
input_size = x_tr[0].size
# Size of encoded representation
encoding_dim = 32
compression_factor = float(input_size / encoding_dim)
# Build model
autoencoder = Sequential()
autoencoder.add(Dense(encoding_dim, input_shape=input_shape, 
    activation='relu'))
autoencoder.add(Dense(input_shape, activation='softmax'))
input_img = Input(shape=(input_shape,))
encoder_layer = autoencoder.layers[0]
encoder = Model(input_img, encoder_layer(input_img))
autoencoder.compile(optimizer='adadelta', loss='mean_squared_error')
autoencoder.fit(x_tr, x_tr,
                epochs=50,
                batch_size=32,
                shuffle=True,
                verbose=1,
                validation_data=(x_va, x_va),
                callbacks=[TensorBoard(log_dir='/tmp/autoencoder2')])

我得到此错误:

TypeError: unsupported operand type(s) for +: 'int' and 'tuple'

我收集到的是,它不希望输入形状看起来像这样,但是不确定如何修复它以接受214x214x3的形状,而不是长度的向量137388。

态尝试:
output_dim = 214 * 214 * 3
autoencoder.add(Dense(output_dim, activation='softmax'))

您需要弄平输入/输出,完全连接的密度层期望1维输入/输出。

最新更新