Home > front end >  Making predictions and determine class on binary tensorflow model
Making predictions and determine class on binary tensorflow model

Time:01-22

I have implemented the following version of my ResNet50. I trained my model with my own data in another notebook so I just load the weights and compile the model. Now, I just want to make predictions on my new unseen data.

def resnet50F(im_size):

    resnet = ResNet50(input_shape=(im_size, im_size, 3), weights='imagenet', include_top = False)
    headModel = AvgPool2D(pool_size=(3,3))(resnet.output)
    headModel = Flatten(name='flatten')(headModel)
    headModel = Dense(256, activation='relu')(headModel)
    headModel = Dropout(0.5)(headModel)
    headModel = Dense(1, activation='sigmoid')(headModel)

    model = Model(inputs=resnet.input, outputs=headModel)

    model.trainable = True

    return model


resnet50 = resnet50F(im_size=224)
resnet50.load_weights(PATH_MODEL_WEIGHTS)
opt = optimizers.Adam(learning_rate=1e-6)
resnet50.compile(loss='binary_crossentropy', optimizer=opt, metrics=METRICS)
predictions = resnet50.predict(X)

However, when I print predictions I get the following output:

 [[4.22752373e-06]
 [2.81104029e-10]
 [3.21204737e-02]
 [5.09007333e-12]
 [6.25871266e-08]
 [3.95518853e-08]
 [3.76289577e-09]
 [1.04685043e-07]
 [4.40788448e-01]
 [4.18029167e-09]
 [1.68976447e-04]
 [4.83552366e-03]
 [5.67837298e-01]
 [1.92822833e-02]
 [1.86168763e-04]
 [3.30054699e-11]
 [1.55285016e-01]
 [1.40850764e-12]
 [4.75460291e-02]
 [2.36899691e-08]
 [1.91837142e-04]
 [2.70789745e-03]
 [2.28864295e-07]
 [1.04725331e-08]
 [3.17185315e-15]
 [1.86515141e-08]
 [9.09119472e-03]
 [2.67773657e-06]
 [6.43107248e-03]
 [1.06139310e-14]
 [3.12786847e-01]
 [1.47488710e-04]
 [7.75789477e-09]
 [2.05256441e-03]
 [5.19017190e-11]
 [6.54808059e-02]
 [9.27565736e-04]
 [6.90304815e-26]
 [8.59875661e-14]
 [2.54806340e-01]
 [1.05227390e-02]
 [4.43476923e-02]
 [3.65121141e-02]
 [4.71908916e-13]
 [1.16901109e-02]
 [2.83952375e-07]
 [6.87847793e-01]
 [6.25556211e-08]
 [2.92979064e-03]
 [1.00091375e-08]
 [7.29291560e-06]
 [7.43216195e-16]
 [1.16142066e-04]
 [6.63836045e-06]
 [4.89238771e-12]
 [3.75503966e-08]
 [7.99435584e-05]
 [5.35736717e-06]
 [2.15524092e-11]
 [1.89218114e-14]
 [4.04082388e-02]
 [1.11348586e-09]
 [1.72054302e-03]
 [2.21202258e-11]
 [2.13359108e-08]
 [2.09557402e-05]
 [1.01457292e-04]
 [9.81324539e-03]
 [9.62927871e-08]
 [4.38750768e-03]
 [7.26699904e-02]
 [6.57562000e-16]
 [4.28197110e-13]]

As I understand it, it's supposed to represent the probability of my model to belong to class 1. So there's either only one sample predicted as class 1 (5.67837298e-01) or I am missing something in my methodology.

CodePudding user response:

First question is what is X? I assume X is an np array of images and each image is itself an np array. Now you have to make sure that what ever processing you did on the training images you do the same processing on the X images. For example if you trained on rgb images, the images in X must be rgb images. If you resized the training images you must resize the X images to the same size. If you scaled the pixel values for the training images you must rescale the pixels for the X images. try this code once you have insured of the above

preds=model.predict(X)
for p in preds:
    if P>=.5:
        klass=1
    else:
        klass=0
    print(klass)

CodePudding user response:

Just print the decode_predictions

from keras.applications.resnet50 import  decode_predictions

print('Predicted:', decode_predictions(predictions,top=5 )[0])

To show the class

class = np.argmax(predictions )

This is a full example Real Time Prediction using ResNet Mode

  •  Tags:  
  • Related