Автоэнкодер в TensorFlow - PullRequest
       2

Автоэнкодер в TensorFlow

0 голосов
/ 14 апреля 2019

Я строю реализацию Tensorflow для автоматического кодера для временных рядов. У меня 2000 временных рядов, каждый из которых представляет собой серию 501-временных компонентов. Эти временные ряды хранятся в файле .mat, который я читаю при вводе с помощью scipy.

Затем я создаю автоэнкодер и обучаю его, используя серии временного ряда 2000 года. Наконец, я хотел бы визуализировать прогноз обученного автоэнкодера на 2000 временных рядов, указанных в качестве входных данных, и сравнить с исходным рядом, чтобы я мог видеть, выполняет ли автоэнкодер хорошую работу по сжатию данных.

Я использую двухслойный автоэнкодер с 250 и 100 узлами в первом и втором скрытом слое соответственно.

Моя проблема в том, что когда я сравниваю предсказанные временные ряды с исходными, предсказанные имеют только положительные значения, в то время как исходные временные ряды имеют как отрицательные, так и положительные значения.

Вот код, который я использовал:

import scipy.io
mat = scipy.io.loadmat('input_time_series.mat')

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.contrib.layers import fully_connected

input = mat
output = input

tf.reset_default_graph()

num_inputs=501    #number of components in the original time seris
num_hid1=250
num_hid2=100
num_hid3=num_hid1
num_output=num_inputs
lr=0.01
actf=tf.nn.relu

X=tf.placeholder(tf.float32,shape=[None,num_inputs])
initializer=tf.variance_scaling_initializer()

w1=tf.Variable(initializer([num_inputs,num_hid1]),dtype=tf.float32)
w2=tf.Variable(initializer([num_hid1,num_hid2]),dtype=tf.float32)
w3=tf.Variable(initializer([num_hid2,num_hid3]),dtype=tf.float32)
w4=tf.Variable(initializer([num_hid3,num_output]),dtype=tf.float32)

b1=tf.Variable(tf.zeros(num_hid1))
b2=tf.Variable(tf.zeros(num_hid2))
b3=tf.Variable(tf.zeros(num_hid3))
b4=tf.Variable(tf.zeros(num_output))

hid_layer1=actf(tf.matmul(X,w1)+b1)
hid_layer2=actf(tf.matmul(hid_layer1,w2)+b2)
hid_layer3=actf(tf.matmul(hid_layer2,w3)+b3)
output_layer=actf(tf.matmul(hid_layer3,w4)+b4)

loss=tf.reduce_mean(tf.square(output_layer-X))

optimizer=tf.train.AdamOptimizer(lr)
train=optimizer.minimize(loss)

init=tf.global_variables_initializer()

num_epoch=5000
batch_size=150

with tf.Session() as sess:
    sess.run(init)
    for epoch in range(num_epoch):

        num_batches=2000//batch_size
        for iteration in range(num_batches):
            X_batch = input[:]
            Y_batch = output[:]
            sess.run(train,feed_dict={X:X_batch})

        train_loss=loss.eval(feed_dict={X:X_batch})
        print("epoch {} loss {}".format(epoch,train_loss))


    results=output_layer.eval(feed_dict={X:input})

Я также включил пример сравнения между одним входным временным рядом (синим цветом) и соответствующим, прогнозируемым автоэнкодером (оранжевым цветом) enter image description here

...