liwei
liwei

Reputation: 147

Simple autoencoder is not converging after many epochs

I am developing an autoencoder for CIFA10 dataset, without adding noise at the input (which is 2nd goal).

The Convnet based autoencoder is not converging: Any suggestions

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))

Even for large epochs i get a plateaue of loss

I tried to use the model 64-32-16-8:8-16-32-64 with grayscale images of CIFAR-10 but I still have the same converging issue the network gives blur output as well as shown output of network blur

Upvotes: 0

Views: 1066

Answers (1)

Ioannis Nasios
Ioannis Nasios

Reputation: 8527

Not sure what you mean. If i were you i would try a deeper model for better performance. For instance the model proposed bellow (or an even deeper one)

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)

Upvotes: 1

Related Questions