AdditiveGaussianNoiseAutoencoderRunner.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import numpy as np
  2. import sklearn.preprocessing as prep
  3. import tensorflow as tf
  4. from tensorflow.examples.tutorials.mnist import input_data
  5. from autoencoder_models.DenoisingAutoencoder import AdditiveGaussianNoiseAutoencoder
  6. mnist = input_data.read_data_sets('MNIST_data', one_hot = True)
  7. def standard_scale(X_train, X_test):
  8. preprocessor = prep.StandardScaler().fit(X_train)
  9. X_train = preprocessor.transform(X_train)
  10. X_test = preprocessor.transform(X_test)
  11. return X_train, X_test
  12. def get_random_block_from_data(data, batch_size):
  13. start_index = np.random.randint(0, len(data) - batch_size)
  14. return data[start_index:(start_index + batch_size)]
  15. X_train, X_test = standard_scale(mnist.train.images, mnist.test.images)
  16. n_samples = int(mnist.train.num_examples)
  17. training_epochs = 20
  18. batch_size = 128
  19. display_step = 1
  20. autoencoder = AdditiveGaussianNoiseAutoencoder(n_input = 784,
  21. n_hidden = 200,
  22. transfer_function = tf.nn.softplus,
  23. optimizer = tf.train.AdamOptimizer(learning_rate = 0.001),
  24. scale = 0.01)
  25. for epoch in range(training_epochs):
  26. avg_cost = 0.
  27. total_batch = int(n_samples / batch_size)
  28. # Loop over all batches
  29. for i in range(total_batch):
  30. batch_xs = get_random_block_from_data(X_train, batch_size)
  31. # Fit training using batch data
  32. cost = autoencoder.partial_fit(batch_xs)
  33. # Compute average loss
  34. avg_cost += cost / n_samples * batch_size
  35. # Display logs per epoch step
  36. if epoch % display_step == 0:
  37. print("Epoch:", '%04d' % (epoch + 1), "cost=", "{:.9f}".format(avg_cost))
  38. print("Total cost: " + str(autoencoder.calc_total_cost(X_test)))