Я пытаюсь использовать нейронную сеть LSTM (используя Keras), чтобы предсказать следующий шаг противника в игре Rock-Paper-Scissor.Формат данных обучения Keras LSTM
Я кодировал входы как Rock: [1 0 0], Бумага: [0 1 0], Scissor: [0 0 1]. Теперь я хочу обучить нейронную сеть, но я немного запутался в структуре данных моих данных обучения.
Я сохранил историю игры противника в файле .csv со следующей структурой:
1,0,0
0,1,0
0,1,0
0,0,1
1,0,0
0,1,0
0,1,0
0,0,1
1,0,0
0,0,1
И я пытаюсь использовать каждые 5 данные, как моя тренировочную этикетку, и предыдущие 4 данных в качестве подготовки вход. Другими словами, на каждом временном шаге вектор с размерностью 3 отправляется в сеть, и у нас есть 4 временных шага.
Например, следующие входные данные
1,0,0
0,1,0
0,1,0
0,0,1
И пятый является подготовка этикетки
1,0,0
Мой вопрос, какой тип формата данных делает LSTM сеть Keras' принимает? Что было бы оптимальным способом переупорядочения моих данных для этой цели? Мой неполный код прилагается в следующем, если это поможет:
#usr/bin/python
from __future__ import print_function
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
from keras.optimizers import Adam
output_dim = 3
input_dim = 3
input_length = 4
batch_size = 20 #use all the data to train in one iteration
#each input has such strcture
#Rock: [1 0 0], Paper: [0 1 0], Scissor: [0 0 1]
#4 inputs (vectors) are sent to the LSTM net and output 1 vector as the prediction
#incomplete function
def read_data():
raw_training = np.genfromtxt('training_data.csv',delimiter=',')
print(raw_training)
def createNet(summary=False):
print("Start Initialzing Neural Network!")
model = Sequential()
model.add(LSTM(4,input_dim=input_dim,input_length=input_length,
return_sequences=True,activation='softmax'))
model.add(Dropout(0.1))
model.add(LSTM(4,
return_sequences=True,activation='softmax'))
model.add(Dropout(0.1))
model.add(Dense(3,activation='softmax'))
model.add(Dropout(0.1))
model.add(Dense(3,activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])
if summary:
print(model.summary())
return model
if __name__=='__main__':
createNet(True)