import matplotlib.pyplot as plt
import numpy as np
from keras.layers import Input,Dense, Convolution2D, MaxPooling2D, UpSampling2D
from keras.models import Model
from keras.datasets import mnist
from keras import regularizers
Using Theano backend. Using gpu device 0: GeForce GT625M (CNMeM is disabled, cuDNN not available)
(x_train,_),(x_test,_) = mnist.load_data()
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))
%matplotlib inline
def plot_imgs(decoded_images,n=20):
plt.figure(figsize=(20,4))
for i in range(n):
# original digit
ax = plt.subplot(2,n,i+1)
plt.imshow(x_test[i].reshape(28,28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
# reconstruction
ax = plt.subplot(2,n,i+1+n)
plt.imshow(decoded_images[i].reshape(28,28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()
%%time
encoded = None
decoded = None
encoding_dim = 32
input_img = Input(shape=(784,))
encoded = Dense(encoding_dim, activation='relu')(input_img)
decoded = Dense(784,activation='sigmoid')(encoded)
autoencoder = Model(input=input_img, output=decoded)
encoder = Model(input=input_img, output = encoded)
encoded_input = Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-1]
decoder = Model(input=encoded_input, output=decoder_layer(encoded_input))
autoencoder.compile(optimizer='adadelta',loss='binary_crossentropy')
autoencoder.fit(x_train, x_train,
verbose=2,
nb_epoch = 50,
batch_size = 256,
shuffle=True,
validation_data=(x_test,x_test))
encoded_imgs = encoder.predict(x_test)
decoded_imgs = decoder.predict(encoded_imgs)
plot_imgs(decoded_imgs)
encoded = None
decoded = None
encoding_dim = 32
input_img = Input(shape=(784,))
encoded = Dense(encoding_dim, activation='linear')(input_img)
decoded = Dense(784,activation='sigmoid')(encoded)
autoencoder = Model(input=input_img, output=decoded)
encoder = Model(input=input_img, output = encoded)
encoded_input = Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-1]
decoder = Model(input=encoded_input, output=decoder_layer(encoded_input))
autoencoder.compile(optimizer='adadelta',loss='binary_crossentropy')
autoencoder.fit(x_train, x_train,
verbose=2,
nb_epoch = 50,
batch_size = 256,
shuffle=True,
validation_data=(x_test,x_test))
encoded_imgs = encoder.predict(x_test)
decoded_imgs = decoder.predict(encoded_imgs)
plot_imgs(decoded_imgs)
%%time
encoded = None
decoded = None
encoding_dim = 32
input_img = Input(shape=(784,))
# add a Dense layer with a L1 activity regularizer
encoded = Dense(encoding_dim, activation='relu',
activity_regularizer=regularizers.activity_l1(10e-5))(input_img)
decoded = Dense(784, activation='sigmoid')(encoded)
autoencoder = Model(input=input_img, output=decoded)
encoder = Model(input=input_img, output = encoded)
encoded_input = Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-1]
decoder = Model(input=encoded_input, output=decoder_layer(encoded_input))
autoencoder.compile(optimizer='adadelta',loss='binary_crossentropy')
autoencoder.fit(x_train, x_train,
verbose=2,
nb_epoch = 50,
batch_size = 256,
shuffle=True,
validation_data=(x_test,x_test))
encoded_imgs = encoder.predict(x_test)
decoded_imgs = decoder.predict(encoded_imgs)
plot_imgs(decoded_imgs)
%%time
encoded = None
decoded = None
input_img = Input(shape=(784,))
encoded = Dense(128,activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(32,activation='relu')(encoded)
decoded = Dense(64,activation='relu')(encoded)
decoded = Dense(128,activation='relu')(decoded)
decoded = Dense(784,activation='sigmoid')(decoded)
autoencoder = Model(input=input_img, output=decoded)
encoder = Model(input=input_img, output = encoded)
encoded_input = Input(shape=(32,))
decoder_layer1 = autoencoder.layers[-3]
decoder_layer2 = autoencoder.layers[-2]
decoder_layer3 = autoencoder.layers[-1]
decoder = Model(input=encoded_input, output= decoder_layer3(decoder_layer2(decoder_layer1(encoded_input))))
autoencoder.compile(optimizer='adadelta',loss='binary_crossentropy')
autoencoder.fit(x_train, x_train, nb_epoch=100, verbose=2,
batch_size=256,shuffle=True,
validation_data=(x_test, x_test))
encoded_imgs = encoder.predict(x_test)
decoded_imgs = decoder.predict(encoded_imgs)
plot_imgs(decoded_imgs)
Train on 60000 samples, validate on 10000 samples Epoch 1/100 2s - loss: 0.3585 - val_loss: 0.2649 Epoch 2/100 2s - loss: 0.2594 - val_loss: 0.2526 Epoch 3/100 2s - loss: 0.2407 - val_loss: 0.2297 Epoch 4/100 2s - loss: 0.2256 - val_loss: 0.2202 Epoch 5/100 2s - loss: 0.2146 - val_loss: 0.2069 Epoch 6/100 3s - loss: 0.1979 - val_loss: 0.1900 Epoch 7/100 3s - loss: 0.1867 - val_loss: 0.1826 Epoch 8/100 3s - loss: 0.1803 - val_loss: 0.1770 Epoch 9/100 3s - loss: 0.1745 - val_loss: 0.1707 Epoch 10/100 2s - loss: 0.1695 - val_loss: 0.1651 Epoch 11/100 2s - loss: 0.1651 - val_loss: 0.1621 Epoch 12/100 2s - loss: 0.1616 - val_loss: 0.1592 Epoch 13/100 2s - loss: 0.1587 - val_loss: 0.1560 Epoch 14/100 2s - loss: 0.1563 - val_loss: 0.1548 Epoch 15/100 2s - loss: 0.1540 - val_loss: 0.1505 Epoch 16/100 2s - loss: 0.1518 - val_loss: 0.1500 Epoch 17/100 2s - loss: 0.1494 - val_loss: 0.1482 Epoch 18/100 3s - loss: 0.1472 - val_loss: 0.1451 Epoch 19/100 2s - loss: 0.1449 - val_loss: 0.1417 Epoch 20/100 2s - loss: 0.1427 - val_loss: 0.1420 Epoch 21/100 2s - loss: 0.1407 - val_loss: 0.1385 Epoch 22/100 2s - loss: 0.1390 - val_loss: 0.1360 Epoch 23/100 2s - loss: 0.1371 - val_loss: 0.1353 Epoch 24/100 2s - loss: 0.1357 - val_loss: 0.1337 Epoch 25/100 2s - loss: 0.1343 - val_loss: 0.1319 Epoch 26/100 2s - loss: 0.1329 - val_loss: 0.1303 Epoch 27/100 2s - loss: 0.1317 - val_loss: 0.1295 Epoch 28/100 2s - loss: 0.1306 - val_loss: 0.1283 Epoch 29/100 2s - loss: 0.1296 - val_loss: 0.1268 Epoch 30/100 2s - loss: 0.1285 - val_loss: 0.1265 Epoch 31/100 2s - loss: 0.1276 - val_loss: 0.1257 Epoch 32/100 2s - loss: 0.1269 - val_loss: 0.1261 Epoch 33/100 2s - loss: 0.1260 - val_loss: 0.1238 Epoch 34/100 2s - loss: 0.1252 - val_loss: 0.1245 Epoch 35/100 2s - loss: 0.1245 - val_loss: 0.1223 Epoch 36/100 2s - loss: 0.1237 - val_loss: 0.1219 Epoch 37/100 2s - loss: 0.1230 - val_loss: 0.1206 Epoch 38/100 2s - loss: 0.1222 - val_loss: 0.1202 Epoch 39/100 2s - loss: 0.1215 - val_loss: 0.1196 Epoch 40/100 2s - loss: 0.1209 - val_loss: 0.1206 Epoch 41/100 2s - loss: 0.1202 - val_loss: 0.1182 Epoch 42/100 2s - loss: 0.1195 - val_loss: 0.1172 Epoch 43/100 2s - loss: 0.1191 - val_loss: 0.1172 Epoch 44/100 2s - loss: 0.1185 - val_loss: 0.1158 Epoch 45/100 2s - loss: 0.1179 - val_loss: 0.1163 Epoch 46/100 2s - loss: 0.1174 - val_loss: 0.1150 Epoch 47/100 2s - loss: 0.1167 - val_loss: 0.1146 Epoch 48/100 2s - loss: 0.1162 - val_loss: 0.1145 Epoch 49/100 2s - loss: 0.1156 - val_loss: 0.1152 Epoch 50/100 2s - loss: 0.1150 - val_loss: 0.1145 Epoch 51/100 2s - loss: 0.1145 - val_loss: 0.1127 Epoch 52/100 2s - loss: 0.1140 - val_loss: 0.1129 Epoch 53/100 2s - loss: 0.1136 - val_loss: 0.1124 Epoch 54/100 2s - loss: 0.1132 - val_loss: 0.1118 Epoch 55/100 2s - loss: 0.1128 - val_loss: 0.1112 Epoch 56/100 2s - loss: 0.1123 - val_loss: 0.1114 Epoch 57/100 2s - loss: 0.1119 - val_loss: 0.1098 Epoch 58/100 2s - loss: 0.1116 - val_loss: 0.1102 Epoch 59/100 2s - loss: 0.1113 - val_loss: 0.1104 Epoch 60/100 2s - loss: 0.1108 - val_loss: 0.1096 Epoch 61/100 2s - loss: 0.1106 - val_loss: 0.1088 Epoch 62/100 2s - loss: 0.1102 - val_loss: 0.1097 Epoch 63/100 2s - loss: 0.1098 - val_loss: 0.1087 Epoch 64/100 2s - loss: 0.1096 - val_loss: 0.1098 Epoch 65/100 2s - loss: 0.1092 - val_loss: 0.1095 Epoch 66/100 2s - loss: 0.1090 - val_loss: 0.1076 Epoch 67/100 2s - loss: 0.1086 - val_loss: 0.1070 Epoch 68/100 2s - loss: 0.1084 - val_loss: 0.1070 Epoch 69/100 2s - loss: 0.1081 - val_loss: 0.1061 Epoch 70/100 3s - loss: 0.1079 - val_loss: 0.1067 Epoch 71/100 3s - loss: 0.1075 - val_loss: 0.1058 Epoch 72/100 2s - loss: 0.1072 - val_loss: 0.1066 Epoch 73/100 2s - loss: 0.1069 - val_loss: 0.1051 Epoch 74/100 2s - loss: 0.1068 - val_loss: 0.1060 Epoch 75/100 2s - loss: 0.1064 - val_loss: 0.1059 Epoch 76/100 2s - loss: 0.1062 - val_loss: 0.1046 Epoch 77/100 3s - loss: 0.1060 - val_loss: 0.1048 Epoch 78/100 3s - loss: 0.1057 - val_loss: 0.1051 Epoch 79/100 3s - loss: 0.1056 - val_loss: 0.1054 Epoch 80/100 3s - loss: 0.1052 - val_loss: 0.1045 Epoch 81/100 3s - loss: 0.1049 - val_loss: 0.1033 Epoch 82/100 2s - loss: 0.1047 - val_loss: 0.1043 Epoch 83/100 2s - loss: 0.1045 - val_loss: 0.1027 Epoch 84/100 2s - loss: 0.1043 - val_loss: 0.1031 Epoch 85/100 3s - loss: 0.1041 - val_loss: 0.1023 Epoch 86/100 2s - loss: 0.1039 - val_loss: 0.1024 Epoch 87/100 2s - loss: 0.1036 - val_loss: 0.1031 Epoch 88/100 2s - loss: 0.1035 - val_loss: 0.1019 Epoch 89/100 2s - loss: 0.1034 - val_loss: 0.1020 Epoch 90/100 2s - loss: 0.1031 - val_loss: 0.1027 Epoch 91/100 2s - loss: 0.1030 - val_loss: 0.1015 Epoch 92/100 2s - loss: 0.1027 - val_loss: 0.1029 Epoch 93/100 2s - loss: 0.1025 - val_loss: 0.1022 Epoch 94/100 2s - loss: 0.1025 - val_loss: 0.1013 Epoch 95/100 2s - loss: 0.1023 - val_loss: 0.1013 Epoch 96/100 2s - loss: 0.1021 - val_loss: 0.1018 Epoch 97/100 2s - loss: 0.1019 - val_loss: 0.1006 Epoch 98/100 2s - loss: 0.1017 - val_loss: 0.0999 Epoch 99/100 2s - loss: 0.1016 - val_loss: 0.0997 Epoch 100/100 2s - loss: 0.1016 - val_loss: 0.1012
CPU times: user 3min 19s, sys: 1min 34s, total: 4min 54s Wall time: 4min 54s
encoded = None
decoded = None
input_img = Input(shape=(1,28,28))
x = Convolution2D(16,3,3, activation='relu', border_mode='same')(input_img)
x = MaxPooling2D((2,2), border_mode='same')(x)
x = Convolution2D(8,3,3, activation='relu', border_mode='same')(x)
x = MaxPooling2D((2,2), border_mode='same')(x)
x = Convolution2D(8,3,3, activation='relu', border_mode='same')(x)
encoded = MaxPooling2D((2,2),border_mode='same')(x)
# at this point the representation has 8 x 4 x 4 = 128 dimensions
x = Convolution2D(8,3,3,activation='relu',border_mode='same')(encoded)
x = UpSampling2D((2,2))(x)
x = Convolution2D(8,3,3, activation='relu', border_mode='same')(x)
x = UpSampling2D((2,2))(x)
x = Convolution2D(16,3,3, activation='relu')(x)
x = UpSampling2D((2,2))(x)
decoded = Convolution2D(1,3,3, activation='sigmoid', border_mode='same')(x)
autoencoder = Model(input_img,decoded)
autoencoder.compile(optimizer='adadelta',loss='binary_crossentropy')
(x_train, _), (x_test, _) = mnist.load_data()
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 1, 28, 28))
x_test = np.reshape(x_test, (len(x_test), 1, 28, 28))
# the tutorial suggests we use tensorflow but I'll use theano
autoencoder.fit(x_train,x_train,
verbose=2,
nb_epoch=50,
batch_size=128,
shuffle=True,
validation_data=(x_test,x_test))
decoded_imgs = autoencoder.predict(x_test)
plot_imgs(decoded_imgs)
(x_train, _), (x_test, _) = mnist.load_data()
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 1, 28, 28))
x_test = np.reshape(x_test, (len(x_test), 1, 28, 28))
noise_factor= 0.5
x_train_noisy = x_train + noise_factor * np.random.normal(loc=0.0,scale=1.0,size=x_train.shape)
x_test_noisy = x_test + noise_factor * np.random.normal(loc=0.0,scale=1.0,size=x_test.shape)
x_train_noisy = np.clip(x_train_noisy,0.,1.)
x_test_noisy = np.clip(x_test_noisy, 0.,1.)
plot_imgs(x_test_noisy)
input_img = Input(shape=(1,28,28))
x = Convolution2D(32,3,3,activation='relu',border_mode='same')(input_img)
x = MaxPooling2D((2,2), border_mode='same')(x)
x = Convolution2D(32,3,3,activation='relu',border_mode='same')(x)
encoded = MaxPooling2D((2,2),border_mode='same')(x)
# at this point the representation is (32,7,7)
x = Convolution2D(32,3,3,activation='relu',border_mode='same')(encoded)
x = UpSampling2D((2,2))(x)
x = Convolution2D(32,3,3,activation='relu',border_mode='same')(x)
x = UpSampling2D((2,2))(x)
decoded = Convolution2D(1,3,3,activation='sigmoid',border_mode='same')(x)
autoencoder = Model(input_img,decoded)
# decoder_layer1 = autoencoder.layers[-4]
# decoder_layer2 = autoencoder.layers[-3]
# decoder_layer3 = autoencoder.layers[-2]
# decoder_layer4 = autoencoder.layers[-1]
# encoded_input = Input(shape=(32,7,7))
# decoder = Model(
# input=encoded_input,
# output= decoder_layer4(decoder_layer3(decoder_layer2(decoder_layer1(encoded_input)))))
autoencoder.compile(optimizer='adadelta',loss='binary_crossentropy')
# the source is noisy, but the target isn't?
autoencoder.fit(x_train_noisy,x_train,
nb_epoch=100,
batch_size=128,
shuffle=True,
validation_data=(x_test_noisy,x_test))
decoded_imgs = autoencoder.predict(x_test)
plot_imgs(decoded_imgs)