Найдите скрытую формулу с помощью Tensorflow (Обработка числового ввода / вывода) - PullRequest
0 голосов
/ 16 мая 2018

У меня есть стандартный CSV-файл с кучей строк, каждый из которых содержит 60 столбцов случайных чисел (с плавающей точкой). В столбцах 61-63 у меня есть числа (снова плавающие), которые являются некоторой функцией первых 60 столбцов.

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

Вот как я читаю в данных

import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import pandas as pd
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split

def read_data():
    rd = pd.read_csv(file_path)
    x = rd[rd.columns[0:60]].values
    y = rd[rd.columns[60:63]].values
    X = x.astype(float) #just making sure we have the right dtype 
    Y = y.astype(float) 
    print(X.shape)
    print(Y.shape)
    return (X, Y)

X, Y = read_data()

Затем я перетасовываю и разбиваю данные на наборы для обучения и тестирования

X, Y = shuffle(X, Y, random_state=1)
train_x, test_x, train_y, test_y = train_test_split(X, Y, test_size=0.25, random_state=117)

Далее я определяю свою модель, веса и уклоны

n_dim = X.shape[1]
print("n_dim", n_dim)
n_output = Y.shape[1]
print("n_output", n_output)    
n_hidden_1 = 100
n_hidden_2 = 75
n_hidden_3 = 50
n_hidden_4 = 50
x = tf.placeholder(tf.float32, [None, n_dim])
W = tf.Variable(tf.zeros([n_dim, n_output]))
b = tf.Variable(tf.zeros([n_output]))
y = tf.placeholder(tf.float32, [None, n_output])

def layered_model(x, weights, biases):

    # 4 hidden layers with sigmoid and relu
    layer_1 = tf.add(tf.matmul(x, weights['w1']), biases['b1'])
    layer_1 = tf.nn.sigmoid(layer_1)

    layer_2 = tf.add(tf.matmul(layer_1, weights['w2']), biases['b2'])
    layer_2 = tf.nn.sigmoid(layer_2)

    layer_3 = tf.add(tf.matmul(layer_2, weights['w3']), biases['b3'])
    layer_3 = tf.nn.sigmoid(layer_3)

    layer_4 = tf.add(tf.matmul(layer_3, weights['w4']), biases['b4'])
    layer_4 = tf.nn.relu(layer_4)

    out_layer = tf.matmul(layer_4, weights['out']) + biases['out']
    return out_layer

weights = {
    'w1': tf.Variable(tf.truncated_normal([n_dim, n_hidden_1])),
    'w2': tf.Variable(tf.truncated_normal([n_hidden_1, n_hidden_2])),
    'w3': tf.Variable(tf.truncated_normal([n_hidden_2, n_hidden_3])),
    'w4': tf.Variable(tf.truncated_normal([n_hidden_3, n_hidden_4])),
    'out': tf.Variable(tf.truncated_normal([n_hidden_4, n_output]))
}
biases = {
    'b1': tf.Variable(tf.truncated_normal([n_hidden_1])),
    'b2': tf.Variable(tf.truncated_normal([n_hidden_2])),
    'b3': tf.Variable(tf.truncated_normal([n_hidden_3])),
    'b4': tf.Variable(tf.truncated_normal([n_hidden_4])),
    'out': tf.Variable(tf.truncated_normal([n_output]))
}

Как мне передать свои данные в функцию стоимости, а затем использовать ее для моих эпох? Все учебники, которые я могу найти, предназначены для помеченных наборов данных, помещающих вещи в «ведра». Принимая во внимание, что это чисто цифровой ввод / вывод.

Единственная информация, которую я могу найти, - это то, что в числовых функциях стоимости обычно используется метод квадратов ошибок, и feed_dict будет необходим:

cost_function = tf.reduce_mean(tf.square(prediction - actual))

1 Ответ

0 голосов
/ 05 июня 2018

Мне удалось заставить его "работать". Однако функция стоимости минимизируется до числа, близкого ко всем результатам обучения, и затем всегда будет возвращать это число, независимо от ввода. Не совсем "учусь" в полезном смысле.

Я обнаружил, что мне нужно разбить задачу на задачу классификации, прежде чем машинное обучение сможет сделать полезные прогнозы.

...