python - 图像在 Keras 中没有标准化
问题描述
我正在关注 2017 年关于 Python 深度学习的教程,我正在尝试对来自著名的 MNIST 数据集的一些图像进行标准化。作者对下面的一段代码有以下说法(决定将其全部包含在内,因此任何可能想要帮助的人都可以简单地复制/粘贴并重现该问题)。
还可以对整个数据集的像素值进行标准化。这称为特征标准化,反映了通常对表格数据集中的每一列执行的标准化类型。这与上一节中描述的样本标准化不同,因为像素值在所有样本(数据集中的所有图像)中都是标准化的。在这种情况下,每个图像都被视为一个特征。您可以通过在 ImageDataGenerator 类上设置特征中心和特征标准标准化参数来执行特征标准化。
这是代码:
from keras.datasets import mnist
from keras.preprocessing.image import ImageDataGenerator
from matplotlib import pyplot as plt
from keras import backend as K
K.set_image_dim_ordering('th')
#Load data
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# Reshape to be [samples][pixels][width][height]
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28).astype('float32')
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28).astype('float32')
datagen = ImageDataGenerator(featurewise_center=True, featurewise_std_normalization=True) #This standardizes pixel values across the entire dataset.
# Fit parameters from data
datagen.fit(X_train)
#Configure batch size and retrieve one batch of images
for X_batch, y_batch in datagen.flow(X_train, y_train, batch_size=9, shuffle=False):
#Create grid of 3x3 images
for i in range(0,9):
plt.subplot(330 + 1 + i)
plt.imshow(X_batch[i].reshape(28,28), cmap=plt.get_cmap('gray'))
plt.show()
break
我认为自 2017 年以来 Keras 发生了一些变化,尤其是在 ImageDataGenerator 类或该类的流函数中,所以我现在必须以不同的方式来做这件事。问题是:我找不到如何。任何帮助,将不胜感激
解决方案
ImageDataGenerator
在 Keras 中,对代码示例中的所有图像执行规范化。X_batch
您可以使用以下代码检查实际值:
for X_batch, y_batch in datagen.flow(X_train, y_train, batch_size=9, shuffle=False):
print(X_batch[0])
break
问题与 的行为有关imshow
,默认情况下使用颜色归一化。因此,imshow
将标准化图像可视化为非标准化。
推荐阅读
- excel - InsertBefore方法:对象不支持此方法或excel vba中的属性错误
- c++ - DesktopDuplication API 在某些应用程序处于全屏模式时产生黑框
- java - 如何在 Firestore 中查询 DocumentRefrence?
- bash - 如何使用 script.sh 中的钻壳传递和执行 sql 查询语句?
- unity3d - 更新后的统一错误
- java - 为什么在此警报设置中调用了两次 onReceive()?
- javascript - 将 AngularJS 转换为 Angular 6
- python - 在 python 中并行执行 asyncio 函数
- javascript - 部分视图无法识别 js 类中的函数
- c# - 用于提取数字和非数字字符串的正则表达式替代方法