1. 程式人生 > >Keras搭建的自編碼模型

Keras搭建的自編碼模型

  1. http://blog.csdn.net/u012458963/article/details/72566596
         https://kiseliu.github.io/2016/08/16/building-autoencoders-in-keras/
  1. import numpy as np  
  2. np.random.seed(1337)  # for reproducibility
  3. from keras.datasets import mnist  
  4. from keras.models import Model #泛型模型
  5. from keras.layers import Dense, Input  
  6. import
     matplotlib.pyplot as plt  
  7. # X shape (60,000 28x28), y shape (10,000, )
  8. (x_train, _), (x_test, y_test) = mnist.load_data()  
  9. # 資料預處理
  10. x_train = x_train.astype('float32') / 255. - 0.5# minmax_normalized
  11. x_test = x_test.astype('float32') / 255. - 0.5# minmax_normalized
  12. x_train = x_train.reshape((x_train.shape[0], -
    1))  
  13. x_test = x_test.reshape((x_test.shape[0], -1))  
  14. print(x_train.shape)  
  15. print(x_test.shape)  
  16. # 壓縮特徵維度至2維
  17. encoding_dim = 2
  18. # this is our input placeholder
  19. input_img = Input(shape=(784,))  
  20. # 編碼層
  21. encoded = Dense(128, activation='relu')(input_img)  
  22. encoded = Dense(64, activation='relu')(encoded)  
  23. encoded = Dense(10, activation='relu')(encoded)  
  24. encoder_output = Dense(encoding_dim)(encoded)  
  25. # 解碼層
  26. decoded = Dense(10, activation='relu')(encoder_output)  
  27. decoded = Dense(64, activation='relu')(decoded)  
  28. decoded = Dense(128, activation='relu')(decoded)  
  29. decoded = Dense(784, activation='tanh')(decoded)  
  30. # 構建自編碼模型
  31. autoencoder = Model(inputs=input_img, outputs=decoded)  
  32. # 構建編碼模型
  33. encoder = Model(inputs=input_img, outputs=encoder_output)  
  34. # compile autoencoder
  35. autoencoder.compile(optimizer='adam', loss='mse')  
  36. # training
  37. autoencoder.fit(x_train, x_train, epochs=20, batch_size=256, shuffle=True)  
  38. # plotting
  39. encoded_imgs = encoder.predict(x_test)  
  40. plt.scatter(encoded_imgs[:, 0], encoded_imgs[:, 1], c=y_test, s=3)  
  41. plt.colorbar()  
  42. plt.show()  
------------------------------------------------------------  http://blog.csdn.net/u012458963/article/details/72566596