Reputation: 147
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
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