LSTMニューラルネットワーク(Kerasを使用)を使用して、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
0,1,0
0,1,0
0,0,1
そして5つ目
をである私の質問Keras' LSTMネットワークはデータフォーマットの種類を受け入れないさ
1,0,0
トレーニングラベルのですか?この目的のためにデータを並べ替える最適な方法は何でしょうか?
#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)