【问题标题】:conv-autoencoder that val_loss don't dicreaseval_loss 不降低的 conv-autoencoder
【发布时间】:2020-03-17 14:19:32
【问题描述】:

我在 UCSD_ped2 数据集上使用 conv-autoencoder 构建了一个异常检测模型。令我困惑的是,经过很少的时期,val_loss 并没有减少。该模型似乎无法再学习了。我做了一些研究来改进我的模型,但它并没有变得更好。我该怎么做才能解决它?这是我模型的结构:

x=144;y=224
input_img = Input(shape = (x, y, inChannel))

bn1= BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001)(input_img)
conv1 = Conv2D(256, (11, 11), strides=(4,4),activation='relu',
               kernel_regularizer=regularizers.l2(0.0005),
               kernel_initializer=initializers.glorot_normal(seed=None),
               padding='same')(bn1)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)

bn2= BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001)(pool1)
conv2 = Conv2D(128, (5, 5),activation='relu',
               kernel_regularizer=regularizers.l2(0.0005),
               kernel_initializer=initializers.glorot_normal(seed=None),
               padding='same')(bn2)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)

bn3= BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001)(pool2)
conv3 = Conv2D(64, (3, 3), activation='relu',
               kernel_regularizer=regularizers.l2(0.0005),
               kernel_initializer=initializers.glorot_normal(seed=None),
               padding='same')(bn3)


ubn3=BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001)(conv3)
uconv3=Conv2DTranspose(128, (3,3),activation='relu',
                      kernel_regularizer=regularizers.l2(0.0005),
                      kernel_initializer=initializers.glorot_normal(seed=None),
                      padding='same')(ubn3)
upool3=UpSampling2D(size=(2, 2))(uconv3)


ubn2=BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001)(upool3)
uconv2=Conv2DTranspose(256, (3, 3),activation='relu',
                       kernel_regularizer=regularizers.l2(0.0005),
                       kernel_initializer=initializers.glorot_normal(seed=None),
                       padding='same')(ubn2)
upool2=UpSampling2D(size=(2, 2))(uconv2)

ubn1=BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001)(upool2)
decoded = Conv2DTranspose(1, (11, 11), strides=(4, 4),
                          kernel_regularizer=regularizers.l2(0.0005),
                          kernel_initializer=initializers.glorot_normal(seed=None),
                          activation='sigmoid', padding='same')(ubn1)

autoencoder = Model(input_img, decoded)
autoencoder.compile(loss = 'mean_squared_error', optimizer ='Adadelta',metrics=['accuracy'])
history=autoencoder.fit(X_train, Y_train,validation_split=0.3,
                batch_size = batch_size, epochs = epochs, verbose = 0,
                shuffle=True,
                callbacks=[earlystopping,checkpointer,reduce_lr])
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 144, 224, 1)       0         
_________________________________________________________________
batch_normalization_1 (Batch (None, 144, 224, 1)       4         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 36, 56, 256)       31232     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 18, 28, 256)       0         
_________________________________________________________________
batch_normalization_2 (Batch (None, 18, 28, 256)       1024      
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 18, 28, 128)       819328    
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 9, 14, 128)        0         
_________________________________________________________________
batch_normalization_3 (Batch (None, 9, 14, 128)        512       
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 9, 14, 64)         73792     
_________________________________________________________________
batch_normalization_4 (Batch (None, 9, 14, 64)         256       
_________________________________________________________________
conv2d_transpose_1 (Conv2DTr (None, 9, 14, 128)        73856     
_________________________________________________________________
up_sampling2d_1 (UpSampling2 (None, 18, 28, 128)       0         
_________________________________________________________________
batch_normalization_5 (Batch (None, 18, 28, 128)       512       
_________________________________________________________________
conv2d_transpose_2 (Conv2DTr (None, 18, 28, 256)       295168    
_________________________________________________________________
up_sampling2d_2 (UpSampling2 (None, 36, 56, 256)       0         
_________________________________________________________________
batch_normalization_6 (Batch (None, 36, 56, 256)       1024      
_________________________________________________________________
conv2d_transpose_3 (Conv2DTr (None, 144, 224, 1)       30977     
=================================================================
Total params: 1,327,685
Trainable params: 1,326,019
Non-trainable params: 1,666

batch size=30;epoch=100 训练数据有1785张图片;验证数据有 765 张图片。 我试过了:

  1. 删除 kernel_regularizer;
  2. 添加 ReduceLROnPlateau。

,但它只得到了一点改善。

Epoch 00043: ReduceLROnPlateau reducing learning rate to 9.99999874573554e-12.

Epoch 00044: val_loss did not improve from 0.00240

Epoch 00045: val_loss did not improve from 0.00240

随着 val_loss 达到 0.00240,它并没有减少...

The following figure was loss with epoch.

下图显示了模型的重建结果确实很差。我怎样才能让我的模型更有效?

【问题讨论】:

    标签: tensorflow keras deep-learning autoencoder anomaly-detection


    【解决方案1】:

    根据你的截图,似乎不是过拟合或欠拟合的问题。

    据我了解:

    欠拟合——验证和训练错误率高

    过拟合——验证错误高,训练错误低

    良好拟合——验证误差低,略高于训练误差

    一般来说,数据集应正确拆分以进行训练和验证。 通常,训练集应该是验证集数量的 4 倍 (80/20)。 我的建议是,您可以尝试通过数据增强来增加数据集的数量并继续训练。

    请参考documentation 进行数据扩充。

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 2022-08-06
      • 2021-07-17
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 2012-11-07
      • 2019-03-21
      相关资源
      最近更新 更多