मैं खेल रॉक-पेपर-कैंची में प्रतिद्वंद्वी के अगले कदम की भविष्यवाणी करने के लिए एलएसटीएम तंत्रिका नेटवर्क (केरास का उपयोग करके) का उपयोग करने की कोशिश कर रहा हूं।केरास एलएसटीएम प्रशिक्षण डेटा प्रारूप
मैंने रॉक के रूप में इनपुट को एन्कोड किया है: [1 0 0], पेपर: [0 1 0], कैंची: [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
मेरा प्रश्न Keras '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)