나는 Keras를 사용하는 LSTM 신경망을 사용하여 Rock-Paper-Scissor 게임에서 상대방의 다음 움직임을 예측하려고합니다.Keras LSTM 훈련 데이터 형식
입력을 Rock : [1 0 0], Paper : [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
내 질문이 Keras 'LSTM 네트워크는 데이터 형식의 유형을 받아 들일 않는 것입니다 교육 라벨
예를 들어, 다음은 입력 데이터
1,0,0
0,1,0
0,1,0
0,0,1
그리고 다섯 번째입니다? 이러한 목적으로 데이터를 재정렬하는 최적의 방법은 무엇입니까? 도움이된다면 내 불완전한 코드는 다음과 같이 연결되어 다음 LSTM에 대한
#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)