AutoencoderRunner.py 1.67 KB
Newer Older
Alan Yee's avatar
Alan Yee committed
1
2
3
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
Jiří Vahala's avatar
Jiří Vahala committed
4

Alan Yee's avatar
Alan Yee committed
5
import numpy as np
Jiří Vahala's avatar
Jiří Vahala committed
6
7
8
9
import sklearn.preprocessing as prep
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

10
from autoencoder_models.Autoencoder import Autoencoder
Jiří Vahala's avatar
Jiří Vahala committed
11

Alan Yee's avatar
Alan Yee committed
12
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
Jiří Vahala's avatar
Jiří Vahala committed
13

Alan Yee's avatar
Alan Yee committed
14

Jiří Vahala's avatar
Jiří Vahala committed
15
16
17
18
19
20
def standard_scale(X_train, X_test):
    preprocessor = prep.StandardScaler().fit(X_train)
    X_train = preprocessor.transform(X_train)
    X_test = preprocessor.transform(X_test)
    return X_train, X_test

Alan Yee's avatar
Alan Yee committed
21

Jiří Vahala's avatar
Jiří Vahala committed
22
23
24
25
def get_random_block_from_data(data, batch_size):
    start_index = np.random.randint(0, len(data) - batch_size)
    return data[start_index:(start_index + batch_size)]

Alan Yee's avatar
Alan Yee committed
26

Jiří Vahala's avatar
Jiří Vahala committed
27
28
29
30
31
32
33
X_train, X_test = standard_scale(mnist.train.images, mnist.test.images)

n_samples = int(mnist.train.num_examples)
training_epochs = 20
batch_size = 128
display_step = 1

Alan Yee's avatar
Alan Yee committed
34
autoencoder = Autoencoder(
Alan Yee's avatar
Alan Yee committed
35
36
37
38
    n_input=784,
    n_hidden=200,
    transfer_function=tf.nn.softplus,
    optimizer=tf.train.AdamOptimizer(learning_rate=0.001))
Jiří Vahala's avatar
Jiří Vahala committed
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

for epoch in range(training_epochs):
    avg_cost = 0.
    total_batch = int(n_samples / batch_size)
    # Loop over all batches
    for i in range(total_batch):
        batch_xs = get_random_block_from_data(X_train, batch_size)

        # Fit training using batch data
        cost = autoencoder.partial_fit(batch_xs)
        # Compute average loss
        avg_cost += cost / n_samples * batch_size

    # Display logs per epoch step
    if epoch % display_step == 0:
Alan Yee's avatar
Alan Yee committed
54
55
56
        print("Epoch:", '%d,' % (epoch + 1),
              "Cost:", "{:.9f}".format(avg_cost))

57
print("Total cost: " + str(autoencoder.calc_total_cost(X_test)))