Как построить автоэнкодер в тензорном потоке, используя собственные изображения набора данных? - PullRequest
0 голосов
/ 10 марта 2020

Я новичок в Tensorflow, и я хочу создать простой auencoder для изображений, я попробовал несколько примеров, которые я нашел в net, но все это работает с набором данных Mnist, которые облегчают предварительную обработку этих изображений, но я хочу создать авто-кодер для моих собственных изображений набора данных. У меня вопрос: как создать простой автоэнкодер в тензорном потоке, используя мои собственные изображения набора данных (потому что мне нужно несколько шагов для загрузки моих изображений и предварительной обработки ...)? (Мне нужен полный пример модели автоэнкодера с использованием собственного набора данных)

1 Ответ

0 голосов
/ 17 марта 2020

Я думаю, что этот ответ будет полезным. Думаю, вы понимаете, что для каждой проблемы не существует общего решения. Вам нужно попробовать разные архитектуры, разные комбинации гиперпараметров и разные методы обработки изображений для обучения вашей сети.

  1. Для предварительной обработки данных и загрузки изображений в сеть. Вы можете использовать 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)

Вы можете создать генератор данных проверки и загрузить набор данных проверки из directory.for пример проверки (valGene)

Создайте модель Convolution AutoEncoder и подгоните ее к генераторам.

Это зависит от варианта использования, и вам нужно попробовать разные слои и функцию потерь и разные архитектуры для достижения требуемого порога. Например, начните с простой архитектуры.

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 с помощью testGene следующим образом:

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...