从tensorflow加载我的模型,但不工作

g2ieeal7  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(110)

我正在尝试从this website修改和调用我自己的模型。
但我的问题是。

def prepare(filepath):
    IMG_SIZE = 70  # 50 in txt-based
    img_array = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)  # read in the image, convert to grayscale
    new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))  # resize image to match model's expected sizing
    return new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 1)  # return the image with shaping that TF wants.

1.我的模型输入是(180x180x3),由于索引超出范围,我无法将其更改为灰度。
1.由于我知道通道为3,因此我想将数组更改为new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 3),但当它预测

print(prediction[0][0])

它不是数字0或1,所以我不能预测我的图像。
请帮助我弄清楚发生了什么事,无论是问题1还是问题2。
我很感激你的帮助。
我预计只有1或0,因此我可以将标签分类为“通过”或“未通过”

toiithl6

toiithl61#

在prepare函数中,图像被读入为灰度,然后调整大小为(IMG_SIZE,IMG_SIZE)。如果您的模型需要3个通道(RGB),但图像被转换为灰度(1个通道),则模型将无法正确处理图像,您将无法获得预期的输出。
要解决此问题,可以更改以下行:

img_array = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)  # read in the image, convert to grayscale

致:

img_array = cv2.imread(filepath)  # read in the image

这将读取具有3个通道(RGB)的图像。
关于第二个问题,如果预测不是0或1,则模型很可能没有输出二元分类。您可以尝试检查模型的输出,以查看它预测的内容。为此,可以在应用argmax运算之前打印出模型的输出。
如果模型未输出二元分类,则可能需要修改模型或使用专为二元分类设计的其他模型。

相关问题