2015-09-24 8 views
8

TLDR: अनुक्रम में अगले मान की भविष्यवाणी करने के लिए मैं केरास आरएनएन का उपयोग कैसे करूं?एक केरास आवर्ती तंत्रिका नेटवर्क का उपयोग कर भविष्यवाणियां - सटीकता हमेशा 1.0


मेरे पास अनुक्रमिक मानों की एक सूची है। मैं उन्हें पर अनुक्रम में अगले मान को आरएनएन में फ़ीड करना चाहता हूं।

[ 0.43589744 0.44230769 0.49358974 ..., 0.71153846 0.70833333 0.69230769] 

मैं Keras उपयोग कर रहा हूँ यह करने के लिए और एक कम नुकसान के साथ एक नेटवर्क प्राप्त कर सकते हैं लेकिन सटीकता लगातार 1.0 है। ये गलत है। y_tests != model.predict(x_tests)

Epoch 0 
1517/1517 [==============================] - 0s - loss: 0.0726 - acc: 1.0000 - val_loss: 0.0636 - val_acc: 1.0000 
Epoch 1 
1517/1517 [==============================] - 0s - loss: 0.0720 - acc: 1.0000 - val_loss: 0.0629 - val_acc: 1.0000 
... 

मेरा नेटवर्क यहां है।

model = Sequential() 
model.add(SimpleRNN(1, 100)) 
model.add(Dense(100, 1, activation = "sigmoid")) 
model.compile(loss="mean_squared_error", optimizer = "sgd") 

मैंने एक सरलआरएनएन, जीआरयू और एलएसटीएम की कोशिश की है लेकिन कोई भाग्य नहीं है। यहां बताया गया है कि डेटा कैसे स्वरूपित किया गया है।

# Current value 
y_train = [[ 0.60576923] [ 0.64102564] [ 0.66025641] ..., [ 0.71153846] [ 0.70833333] [ 0.69230769]] 

# Previous 10 values 
x_train_10 = [ 
    [[ 0.65064103] [ 0.66346154] [ 0.66346154] ..., [ 0.72115385] [ 0.72435897] [ 0.71153846]] ..., 
    [[ 0.66346154] [ 0.66346154] [ 0.67628205] ..., [ 0.72435897] [ 0.71153846] [ 0.70833333]] 
] 

# Previous value 
x_train_1 = [[ 0.58333333] [ 0.60576923] [ 0.64102564] ..., [ 0.72435897] [ 0.71153846] [ 0.70833333]] 

# So here are the shapes... 
y_train.shape = (1895, 1) 
x_train_10.shape = (1895, 10, 1) 
x_train_1.shape = (1895, 1) 

x_train_10 में प्रत्येक तत्व पिछले 10 मानों की सूची है। मैंने इसे केरास के दस्तावेज़ीकरण का पालन करने के लिए इस तरह स्वरूपित किया कि पुनरावर्ती परतें (nb_samples, timesteps, input_dim) आकार का इनपुट लेती हैं।

मैंने किसी भी भाग्य के साथ Embedding परत का उपयोग करने का भी प्रयास किया है। (यह इसका उपयोग करने का गलत तरीका हो सकता है - मैंने केवल इसे वर्गीकरण में भविष्यवाणी नहीं किया है)।

model = Sequential() 
model.add(Embedding(1, 30)) 
model.add(LSTM(30, 100)) 
... 

pad_sequences भी काम नहीं किया।

x_train_1 = sequence.pad_sequences(x_train_1, maxlen = None, dtype = "float32") 

मैं RNN इस सरल डेटा/वास्तुकला के साथ काम कर रहा तो मैं बाद में अधिक जटिल समस्याओं के लिए उपयोग कर सकते हैं करना चाहते हैं।

धन्यवाद :)

उत्तर

7

मैं एक similar question on the Keras Github पेज तैनात है और एक अच्छा जवाब मिला है।


lukedeo कहा acc: 1.0000 इसका मतलब है कि दोनों सही उत्पादन और भविष्यवाणी की उत्पादन से अधिक 0.5 या इसके ठीक विपरीत है। इसके बजाय, मुझे मॉडल की सटीकता निर्धारित करने के लिए हानि, या mse को देखना चाहिए। ऐसा इसलिए है क्योंकि मेरा नेटवर्क एक प्रतिगमन नहीं है जो क्लासिफायर/क्लस्टरर नहीं है।

रूट मतलब वर्ग त्रुटि सटीकता का एक अच्छा उपाय है। accuracy_percent = 1 - np.sqrt(mse)


fchollet (Keras निर्माता) कह रही है कि की व्याख्या के अनुसार "सटीकता बिल्कुल एक प्रतिगमन समस्या के लिए प्रासंगिक नहीं है।"

जब श्रेणीबद्ध समस्यायें कर रही है, सटीकता प्रासंगिक 'categorical' या 'binary' करने के लिए class_mode की स्थापना करके model.comple(...) में लक्ष्य (नेटवर्क उत्पादन) के आधार पर बनाया जा सकता है।

4

अनुकूलक के रूप में RMSProp प्रयास करें

model.compile(loss="mean_squared_error", optimizer = 'rmsprop') 
संबंधित मुद्दे