我的自动编码器的测试准确性和验证准确性不会改变

问题描述 投票:0回答:0

我正在尝试为彩色图像制作一个卷积自动编码器。我想将彩色图像的大小从 512,512,3 缩小为大小为 256,512,1 的灰度图像。然后我想有效地将图像重建回其原始大小和颜色。为了实现这一点,我的模型有两个部分,一个编码器和一个解码器。我的问题是当我训练我的模型时,准确度和验证准确度在各自的值上保持不变并且永远不会改变。此外,当我预测编码输出时,它不是灰色图像而是随机彩色图像。我正在使用以下架构

import tensorflow as tf
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers import BatchNormalization
from keras.callbacks import ModelCheckpoint
import keras, keras.layers as L
from tensorflow.keras import backend as K
from tensorflow.keras.layers import Reshape
from tensorflow.keras.layers import Input
from tensorflow.keras import regularizers
from tensorflow.keras.optimizers import SGD, Adamax
import cv2
import os
import numpy as np

def ae(img_shape, code_size):
    H,W,C = img_shape
    
    # encoder
    encoder = keras.models.Sequential()
    encoder.add(L.InputLayer(img_shape))
    encoder.add(L.Lambda(lambda x: tf.image.rgb_to_grayscale(x))) # convert color image to grayscale
    encoder.add(L.Conv2D(filters=128, kernel_size=(3,3), strides=1, padding='same', activation='relu'))
    encoder.add(BatchNormalization())
    encoder.add(L.MaxPooling2D(pool_size=(2,2)))
    encoder.add(L.Conv2D(filters=64, kernel_size=(3,3), strides=1, padding='same', activation='relu'))
    encoder.add(BatchNormalization())
    #encoder.add(L.Conv2D(filters=128, kernel_size=(3,3), strides=1, padding='same', activity_regularizer=regularizers.l1(10e-10), activation='relu'))
    encoder.add(L.MaxPooling2D(pool_size=(2,2)))
    encoder.add(L.Conv2D(filters=64, kernel_size=(3,3), padding='same', strides=1, activation='relu'))
    encoder.add(BatchNormalization())
    encoder.add(L.Conv2D(filters=32, kernel_size=(3,3), padding='same', strides=2,activation='relu'))
    encoder.add(BatchNormalization())
    encoder.add(L.Flatten())                  # flatten image to vector
 
    encoder.add(L.Reshape((256, 512)))

    # decoder
    decoder = keras.models.Sequential()
    decoder.add(L.InputLayer((code_size)))
    decoder.add(L.Flatten()) 
    decoder.add(L.Reshape((64, 64, 32)))
    decoder.add(L.Conv2DTranspose(filters=32, kernel_size=(3, 3), strides=2, activation='relu', padding='same'))
    decoder.add(BatchNormalization()) 
    decoder.add(L.Conv2DTranspose(filters=64, kernel_size=(3, 3), strides=2, activation='relu', padding='same'))
    decoder.add(BatchNormalization())
    #decoder.add(L.Conv2DTranspose(filters=128, kernel_size=(3, 3), strides=2, activity_regularizer=regularizers.l1(10e-10), activation='relu', padding='same'))
    
    decoder.add(L.Conv2DTranspose(filters=1, kernel_size=(3, 3), strides=2, activation='relu', padding='same'))
    decoder.add(BatchNormalization())
    decoder.add(L.Lambda(lambda x: tf.image.grayscale_to_rgb(x))) # convert grayscale image to color
    
    return encoder, decoder

我正在 flickr8k 数据集上训练模型,但仅使用 400 张图像和 10 的批量大小,因为增加其中任何一个都会导致 colab notebook 崩溃。我使用了其他优化器并改变了学习率但没有成功。这表明我的准确性是一样的,没有变化

Epoch 1/100
24/24 [==============================] - ETA: 0s - loss: 1.2501 - accuracy: 0.4605
Epoch 1: val_accuracy improved from -inf to 0.44085, saving model to /content/model_hope.h5
24/24 [==============================] - 27s 479ms/step - loss: 1.2501 - accuracy: 0.4605 - val_loss: 0.3070 - val_accuracy: 0.4409
Epoch 2/100
24/24 [==============================] - ETA: 0s - loss: 1.2308 - accuracy: 0.4605
Epoch 2: val_accuracy did not improve from 0.44085
24/24 [==============================] - 8s 345ms/step - loss: 1.2308 - accuracy: 0.4605 - val_loss: 0.3528 - val_accuracy: 0.4409
Epoch 3/100
24/24 [==============================] - ETA: 0s - loss: 1.2133 - accuracy: 0.4605
Epoch 3: val_accuracy did not improve from 0.44085
24/24 [==============================] - 9s 392ms/step - loss: 1.2133 - accuracy: 0.4605 - val_loss: 0.3981 - val_accuracy: 0.4409
Epoch 4/100
24/24 [==============================] - ETA: 0s - loss: 1.1976 - accuracy: 0.4605
Epoch 4: val_accuracy did not improve from 0.44085
24/24 [==============================] - 8s 346ms/step - loss: 1.1976 - accuracy: 0.4605 - val_loss: 0.4414 - val_accuracy: 0.4409

如果有人能帮助我,我将不胜感激

python deep-learning autoencoder
© www.soinside.com 2019 - 2024. All rights reserved.