
from keras.layers import Input, Dense from keras.models import Model from keras.datasets import mnist import numpy as np # 加载mnist数据集并对其进行处理 (x_train, _), (x_test, _) = mnist.load_data() x_train = x_train.astype('float32') / 255. x_test = x_test.astype('float32') / 255. np.prod(x_test.shape[1:]))) print(x_train.shape) print(x_test.shape) #对mnist数据集加噪 def noisy(image): print('min {} , max {} and mean {}'.format(np.min(image), np.max(image), np.mean(image))) p = 0.5 noisy = np.random.binomial(1, p,image.shape) noisy = image*noisy print('min {} , max {} and mean {}'.format(np.min(noisy), np.max(noisy), np.mean(noisy))) return noisy # this is the size of our encoded representations encoding_dim = 32 # 32 floats -> compression of factor 24.5, assuming the input is 784 floats input_img = Input(shape=(784,)) input_img_noise = Input(shape=(784,)) # noisy version of inputs x_train_noise = noisy(x_train) x_test_noise = noisy(x_test) 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:]))) x_train_noise = x_train_noise.reshape((len(x_train_noise), np.prod(x_train_noise.shape[1:]))) x_test_noise = x_test_noise.reshape((len(x_test_noise), np.prod(x_test_noise.shape[1:]))) # "encoded" is the encoded representation of the input encoded = Dense(encoding_dim, activation='relu')(input_img_noise) # "decoded" is the lossy reconstruction of the input decoded = Dense(784, activation='sigmoid')(encoded) # this model maps an input to its reconstruction autoencoder = Model(input_img_noise, decoded) # this model maps an input to its encoded representation encoder = Model(input_img_noise, encoded) # create a placeholder for an encoded (32-dimensional) input encoded_input = Input(shape=(encoding_dim,)) # retrieve the last layer of the autoencoder model decoder_layer = autoencoder.layers[-1] # create the decoder model decoder = Model(encoded_input, decoder_layer(encoded_input)) autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy') #训练参数 autoencoder.fit(x_train_noise, x_train, epochs=100, batch_size=256, shuffle=True, validation_data=(x_test_noise, x_test)) # encode and decode some digits # note that we take them from the *test* set encoded_imgs = encoder.predict(x_test_noise) decoded_imgs = decoder.predict(encoded_imgs) # use Matplotlib (don't ask) import matplotlib.pyplot as plt n = 10 # how many digits we will display plt.figure(figsize=(20, 4)) for i in range(n): # display original ax = plt.subplot(2, n, i + 1) plt.imshow(x_test_noise[i].reshape(28, 28)) plt.gray() ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) # display reconstruction ax = plt.subplot(2, n, i + 1 + n) plt.imshow(decoded_imgs[i].reshape(28, 28)) plt.gray() ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) plt.savefig('test.png')
epoch=1 result
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)