我正在尝试将灰度图像数据集(fashion-mnist)加载到 MobileNet 模型以预测手写数字,但根据本教程,只能将 RGB 图像加载到模型中。当我尝试提供时尚 mnist 样品时,它给了我以下错误
检查输入时出错:预期 keras_layer_13_input 的形状为 (224, 224, 3) 但数组的形状为 (224, 224, 1)
如何解决这个问题呢 ?
我正在尝试将灰度图像数据集(fashion-mnist)加载到 MobileNet 模型以预测手写数字,但根据本教程,只能将 RGB 图像加载到模型中。当我尝试提供时尚 mnist 样品时,它给了我以下错误
检查输入时出错:预期 keras_layer_13_input 的形状为 (224, 224, 3) 但数组的形状为 (224, 224, 1)
如何解决这个问题呢 ?
可能预训练的 MobileNet 不适合这项任务。你有两个不同的问题。Mobilenet 是为 Imagenet 图像制作的,它是具有 3 个颜色通道的 224x224 图像,而 MNIST 数据集是具有一个颜色通道的 28x28 图像。您可以在 RGB 中重复颜色通道:
# data.shape [70000, 224, 224, 1] -> [70000, 224, 224, 3]
data = np.repeat(data, 3, -1)
但在此之前,您需要调整图像大小。例如,您可以PIL
用于调整图像大小:
from PIL import Image
data = np.array([Image.fromarray(x).resize([224,224]) for x in data])
这里有一些小细节你应该自己弄清楚。例如,dtype
如果您从数据集中加载为 numpy 的图像。您可能需要使用 将 numpy 类型转换为整数np.uint8()
。
Mobilenet v2 需要 RGB。您也许还可以使用 PIL 中的转换功能。
尝试这个:
from PIL import Image
x= Image.open(input_image).resize((96,96)).convert("RGB")
文档在这里:https ://pillow.readthedocs.io/en/stable/reference/Image.html
试试这个,x = np.stack((x,)*3, axis=-1)
。有关详细信息,请参阅此链接:https ://github.com/malnakli/ML/blob/master/tf_serving_keras_mobilenetv2/main.ipynb