2017-01-24 22 views
5

में एक तंत्रिका नेटवर्क को शून्य सटीकता प्रशिक्षण, मैं केरास में रीग्रेशन समस्या के तंत्रिका नेटवर्क को प्रशिक्षित करता हूं। आउटपुट केवल एक आयाम क्यों है, प्रत्येक युग में सटीकता हमेशा एसी दिखाती है: 0.0000e + 00?केरास

इस तरह:

1000/199873 [..............................] - अनुमानित समय 5s - नुकसान: 0.0057 - एसीसी: 0.0000e + 00

2000/199873 [.............................] - ईटीए: 4 एस - हानि: 0.0058 - एसीसी: 0.0000e + 00

3000/199873 [........................... ...] - ईटीए: 3 एस - हानि: 0.0057 - एसीसी: 0.0000e + 00

4000/199873 [....................... .......] - ईटीए: 3 एस - नुकसान: 0.0060 - एसी: 0.0000e + 00 ...

198000/199873 [============================>।] - ईटीए: 0 एस - हानि : 0.0055 - एसीसी: 0.0000e + 00

199000/199873 [============================>।] - ईटीए : 0 - नुकसान: 0.0055 - एसीसी: 0.0000e + 00

199873/199873 [============================= =] - 4s - नुकसान: 0.0055 - एसीसी: 0.0000e +00 - val_loss: 0.0180 - val_acc: 0.0000e + 00

युग 50/50

लेकिन अगर उत्पादन दो आयाम हैं या ऊपर, सटीकता के लिए कोई समस्या नहीं है।

नीचे के रूप में मेरे मॉडल: `

input_dim = 14 
batch_size = 1000 
nb_epoch = 50 
lrelu = LeakyReLU(alpha = 0.1) 

model = Sequential() 
model.add(Dense(126, input_dim=input_dim)) #Dense(output_dim(also hidden wight), input_dim = input_dim) 
model.add(lrelu) #Activation 

model.add(Dense(252)) 
model.add(lrelu) 
model.add(Dense(1)) 
model.add(Activation('linear')) 

model.compile(loss= 'mean_squared_error', optimizer='Adam', metrics=['accuracy']) 
model.summary() 
history = model.fit(X_train_1, y_train_1[:,0:1], 
        batch_size=batch_size, 
        nb_epoch=nb_epoch, 
        verbose=1, 
        validation_split=0.2) 

loss = history.history.get('loss') 
acc = history.history.get('acc') 
val_loss = history.history.get('val_loss') 
val_acc = history.history.get('val_acc') 

'''saving model''' 
from keras.models import load_model 
model.save('XXXXX') 
del model 

'''loading model''' 
model = load_model('XXXXX') 

'''prediction''' 
pred = model.predict(X_train_1, batch_size, verbose=1) 
ans = [np.argmax(r) for r in y_train_1[:,0:1]] 

उत्तर

5

समस्या अपने अंतिम मॉडल उत्पादन एक रेखीय सक्रियण है, मॉडल एक प्रतिगमन, नहीं श्रेणीबद्ध समस्यायें बना रही है। "सटीकता" को परिभाषित किया जाता है जब मॉडल वर्ग के अनुसार डेटा को सही ढंग से वर्गीकृत करता है, लेकिन इसकी निरंतर संपत्ति के कारण, "सटीकता" को प्रभावी रूप से एक रिग्रेशन समस्या के लिए परिभाषित नहीं किया जाता है।

या तो मेट्रिक के रूप में सटीकता से छुटकारा पाएं और पूरी तरह से प्रतिगमन पर स्विच करें, या loss='categorical_crossentropy' और activation='softmax' का उपयोग करके वर्गीकरण समस्या में अपनी समस्या बनाएं।

यह मिलती-जुलती समस्या है: Link

अधिक जानकारी के लिए देखें: StackExchange

0

मुझे यकीन है कि नहीं कर रहा हूँ तुम्हारी समस्या क्या है, लेकिन अपने मॉडल मेरे लिए थोड़ा अजीब लग रहा है।

यह आपके मॉडल है:

lrelu = LeakyReLU(alpha = 0.1) 
model = Sequential() 
model.add(Dense(126, input_dim=15)) #Dense(output_dim(also hidden wight), input_dim = input_dim) 
model.add(lrelu) #Activation 

model.add(Dense(252)) 
model.add(lrelu) 
model.add(Dense(1)) 
model.add(Activation('linear')) 

और अपने मॉडल के दृश्य के रूप में नीचे दिखाया गया है:

enter image description here

दो परतों जो अपने मॉडल के उत्पादन परत हो सकता है कर रहे हैं, और आपने यह तय नहीं किया कि आपकी वास्तविक आउटपुट परत कौन सा है। मुझे लगता है कि यही कारण है कि आप सही भविष्यवाणी नहीं कर सकते हैं।

आप इस तरह अपने मॉडल को लागू करना चाहते हैं,

enter image description here

आप स्वतंत्र रूप से अपने सक्रियण परत जोड़ने चाहिए, एक ही एक का उपयोग करने के बजाय।

उदाहरण के लिए,

model = Sequential() 
model.add(Dense(126, input_dim=15)) #Dense(output_dim(also hidden wight), input_dim = input_dim) 
model.add(LeakyReLU(alpha = 0.1)) #Activation 

model.add(Dense(252)) 
model.add(LeakyReLU(alpha = 0.1)) 
model.add(Dense(1)) 
model.add(Activation('linear')) 
+0

अपने जवाब के लिए धन्यवाद, लेकिन यह अभी भी एसीसी दिखाने: 0.0000e +00। – soartseng

संबंधित मुद्दे