我是Tensorflow的初学者,我想为图像创建一个简单的auencoder,我尝试了在网上找到的一些例子,但所有这些都是在Mnist数据集上工作的,这使得预处理这些图像变得容易,但我想为我自己的数据集图像创建一种自动编码器。我的问题是:如何使用我自己的数据集图像在tensorflow中创建一个简单的自动编码器(因为我需要一些步骤来加载图像和预处理…(?(我需要使用自己的数据集的自动编码器模型的完整示例(
我认为这个答案会有所帮助。我想你可以理解,每个问题都没有通用的解决方案。你需要尝试不同的架构、不同的超参数组合和不同的图像处理技术来训练你的网络。
- 用于数据预处理和将图像加载到网络您可以使用keras图像处理、ImageGenerator类进行图像增强并将图像加载到网络中
首先创建具有所需配置的ImageGenerator。
datagen = ImageDataGenerator(width_shift_range=0.1,
height_shift_range=0.1,
horizontal_flip=False,
vertical_flip=False,
rescale=1/255)
第二次通过ImageGenerator 从目录加载图像
trainGene = datagen.flow_from_directory(train_path,
color_mode="grayscale", #use grayscale images
target_size=(image_height,image_width), #image size
shuffle=True,
class_mode="input",
batch_size=batch_size,
save_to_dir=None)
您可以创建验证数据生成器并从目录加载验证数据集。例如验证(valGene(
- 构建卷积自动编码器模型并适用于生成器
这取决于用例,您需要尝试不同的层和损失函数以及不同的架构来达到所需的阈值。例如,从简单的体系结构开始。
Layer (type) Output Shape Param #
=================================================================
input0 (InputLayer) (None, 64, 32, 1) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 64, 32, 32) 320
_________________________________________________________________
activation_1 (Activation) (None, 64, 32, 32) 0
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 32, 16, 32) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 16384) 0
_________________________________________________________________
dense_1 (Dense) (None, 16) 262160
_________________________________________________________________
dense_2 (Dense) (None, 16384) 278528
_________________________________________________________________
reshape_1 (Reshape) (None, 32, 16, 32) 0
_________________________________________________________________
up_sampling2d_1 (UpSampling2 (None, 64, 32, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 64, 32, 32) 9248
_________________________________________________________________
activation_2 (Activation) (None, 64, 32, 32) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 64, 32, 1) 289
_________________________________________________________________
activation_3 (Activation) (None, 64, 32, 1) 0
model.fit_generator(trainGene,
steps_per_epoch=trainGene.n/batch_size,
validation_data=valGene,
validation_steps=valGene.n/batch_size,
epochs=epochs, # number of epochs
verbose=True)
- 预测重建图像为测试集创建另一个生成器(testGene(
restored = model.predict_generator(testGene, steps=testGene.n/batch_size)
获取差异
现在您已经为给定的顺序重新构建了图像。
difference = reconstructed_image - original_image
例如
如果你想得到每个图像的均方误差
RMSE = np.sqrt(np.square(restored - x_test)/dim) #x_test is your original images that used to predict
你可以通过测试得到x_test像这个一样的基因
x_test = np.zeros((0, image_height, image_width, image_channels), dtype=float) for x, _ in testGene: x_test = np.r_[x_test, x] if testGene.total_batches_seen > testGene.n/batch_size: break