keras - 如何在 ImageDataGenerator 中使用 featurewise_center=True 和 flow_from_directory?
问题描述
我设置featurewise_center = True
然后使用flow_from_directory
在 keras 中设置我的训练和验证数据。但是,我得到了错误
UserWarning: This ImageDataGenerator specifies `featurewise_center`,
but it hasn't been fit on any training data. Fit it first by calling `.fit(n
numpy_data)`
有什么方法我可以使用flow_from_directory
然后根据需要拟合数据吗?
解决方案
featurewise_center
将图像转换为 0 均值。这是通过使用公式完成的
X = X - 均值 (X)
但是为了ImageDataGenerator
进行这种转换,它需要知道数据集和fit
方法的平均值,而ImageDataGenerator
这正是计算这些统计数据的操作。
正如keras 文档所解释的那样
使数据生成器适合一些样本数据。这会根据一组样本数据计算与数据相关的转换相关的内部数据统计信息。
如果数据集可以完全加载到内存中,我们可以通过将所有图像加载到一个 numpy 数组中并在其fit
上运行来做到这一点。
示例代码(256x256 的 RGB 图像):
from keras.layers import Input, Dense, Flatten, Conv2D
from keras.models import Sequential
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
from pathlib import Path
from PIL import Image
height = width = 256
def read_pil_image(img_path, height, width):
with open(img_path, 'rb') as f:
return np.array(Image.open(f).convert('RGB').resize((width, height)))
def load_all_images(dataset_path, height, width, img_ext='png'):
return np.array([read_pil_image(str(p), height, width) for p in
Path(dataset_path).rglob("*."+img_ext)])
train_datagen = ImageDataGenerator(featurewise_center=True)
train_datagen.fit(load_all_images('./images/', height, width))
train_generator = train_datagen.flow_from_directory(
'./images/',
target_size=(height, width),
batch_size=32,
class_mode='binary',
color_mode='rgb')
model = Sequential()
model.add(Conv2D(1,(3,3), input_shape=(height,width,3)))
model.add(Flatten())
model.add(Dense(1))
model.compile('adam', 'binary_crossentropy')
model.fit_generator(train_generator)
但是如果数据不能完全加载到内存中怎么办?一种方法是从数据集中随机采样图像。
通常,我们mean
仅使用训练数据进行均值归一化,并对归一化验证/测试数据使用相同的均值。通过datagenerator
.
推荐阅读
- swift - 一个集合不相等,但是这个集合中的一个数组是相等的?
- mysql - 我不知道如何使用 angular7 删除值
- ruby-on-rails - 从 Rails 视图中删除逻辑
- python - 在 matplotlib 中的 x 轴和 y 轴位置上绘制值时面临问题
- macos - 防止 IntelliJ IDEA 生成报告分配失败 - JavaScript 堆内存不足
- angular - 以 ng-content 作为正文重复 ng-template(创建 ng-content 的副本)
- java - 如何在java中的JTextField中接受输入后添加异常处理
- apache-kafka - Spring Kafka中的Exactly-once语义
- ftp - 从具有服务器限制的纯 ftp 服务器下载所有文件
- uml - 如何在活动图中为循环使用扩展区域?