用Keras训练卷积自动编码器

时间:2017-08-08 00:43:28

标签: tensorflow keras conv-neural-network autoencoder

我正在为IR面部训练一个卷积自动编码器,这是我第一次做自动编码器。我有大约1300张训练图像,我没有使用任何调节方法。这是我在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

0 个答案:

没有答案