我已经编写了简单的数字识别模型,该模型中装有来自MNIST的图像,我想使用该模型来预测自己的数字,但是遇到了归一化问题。
我使用了来自MNIST的图像进行标准化:
x_train = keras.utils.normalize(x_train, axis=1)
x_test = keras.utils.normalize(x_test, axis=1) # shape = (60000, 28, 28)
但是当我尝试对自己的图像执行相同操作时:
my_digit = cv2.imread("three.jpg") # shape = (28, 28, 3)
my_digit = cv2.cvtColor(my_digit, cv2.COLOR_RGB2GRAY) # shape = (28, 28)
my_digits = np.array([my_digit]) # shape = (1, 28, 28)
my_digits = keras.utils.normalize(my_digits, axis=1)
使用keras图像规范化后变得有点脏: image with keras' normalization
当我删除时:
my_digits = keras.utils.normalize(my_digits, axis=1)
然后图像很好image without keras' normalization
我发现的“解决方案”是将每个元素都除以255,就像这样:
my_digit = np.divide(my_digit, 255)
然后图像看起来很好-像归一化之前一样
编辑: 在规范化x_train(MNIST数据集)之前,其dtype为uint8,在规范化之后,其dtype为float64。对于我的图像-在规范化(utils.keras)之前,其dtype是uint8,在规范化之后,其dtype是float64。当我通过将每个项目除以255来归一化我的数字时也是如此-我的意思是在uint8之前和float64之后。
我想知道为什么我要手动规范我自己的图像(keras.utils.normalization之后的MNIST图像看起来和规范化之前一样好),然后它们看起来还可以,但是当我使用keras.utils.normalization时,我就得到了一些“污染”