Последовательность прогнозирования тензорного потока

1

Поэтому моя задача - предсказать последовательность. У меня есть значения x, y, z в момент времени t, которые являются типами float. Я должен предсказать последовательность, которая имеет значения x, y, z в момент времени (t + 1).

TIME_STEP = 10
N_FEATURES = N_CLASSES = 3
LEARNING_RATE = 0.01
EPOCHS = 50
BATCH_SIZE = 10

x = tf.placeholder(tf.float32, shape = [None, N_FEATURES], name = 'name')
y = tf.placeholder(tf.float32, shape = [N_CLASSES], name = 'labels')

то у меня есть моя модель lstm, которая выглядит так:

    x = tf.transpose(x, [1, 0])
    x = tf.reshape(x, [-1, num_features])

    hidden = tf.nn.relu(tf.matmul(x, self.h_W) + self.h_biases)
    hidden = tf.split(hidden, self.time_step)

    lstm_layers = [tf.contrib.rnn.BasicLSTMCell(self.hidden_units, forget_bias=1.0) for _ in range(2)]

    lstm_layers = tf.contrib.rnn.MultiRNNCell(lstm_layers)
    outputs, _ = tf.contrib.rnn.static_rnn(lstm_layers, hidden, dtype = tf.float32)

    lstm_output = outputs[-1]

и, наконец, я определяю функцию потерь и оптимизатор

loss = tf.reduce_mean(tf.square(y - y_pred))
opt = tf.train.AdamOptimizer(learning_rate = LEARNING_RATE).minimize(loss)

пока я хочу взять предыдущие 10 значений, чтобы предсказать 11-й. поэтому я запускаю сеанс как

for time in range(0, len(X)):
        sess.run(opt, feed_dict = {x : X[time: time + TIME_STEP ],
                                   y : Y[time + TIME_STEP + 1]})

но когда я проверяю потерю для этой функции, она имеет огромное значение, например, 99400290.0 и увеличивает время от времени. Это мой первый опыт с предсказанием последовательностей, поэтому я думаю, что мне не хватает чего-то огромного

  • 0
    Вы пытались уменьшить скорость обучения?
  • 0
    Я проверил скорость обучения с 0,00001, но она все еще не работает.
Показать ещё 2 комментария
Теги:
tensorflow
python-3.x
neural-network
sequence

1 ответ

0

Да, вы должны нормализовать свои исходные данные в реальном мире, и он должен использовать тот же масштаб (те же параметры), который вы использовали в своем учебном наборе.

Причина в том, что теперь ваша модель обучена принимать входные данные определенной формы и масштаба и для того, чтобы она выполнялась по назначению, вам придется масштабировать свои тестовые входы.

(извините за сообщение в качестве ответа, недостаточно для комментариев)

  • 0
    Спасибо за ответ, да, теперь я это понимаю, но можете ли вы предложить какие-либо алгоритмы масштабирования, которые могут хорошо работать с данными, имеющими отклонения от 0 до 300 000?
  • 0
    Ну, насколько я знаю, минимальное-максимальное масштабирование и стандартизация - это методы, которые почти только используются. Существует еще один метод, называемый нормализацией, но он используется только для матриц. Диапазон, который он распространяет, не является большой проблемой, когда дело доходит до нормализации, так как в этом вся суть. Когда входы велики, они имеют тенденцию выводить значения, которые находятся на обоих концах функции активации, что затрудняет обратный ход, поскольку градиенты почти равны 0. Поэтому мы склонны использовать значения от 0 до 1 или от -1 до 1.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню