так что я новичок в использовании 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()
СПАСИБО ЗА ПРЕДЕЛА!