在二进制张量流模型上进行预测并确定类别

Jea*_*rot 5 python prediction tensorflow

我已经实现了以下版本的 ResNet50。我在另一个笔记本中使用自己的数据训练了模型,因此我只需加载权重并编译模型即可。现在,我只想对我未见过的新数据进行预测。

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)
Run Code Online (Sandbox Code Playgroud)

但是,当我打印时predictions,我得到以下输出:

 [[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]]

Run Code Online (Sandbox Code Playgroud)

据我了解,它应该代表我的模型属于 1 类的概率。因此,要么只有一个样本被预测为 1 类 (5.67837298e-01),要么我在方法中遗漏了一些内容。

Ger*_*y P 0

第一个问题是X是什么?我假设 X 是一个 np 图像数组,每个图像本身就是一个 np 数组。现在,您必须确保对训练图像进行的任何处理都对 X 图像进行相同的处理。例如,如果您在 rgb 图像上进行训练,则 X 中的图像必须是 rgb 图像。如果调整训练图像的大小,则必须将 X 图像调整为相同大小。如果缩放了训练图像的像素值,则必须重新缩放 X 图像的像素。一旦您确定了上述内容,请尝试使用此代码

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