Классифицировать входы по отношению к выходу Tensorflow Pandas - PullRequest
0 голосов
/ 10 декабря 2018

Вот моя программа:

tf.reset_default_graph()

X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
y = tf.placeholder(tf.float32, [None,n_outputs])

layers = [tf.contrib.rnn.LSTMCell(num_units=n_neurons, 
                                 activation=tf.nn.leaky_relu, use_peepholes = True)
         for layer in range(n_layers)]
multi_layer_cell = tf.contrib.rnn.MultiRNNCell(layers)
rnn_outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)
stacked_rnn_outputs = tf.reshape(rnn_outputs, [-1, n_neurons]) 
stacked_outputs = tf.layers.dense(stacked_rnn_outputs, n_outputs)

outputs = tf.reshape(stacked_outputs, [-1, n_steps, n_outputs])

outputs = outputs[:,n_steps-1,:] # keep only last output of sequence

loss = tf.reduce_mean(tf.squared_difference(outputs, y)) # loss function = mean squared error 

optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate) 

training_op = optimizer.minimize(loss)

Я разделил входы и выходы следующим образом:

valid_set_size_percentage = 3
test_set_size_percentage = 3
col_names = []
seq_len = 5 # choose sequence length

slice1 = slice(-1) # meaning [:-1]
slice2 = slice(None,-1)
# slice2 = slice(4,-1) # meaning [4:-1]
slice3 = slice(-1,None) # meaning [-1:]

def normalize_data(df):
    cols = list(df_stock.columns.values)
    min_max_scaler = sklearn.preprocessing.MinMaxScaler()
    df = pd.DataFrame(min_max_scaler.fit_transform(df.values))
    df.columns = cols
    return df
def load_data(stock, seq_len):
    global col_names
    data_raw = stock.as_matrix() # convert to numpy array
    col_names = stock.columns[slice2]
    data = []
    print(data_raw.shape)
    for index in range(len(data_raw) - seq_len): 
        data.append(data_raw[index: index + seq_len])
    data = np.array(data);
    valid_set_size = int(np.round(valid_set_size_percentage/100*data.shape[0]));  
    test_set_size = int(np.round(test_set_size_percentage/100*data.shape[0]));
    train_set_size = data.shape[0] - (valid_set_size + test_set_size);
    x_train = data[:train_set_size,:-1,slice2]
    y_train = data[:train_set_size,-1,slice3]
    x_valid = data[train_set_size:train_set_size+valid_set_size,:-1,slice2]
    y_valid = data[train_set_size:train_set_size+valid_set_size,-1,slice3]

    x_test = data[train_set_size+valid_set_size:,:-1,slice2]
    y_test = data[train_set_size+valid_set_size:,-1,slice3]
    return [x_train, y_train, x_valid, y_valid, x_test, y_test]
df_stock = df.copy()
cols = list(df_stock.columns.values)
print('df_stock.columns.values = ', cols)
df_stock_norm = df_stock.copy()
df_stock_norm = normalize_data(df_stock_norm)
x_train, y_train, x_valid, y_valid, x_test, y_test = load_data(df_stock_norm, seq_len)

Ниже приведен выход из вышеприведенного кода:

x_train.shape =  (1874, 4, 7)
y_train.shape =  (1874, 1)
Inputs =  7
Outputs =  1
x_valid.shape =  (60, 4, 7)
y_valid.shape =  (60, 1)
x_test.shape =  (60, 4, 7)
y_test.shape =  (60, 1)
Index(['input1', 'input2', 'input3', 'input4', 'input5', 'input6', 'input7'], dtype='object')

Что правильно в соответствии с тем, что я собираюсь назначить на тренинг.Входы 7, а выход - один столбец.

Вот пример набора данных: См. Пример csv

Но я не получаю классифицированный результат в обучении, которое я, хотяполучить.Я хочу знать, как я могу классифицировать свои данные относительно выходных значений.Я имею в виду, что ввод данных должен идти в обучении как последовательность вывода, которая дает больше 1's or 0's or -1's, который является ожидаемым результатом.

Пожалуйста, дайте мне знать, если есть какая-то путаница, я уточню.Но дайте мне знать ваши предложения.

Могу ли я узнать, как я могу визуализировать дерево решений в Tensorboard?

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