我'm training a convolutional autoencoder for IR faces, this is my first time doing autoencoder. I have about 1300 training images, and I didn'吨使用任何调节方法 . 这是我在800个时代之后得到的:top: test images, bottom: output from autoencoder .

这是我的训练曲线:top: training loss, bottom: validation loss . 验证丢失使用与训练集分离的测试集图像 . 最后,训练损失约为0.006,但验证损失为0.009 .

我的模型定义如下,输入图像大小为110X150,输出图像大小为88X120 . 我只是调整源图像的大小来制作训练标签 . 通过除以255对每个样本/标签进行归一化 . 至于该网络的体系结构,我使用这种类似的RGB图像面部特征的布局读取了一篇论文,并且为了我的目的,我将每个层的深度(通道)减半 .

所以我的问题是,有什么不对吗?训练曲线对我来说很奇怪 . 我该如何改进这个自动编码器?更多时代?条例?选择另一个激活功能(我听说泄漏ReLU更好) . 任何反馈和建议表示赞赏,谢谢!

def create_models():
	input_img = Input(shape=(150, 110, 1))  # adapt this if using `channels_first` image data format

	x = Conv2D(128, (3, 3), activation='relu', padding='same')(input_img)
	x = MaxPooling2D((2, 2), padding='same')(x)
	x = Conv2D(128, (3, 3), activation='relu', padding='same')(x)
	x = MaxPooling2D((2, 2), padding='same')(x)
	x = Conv2D(256, (3, 3), activation='relu')(x)
	x = MaxPooling2D((2, 2), padding='same')(x)
	x = Conv2D(512, (3, 3), activation='relu')(x)
	encoded = MaxPooling2D((2, 2), padding='same')(x)


	# at this point the representation is (8, 6, 512) i.e. 128-dimensional
	x = Conv2D(512, (3, 3), activation='relu', padding='same')(encoded)
	x = UpSampling2D((2, 2))(x)
	x = Conv2D(256, (3, 3), activation='relu', padding='same')(x)
	x = UpSampling2D((2, 2))(x)
	x = Conv2D(128, (3, 3), activation='relu')(x)
	x = UpSampling2D((2, 2))(x)
	x = Conv2D(128, (3, 3), activation='relu', padding='same')(x)
	x = UpSampling2D((2, 2))(x)
	decoded = Conv2D(1, (3, 3), activation='tanh', padding='same')(x)

	autoencoder = Model(input_img, decoded)


	autoencoder.compile(optimizer='adadelta', loss='mean_squared_error')
	return autoencoder