Tôi đang cố gắng sử dụng mạng nơron LSTM (sử dụng Keras) để dự đoán động thái tiếp theo của đối thủ trong trò chơi Rock-Paper-Scissor.Keras Định dạng dữ liệu đào tạo LSTM
Tôi đã mã hóa các yếu tố đầu vào là Rock: [1 0 0], Paper: [0 1 0], Scissor: [0 0 1]. Bây giờ tôi muốn đào tạo mạng thần kinh nhưng tôi hơi bối rối về cấu trúc dữ liệu của dữ liệu đào tạo của tôi.
tôi đã được lưu trữ lịch sử trò chơi của đối thủ trong tệp .csv với cấu trúc sau:
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
Và tôi đang cố gắng sử dụng tất cả các dữ liệu thứ 5 là nhãn đào tạo của tôi, và 4 dữ liệu trước đó là công tác đào tạo đầu vào. Nói cách khác, ở mỗi bước thời gian, một vectơ có thứ nguyên 3 được gửi đến mạng và chúng tôi có 4 bước thời gian.
Ví dụ, sau đây là dữ liệu đầu vào
1,0,0
0,1,0
0,1,0
0,0,1
Và một phần năm là nhãn đào tạo
1,0,0
Câu hỏi của tôi là những gì kiểu định dạng dữ liệu không mạng LSTM Keras' chấp nhận? Điều gì sẽ là một cách tối ưu để sắp xếp lại dữ liệu của tôi cho mục đích này? Mã không đầy đủ của tôi được đính kèm như sau nếu nó giúp:
#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)