Использование RNN для создания последовательности с конечной точкой stati c с использованием TF и ​​Keras - PullRequest
0 голосов
/ 14 июля 2020

В настоящее время я изучаю, как использовать нейронные сети при работе над своим проектом. В проекте я пытаюсь создать нейронную сеть, чтобы создать путь от начальной точки (0,0) до конечной точки (xn, yn).

У меня есть данные, состоящие из списка координат, начиная с от (0,0) до конечной точки: [(0,1), (0,2), (-1,2) ..., (xn, yn)], где каждая последующая координата равна одной шаг вперед по пути к цели.

Я использую простую нейронную сеть LSTM, построенную с использованием последовательной модели Кераса, как показано ниже, где цель состоит в том, чтобы иметь возможность предсказать путь, учитывая только конечные координаты.

import numpy as np
import tensorflow as tf
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM, Activation
from tensorflow.keras import optimizers

#Sequence end point, each tuple is the end point for one output sequence
input_data = [(x1n, y1n), (x2n, y2n)] 
#Sequences from (0,0) to the end point (xn, yn)
output_data = [[(0,1), (0,2), (-1,2)..., (x1n, y1n)], [(0,1), (0,2), (-1,2)..., (x2n, y2n)]]

input = np.array(input_data).reshape((input_data.shape[0], input_data.shape[1], 1))

model = Sequential()
model.add(LSTM(50, input_shape = (2,1), return_sequences = True))
model.add(LSTM(50, return_sequences = False))
model.add(Dense(input.shape[0]))
model.add(Activation('softmax'))

adam = optimizers.Adam(lr = 0.001)
model.compile(loss = 'categorical_crossentropy', optimizer = adam, metrics = ['accuracy'])

model.fit(input, output_data)

Большая часть кода, используемого здесь, взята из этого невероятно полезного руководства по нейронным сетям для начинающих.

Мои вопросы следующие:

  1. Есть ли лучший макет (например, использование другого типа слоя или добавление других слоев) для нейронной сети, которая генерирует данные последовательности? Я был очень заинтригован тем, как это было сделано в работе Алекса Грейвса paper для создания последовательностей рукописного текста. Он действительно использовал более сложную версию, чем эта, но поскольку я все еще новичок, я буду придерживаться простых вещей.

  2. Можно ли заставить нейронную сеть создать последовательность, которая всегда заканчивается заданной точкой? В моем случае меня интересует путь между начальной и конечной точкой, поэтому как я могу запрограммировать сеть, чтобы всегда использовать конечную точку в качестве конца сгенерированной последовательности?

  3. Могу ли я выполнить предварительную обработку, чтобы улучшить результаты? Единственное, что я сделал до сих пор, - это преобразовал ввод в трех измерениях, чтобы он принимался слоем LSTM. Я знаю, что люди обычно пытаются стандартизировать ввод, но я не уверен, как go об этом с моими данными. Улучшает ли это нейронную сеть, и если да, то почему?

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