Не уверены в требуемой форме ввода для регрессии нейронной сети - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь провести некоторый регрессионный анализ некоторых полетных данных.Я загрузил свои параметры (предыдущие файлы .mat) и теперь у меня есть 6 параметров в качестве предикторов в списке форматов и один параметр ответа в списке форматов.

То, что я до сих пор делал, - это объединение предикторов в один объединенный список.Теперь я хотел создать модель и обучить ее, но, как я и ожидал, список форматов несовместим.Я получил ошибку: AttributeError: у объекта 'list' нет атрибута 'shape'

Таким образом, я попытался преобразовать списки в тензор с помощью tf.convert_to_tensor.К сожалению, это не работает.Теперь я получаю сообщение об ошибке: ValueError: установка элемента массива с последовательностью

К сожалению, я только узнал, как выполнить классификацию изображений с CNN в тензорном потоке, и я не уверен, какой формат является правильным для предоставления моегоданные на входной слой.Прямо сейчас мои предикторы состоят из 6 параметров, взятых каждые 0,1 секунды.Список имеет такую ​​форму:

[[('__header__', b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Wed Dec 26 19:17:10 2018'), ('__version__', '1.0'), ('__globals__', []), ('RSVRQuantity_Center', array([[111],
       [111],
       [111],
       ...,
       [104],
       [104],
       [104]], dtype=uint8))], [('__header__', b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Wed Dec 26 19:32:29 2018'), ('__version__', '1.0'), ('__globals__', []), ('RSVRTemp_Center', array([[36.5  ],
       [36.5  ],
       [36.5  ],
       ...,
       [ 4.625],
       [ 4.625],
       [ 4.625]]))], [('__header__', b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Wed Dec 26 19:33:00 2018'), ('__version__', '1.0'), ('__globals__', []), ('AirDrivenPumpTemp1_Center', array([[ 35.9 ],
       [ 35.9 ],
       [ 35.9 ],
       ...,
       [-13.75],
       [-13.75],
       [-13.75]]))], [('__header__', b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Wed Dec 26 19:33:29 2018'), ('__version__', '1.0'), ('__globals__', []), ('AirDrivenPumpTemp2_Center', array([[ 35.9 ],
       [ 35.9 ],
       [ 35.9 ],
       ...,
       [-13.13],
       [-13.13],
       [-13.13]]))], [('__header__', b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Wed Dec 26 19:34:12 2018'), ('__version__', '1.0'), ('__globals__', []), ('ElecPumpTemp1_Center', array([[45.9 ],
       [45.9 ],
       [45.9 ],
       ...,
       [14.63],
       [14.63],
       [14.63]]))], [('__header__', b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Wed Dec 26 19:33:54 2018'), ('__version__', '1.0'), ('__globals__', []), ('ElecPumpTemp2_Center', array([[43.6 ],
       [43.6 ],
       [43.6 ],
       ...,
       [12.75],
       [12.75],
       [12.75]]))]]

Модель, которую я создал до сих пор, выглядит следующим образом:

def GradientDescent(features, labels, mode):

    # create an dense layer as input layer with 6 units for 6 features and ReLU activation function
    input_layer = tf.layers.dense(inputs=features["x"], units=6, activation=tf.nn.relu)

    # declare a dense layer with 12 units and ReLU activation function
    hidden1 = tf.layers.dense(inputs=input_layer, units=12, activation=tf.nn.relu)

    # declare a dense layer with 12 units and ReLU activation function
    hidden2 = tf.layers.dense(inputs=hidden1, units=12, activation=tf.nn.relu)

    # declare a dense layer with 6 units and ReLU activation function
    hidden3 = tf.layers.dense(inputs=hidden2, units=6, activation=tf.nn.relu)

    # declare a dense layer with 1 unit as output layer
    logits = tf.layers.dense(inputs=hidden3, units=1)

    predictions = tf.argmax(input=logits, axis=1)

    # return the estimator when predicting (no loss and training function needs to be defined here)
    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)

    # declare the loss function sparse softmax cross entropy
    loss = tf.losses.sparse_softmax_cross_entropy(labels=labels,logits=logits)

    # declare a decreasing learning rate
    # starter_learning_rate = 0.1
    # global_step = tf.Variable(0, trainable=False)
    # learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step, 10000, 0.96, staircase=True)

    # declare a gradient descent optimizer with a decreasing learning rate
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)

    train_op = optimizer.minimize(loss=loss, global_step=tf.train.get_global_step())

    # define the accuracy error metric
    eval_metric_ops = {
        "accuracy": tf.metrics.accuracy(labels=labels, predictions=predictions)
    }

    #tf.summary.scalar('accuracy', accuracy)

    return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op, predictions=predictions, eval_metric_ops=eval_metric_ops)

Я даю данные для обучения следующим образом:

HydSysPress_Center_PTRTRQ = tf.estimator.Estimator(model_fn=GradientDescent, model_dir="GradDescent_10000")

train_input = tf.estimator.inputs.numpy_input_fn(x={"x": Predictors}, y=HydSysPress_Center, batch_size=64, num_epochs=None, shuffle=False)
HydSysPress_Center_PTRTRQ.train(input_fn=train_input, steps=100)

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

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