I train a Neural Network of Regression Problem in Keras. Why the output is only one Dimension, the accuracy in each Epoch always show acc: 0.0000e+00?
1000/199873 [..............................] - ETA: 5s - loss: 0.0057 - acc: 0.0000e+00
2000/199873 [..............................] - ETA: 4s - loss: 0.0058 - acc: 0.0000e+00
3000/199873 [..............................] - ETA: 3s - loss: 0.0057 - acc: 0.0000e+00
4000/199873 [..............................] - ETA: 3s - loss: 0.0060 - acc: 0.0000e+00 ...
198000/199873 [============================>.] - ETA: 0s - loss: 0.0055 - acc: 0.0000e+00
199000/199873 [============================>.] - ETA: 0s - loss: 0.0055 - acc: 0.0000e+00
199873/199873 [==============================] - 4s - loss: 0.0055 - acc: 0.0000e+00 - val_loss: 0.0180 - val_acc: 0.0000e+00
But if the output are two Dimension or above, no problem for accuracy.
My model as below:`
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]]
Accuracy calculates the percentage of predicted values (yPred) that match with actual values (yTrue). For a record, if the predicted value is equal to the actual value, it is considered accurate. We then calculate Accuracy by dividing the number of accurately predicted records by the total number of records.
metrics. Accuracy(name="accuracy", dtype=None) Calculates how often predictions equal labels. This metric creates two local variables, total and count that are used to compute the frequency with which y_pred matches y_true .
The problem is that your final model output has a linear activation, making the model a regression, not a classification problem. "Accuracy" is defined when the model classifies data correctly according to class, but "accuracy" is effectively not defined for a regression problem, due to its continuous property.
Either get rid of accuracy as a metric and switch over to fully regression, or make your problem into a classification problem, using loss='categorical_crossentropy'
and activation='softmax'
.
This is a similar problem to yours: Link
For more information see: StackExchange
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With