'model.predict_classes is deprecated - What to use instead?

I have been trying to revisit my python code for prediction on neural network and i realized after running the code that model.predict_classes is deprecated since 1st Jan 2021.

Kindly can you support me to know what i can use instead for my code ?

The code line is:

y_pred_nn = model.predict_classes(X_test)

The issue:

NameError
Traceback (most recent call last)
<ipython-input-11-fc1ddbecb622> in <module>
----> 1 print(y_pred_nn)

NameError: name 'y_pred_nn' is not defined


Solution 1:[1]

The best explanation of how to handle this is given at:

https://androidkt.com/get-class-labels-from-predict-method-in-keras/

First use model.predict() to extract the class probabilities. Then depending on the number of classes do the following:

Binary Classification

Use a threshold to select the probabilities that will determine class 0 or 1

np.where(y_pred > threshold, 1,0)

For example use a threshold of 0.5

Mutli-class Classification

Select the class with the highest probability

np.argmax(predictions, axis=1)

Multi-label Classification

Where you can have multiple output classes per example, use a threshold to select which labels apply.

y_pred = model.predict(x, axis=1)
[i for i,prob in enumerate(y_pred) if prob > 0.5]

Solution 2:[2]

If your model performs multi-class classification (e.g. if it uses a softmax last-layer activation) use: np.argmax(model.predict(x), axis=-1)

If your model performs binary classification (e.g. if it uses a sigmoid last-layer activation) use:

(model.predict(X_test) > 0.5).astype("int32")

Solution 3:[3]

model.predict_classes is deprecated, as mentioned by @Kaveh, use model.predict() function instead.

np.argmax(model.predict(x_test), axis=-1)

To know more about model.predict() check this link.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 DRozen
Solution 3