предсказание последовательности с использованием тензорного потока lstm - PullRequest
0 голосов
/ 30 апреля 2018

так что я новичок в использовании Tensorflow, поэтому, пожалуйста, потерпите меня.

Я хочу создать LSTM rnn для прогнозирования последовательности, но так как я также собираюсь использовать это для настройки гиперпараметров, я хотел бы, чтобы входные данные имели формат [N1, n2, n3 ...] и на выходе будет одно число.

Например: ввод [1,2,3,4] | Выход = [5]

Я создал словарь так: dict = {"n1": массив (1,2,3,4,5), "n2": массив (2,3,4,5,6), "n3": массив (3,4,5,6) , 7), "n4": массив (4,5,6,7,8)}

этикетки / выход = [5,6,7,8,9]

Я хотел бы использовать оценщик, я собирался использовать DynamicRnnEstimator (), но он будет удален в будущей версии, и поэтому я хотел бы создать свой собственный оценщик для этого.

Я хочу знать, как создать свой собственный оценщик для этого конкретного сценария обучения режима для предсказания следующего числа с учетом последовательности «sequence_length».

У меня есть много последовательностей для обучения.

код, который я написал до сих пор, находится ниже:

# START

# IMPORTS

import numpy as np
import tensorflow as tf
import csv
from tensorflow.contrib.learn import DynamicRnnEstimator
from tensorflow.python import debug as tf_debug

# GLOBAL VARIABLES
sequence_length = 4 # predict the 5th number give the previous sequence_length numbers.
batch_size = 10
n_epochs = 100
n_neurons = 5

# NORMALIZING THE DATA
def normalize_data(train, test):
    m11 = float(max(train))
    m12 = float(min(train))
    normalized_train = [float((x-m12)/(m11-m12)) for x in train]
    m21 = float(max(test))
    m22 = float(min(train))
    normalized_test = [float((x-m22)/(m21-m22)) for x in test]
    return normalized_train, normalized_test

# LOADING THE DATA
def load_data(train, test):
    with open(train, 'r') as csvfile1:
        reader1 = csv.reader(csvfile1, delimiter = ',')
        train = [ float(row[1]) for row in reader1]
    with open(test, 'r') as csvfile2:
        reader2 = csv.reader(csvfile2, delimiter = ',')
        test = [ float(row[1]) for row in reader2]
    normalized_train, normalized_test = normalize_data(train, test)
    global sequence_length
    trainx = [ normalized_train[i:i+sequence_length] for i in range(len(normalized_train) - sequence_length-2)]
    testx = [ normalized_test[i:i+sequence_length] for i in range(len(normalized_test) - sequence_length-2)]
    trainy = [ normalized_train[i] for i in range(sequence_length+1, len(normalized_train))]
    testy = [ normalized_test[i] for i in range(sequence_length+1, len(normalized_test))]
    return trainx, testx, trainy, testy

# Create Dict function
def create_dict(x,y):
    feature_dict = dict()
    global sequence_length
    for i in range(sequence_length):
        temp = "number"+str(i+1)
        feature_dict[temp] = x[:,i]
    labels = y
    return feature_dict, labels

# Training input function
def train_input_fn(features, labels, batch_size):
    # Convert the inputs to a Dataset.
    dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
    # Shuffle, repeat, and batch the examples.
    dataset = dataset.shuffle(100).repeat().batch(batch_size)
    # Return the read end of the pipeline.
    return dataset.make_one_shot_iterator().get_next()

# Create feature columns
def create_feature_columns():
    feature_column = []
    for i in range(sequence_length):
        feature_column.append(tf.feature_column.numeric_column(key="number"+str(i+1)))
    return feature_column

# Model_ function
def my_model_fn(features, labels, mode, params):
     net = tf.feature_column.input_layer(features, params['feature_columns'])
     for units in params['hidden_units']:
        net = tf.layers.dense(net, units=units, activation=tf.nn.relu)
     logits = tf.layers.dense(net, params['n_classes'], activation=None)

def main():
    global sequence_length, batch_size, n_epochs, n_neurons
    trainx, testx, trainy, testy = load_data("train.csv", "test.csv")
    trainx, testx, trainy, testy = np.array(trainx), np.array(testx), np.array(trainy), np.array(testy )
    n_train = len(trainx)
    n_test = len(testx)
    feature_dict_train, label_train = create_dict(trainx, trainy)
    feature_dict_test, label_test = create_dict(testx, testy)
    feature_column = create_feature_columns()



main()

СПАСИБО ЗА ПРЕДЕЛА!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...