【问题标题】:Simple autoencoder is not converging after many epochs简单的自动编码器在许多时期后没有收敛
【发布时间】:2019-03-22 07:31:58
【问题描述】:

我正在为 CIFA10 数据集开发自动编码器,但不会在输入端添加噪声(这是第二个目标)。

基于 Convnet 的自动编码器未收敛:任何建议

input_img=Input(shape=(32,32,3))



x=Conv2D(16,(3,3),padding='same',activation='relu')(input_img)

x=MaxPooling2D((2,2),padding='same')(x)

x=Conv2D(8,(3,3),padding='same',activation='relu')(x)

x=MaxPooling2D((2,2),padding='same')(x)

x=Conv2D(8,(3,3),padding='same',activation='relu')(x)

encoded=MaxPooling2D((2,2),padding='same')(x)
x=Conv2D(8,(3,3),padding='same',activation='relu')(encoded)

x=UpSampling2D((2,2))(x)

x=Conv2D(8,(3,3),padding='same',activation='relu')(x)

x=UpSampling2D((2,2))(x)
x=Conv2D(16,(3,3),padding='same',activation='relu')(x) 
x=UpSampling2D((2,2))(x)
decoded=Conv2D(3,(3,3),padding='same',activation='sigmoid')(x)
autoencoder=Model(input_img,decoded)
(x_train,_),(x_test,_)=cifar10.load_data()

x_train=x_train.astype('float32')/255

x_test=x_test.astype('float32')/255

x_train=x_train.reshape(len(x_train),32,32,3)

x_test=x_test.reshape(len(x_test),32,32,3)



autoencoder.compile(optimizer='Adam',loss='binary_crossentropy')
autoencoder.fit(x_train, x_train,

            epochs=50,
            batch_size=64,
            shuffle=True,
            validation_data=(x_test, x_test))

即使在大的时期,我也会遇到损失的高原

我尝试将模型 64-32-16-8:8-16-32-64 与 CIFAR-10 的灰度图像一起使用,但我仍然遇到相同的收敛问题,网络提供模糊输出以及显示 @987654321 @

【问题讨论】:

    标签: tensorflow keras deep-learning autoencoder


    【解决方案1】:

    不确定你的意思。如果我是你,我会尝试更深入的模型以获得更好的性能。例如下面提出的模型(甚至更深的模型)

    input_img=Input(shape=(32,32,3))
    
    x=Conv2D(8,(3,3),padding='same',activation='relu')(input_img)
    x=Conv2D(8,(3,3),padding='same',activation='relu')(x)
    
    x=MaxPooling2D((2,2),padding='same')(x)
    
    x=Conv2D(16,(3,3),padding='same',activation='relu')(x)
    x=Conv2D(16,(3,3),padding='same',activation='relu')(x)
    
    x=MaxPooling2D((2,2),padding='same')(x)
    
    x=Conv2D(32,(3,3),padding='same',activation='relu')(x)
    x=Conv2D(32,(3,3),padding='same',activation='relu')(x)
    
    encoded=MaxPooling2D((2,2),padding='same')(x)
    x=Conv2D(32,(3,3),padding='same',activation='relu')(encoded)
    x=Conv2D(32,(3,3),padding='same',activation='relu')(x)
    
    x=UpSampling2D((2,2))(x)
    
    x=Conv2D(16,(3,3),padding='same',activation='relu')(x)
    x=Conv2D(16,(3,3),padding='same',activation='relu')(x)
    
    x=UpSampling2D((2,2))(x)
    x=Conv2D(8,(3,3),padding='same',activation='relu')(x) 
    x=Conv2D(8,(3,3),padding='same',activation='relu')(x) 
    x=UpSampling2D((2,2))(x)
    decoded=Conv2D(3,(3,3),padding='same',activation='sigmoid')(x)
    autoencoder=Model(input_img,decoded)
    

    【讨论】:

    • 谢谢@Ioannis Nasios 我需要尝试去噪自动编码器模型,它首先对图像进行编码或压缩,然后再解压缩图像。当我尝试我的模型时,我得到了一个非常模糊的输出。我什至尝试制作一个 64-32-16-8:8-16-32-64 模型,但输出是模糊的。即使经过 100 个 epoch 和更多,损失和 val 损失(从 0.6 开始)也保持在 0.54 和高原附近
    • @liwei 这个信息应该是你原来帖子的一部分——“我得到了一个失落的高原”本身并不是很丰富
    猜你喜欢
    • 2015-11-21
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    相关资源
    最近更新 更多