我正在使用表示图像和字幕的向量来执行图像字幕任务。
字幕矢量的长度/尺寸为 128。图像矢量的长度/尺寸为 2048。
我想要做的是训练一个自动编码器,以获得一个能够将文本向量转换为图像向量的编码器。以及能够将图像向量转换为文本向量的解码器。
编码器:128 -> 2048。
解码器:2048 -> 128。
我按照本教程实现了一个浅层网络来做我想做的事情。
但我不知道如何按照相同的教程创建深度网络。
x_dim = 128
y_dim = 2048
x_dim_shape = Input(shape=(x_dim,))
encoded = Dense(512, activation='relu')(x_dim_shape)
encoded = Dense(1024, activation='relu')(encoded)
encoded = Dense(y_dim, activation='relu')(encoded)
decoded = Dense(1024, activation='relu')(encoded)
decoded = Dense(512, activation='relu')(decoded)
decoded = Dense(x_dim, activation='sigmoid')(decoded)
# this model maps an input to its reconstruction
autoencoder = Model(input=x_dim_shape, output=decoded)
# this model maps an input to its encoded representation
encoder = Model(input=x_dim_shape, output=encoded)
encoded_input = Input(shape=(y_dim,))
decoder_layer1 = autoencoder.layers[-3]
decoder_layer2 = autoencoder.layers[-2]
decoder_layer3 = autoencoder.layers[-1]
# create the decoder model
decoder = Model(input=encoded_input, output=decoder_layer3(decoder_layer2(decoder_layer1(encoded_input))))
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
autoencoder.fit(training_data_x, training_data_y,
nb_epoch=50,
batch_size=256,
shuffle=True,
validation_data=(test_data_x, test_data_y))
training_data_x 和 test_data_x 有 128 个维度。training_data_y 和 test_data_y 有 2048 个维度。
我在尝试运行时收到的错误如下:
例外:检查模型目标时出错:预期dense_6具有形状(无,128)但得到的数组具有形状(32360、2048)
dense_6 是最后解码的变量。