В настоящее время я изучаю, как использовать нейронные сети при работе над своим проектом. В проекте я пытаюсь создать нейронную сеть, чтобы создать путь от начальной точки (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)
Большая часть кода, используемого здесь, взята из этого невероятно полезного руководства по нейронным сетям для начинающих.
Мои вопросы следующие:
Есть ли лучший макет (например, использование другого типа слоя или добавление других слоев) для нейронной сети, которая генерирует данные последовательности? Я был очень заинтригован тем, как это было сделано в работе Алекса Грейвса paper для создания последовательностей рукописного текста. Он действительно использовал более сложную версию, чем эта, но поскольку я все еще новичок, я буду придерживаться простых вещей.
Можно ли заставить нейронную сеть создать последовательность, которая всегда заканчивается заданной точкой? В моем случае меня интересует путь между начальной и конечной точкой, поэтому как я могу запрограммировать сеть, чтобы всегда использовать конечную точку в качестве конца сгенерированной последовательности?
Могу ли я выполнить предварительную обработку, чтобы улучшить результаты? Единственное, что я сделал до сих пор, - это преобразовал ввод в трех измерениях, чтобы он принимался слоем LSTM. Я знаю, что люди обычно пытаются стандартизировать ввод, но я не уверен, как go об этом с моими данными. Улучшает ли это нейронную сеть, и если да, то почему?