我正在尝试使用以下代码构建一个自编码器
对于我的训练数据,我使用的是:
img_height = 328img_width = 328train_ds = tf.keras.preprocessing.image_dataset_from_directory( data_dir, validation_split=0.2, subset="training", seed=123, image_size=(img_height, img_width), batch_size=batch_size)val_ds = tf.keras.preprocessing.image_dataset_from_directory( data_dir, validation_split=0.2, subset="validation", seed=123, image_size=(img_height, img_width), batch_size=batch_size)
当我尝试使用autoencoder.fit(train_ds,validation_data=val_ds,epochs=50)运行时,我得到了ValueError: logits和labels的形状必须相同((None, 328, 328, 3) vs (None, 1))
有人知道如何解决这个问题吗?
回答:
对于自编码器,你的目标需要是你的输入。你试图最小化的错误是重构损失,因此输出需要是你的原始输入。默认情况下,Keras目录迭代器会返回目标(例如,0和1),而不是输入。
generator = tf.keras.preprocessing.image.ImageDataGenerator( validation_split=0.2)
指定class_mode='input'
。请注意,我似乎使用了不同的版本,所以我不得不将image_size
替换为target_size
以便它能够为我运行。
train_ds = generator.flow_from_directory( data_dir, subset="training", seed=123, image_size=(img_height, img_width), batch_size=batch_size, class_mode='input')
这是一个使用生成数据的完整工作示例,它使用了你提供的自编码器架构:
Train for 1 steps1/1 [==============================] - 9s 9s/step - loss: 0.8827