态尝试:
我是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维输入/输出。