autoencoder.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import tensorflow as tf
  4. from sklearn.metrics import accuracy_score
  5. from tensorflow.keras import layers, losses
  6. from tensorflow.keras.models import Model
  7. import misc
  8. latent_dim = 64
  9. # print("# GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
  10. class Autoencoder(Model):
  11. def __init__(self, nary):
  12. super(Autoencoder, self).__init__()
  13. self.latent_dim = latent_dim
  14. self.encoder = tf.keras.Sequential()
  15. self.encoder.add(tf.keras.Input(shape=(4,)))
  16. self.encoder.add(layers.Dense(units=8, activation='relu'))
  17. # self.encoder.add(layers.Dropout(0.2))
  18. # self.encoder.add(layers.ReLU(max_value=1.0))
  19. self.decoder = tf.keras.Sequential()
  20. self.decoder.add(tf.keras.Input(shape=(2,)))
  21. self.decoder.add(layers.Dense(units=8))
  22. # self.encoder.add(tf.keras.layers.Dropout(0.2))
  23. self.decoder.add(layers.Dense(units=4, activation='softmax'))
  24. # self.decoder.add(layers.Softmax(units=4, dtype=bool))
  25. # [
  26. # layers.Input(shape=(28, 28, 1)),
  27. # layers.Conv2D(16, (3, 3), activation='relu', padding='same', strides=2),
  28. # layers.Conv2D(8, (3, 3), activation='relu', padding='same', strides=2)
  29. # ])
  30. # self.decoder = tf.keras.Sequential([
  31. # layers.Conv2DTranspose(8, kernel_size=3, strides=2, activation='relu', padding='same'),
  32. # layers.Conv2DTranspose(16, kernel_size=3, strides=2, activation='relu', padding='same'),
  33. # layers.Conv2D(1, kernel_size=(3, 3), activation='sigmoid', padding='same')
  34. # ])
  35. def call(self, x, **kwargs):
  36. encoded = self.encoder(x)
  37. decoded = self.decoder(encoded)
  38. return decoded
  39. if __name__ == '__main__':
  40. # (x_train, _), (x_test, _) = fashion_mnist.load_data()
  41. #
  42. # x_train = x_train.astype('float32') / 255.
  43. # x_test = x_test.astype('float32') / 255.
  44. #
  45. # print(f"Train data: {x_train.shape}")
  46. # print(f"Test data: {x_test.shape}")
  47. x_train = misc.generate_random_bit_array(1e5).reshape((-1, 4))
  48. x_test = misc.generate_random_bit_array(1e4).reshape((-1, 4))
  49. autoencoder = Autoencoder(latent_dim)
  50. autoencoder.compile(optimizer='adam', loss=losses.MeanSquaredError())
  51. autoencoder.fit(x_train, x_train,
  52. epochs=1,
  53. shuffle=True,
  54. validation_data=(x_test, x_test))
  55. encoded_data = autoencoder.encoder(x_test)
  56. decoded_data = autoencoder.decoder(encoded_data)
  57. print(accuracy_score(x_test, encoded_data))
  58. pass