目录
1. 序列预处理
来源
填充序列pad_sequences
keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32',
padding='pre', truncating='pre', value=0.)
将长为nb_samples的序列(标量序列)转化为形如(nb_samples,nb_timesteps)2D numpy array。如果提供了参数maxlen,nb_timesteps=maxlen,否则其值为最长序列的长度。其他短于该长度的序列都会在后部填充0以达到该长度。长于nb_timesteps的序列将会被截断,以使其匹配目标长度。padding和截断发生的位置分别取决于padding和truncating.
返回形如(nb_samples,nb_timesteps)的2D张量
跳字skipgrams
获取采样表make_sampling_table
TimeseriesGenerator
用于生成批量时序数据的实用工具类。
keras.preprocessing.sequence.TimeseriesGenerator(data, targets, length, sampling_rate=1, stride=1, start_index=0, end_index=None, shuffle=False, reverse=False, batch_size=128)
这个类以一系列由相等间隔以及一些时间序列参数(例如步长、历史长度等)汇集的数据点作为输入,以生成用于训练/验证的批次数据。
pad_sequences
将多个序列截断或补齐为相同长度。
keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32', padding='pre', truncating='pre', value=0.0)
skipgrams
生成 skipgram 词对。
keras.preprocessing.sequence.skipgrams(sequence, vocabulary_size, window_size=4, negative_samples=1.0, shuffle=True, categorical=False, sampling_table=None, seed=None)
该函数将一个单词索引序列(整数列表)转化为以下形式的单词元组:
(单词, 同窗口的单词),标签为 1(正样本)。
(单词, 来自词汇表的随机单词),标签为 0(负样本)。
make_sampling_table
生成一个基于单词的概率采样表。
keras.preprocessing.sequence.make_sampling_table(size, sampling_factor=1e-05)
用来生成 skipgrams 的 sampling_table 参数。sampling_table[i] 是数据集中第 i 个最常见词的采样概率(出于平衡考虑,出现更频繁的词应该被更少地采样)。
2. 文本预处理
3. 图片预处理
ImageDataGenerator 类
通过实时数据增强生成张量图像数据批次。数据将不断循环(按批次)。
keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,
samplewise_center=False,
featurewise_std_normalization=False,
samplewise_std_normalization=False,
zca_whitening=False,
zca_epsilon=1e-06,
rotation_range=0,
width_shift_range=0.0,
height_shift_range=0.0,
brightness_range=None,
shear_range=0.0,
zoom_range=0.0,
channel_shift_range=0.0,
fill_mode='nearest',
cval=0.0,
horizontal_flip=False,
vertical_flip=False,
rescale=None,
preprocessing_function=None,
data_format=None,
validation_split=0.0,
dtype=None)
参数
- featurewise_center: 布尔值。将输入数据的均值设置为 0,逐特征进行。
- samplewise_center: 布尔值。将每个样本的均值设置为 0。
- featurewise_std_normalization: Boolean. 布尔值。将输入除以数据标准差,逐特征进行。
- samplewise_std_normalization: 布尔值。将每个输入除以其标准差。
- zca_epsilon: ZCA 白化的 epsilon 值,默认为 1e-6。
- zca_whitening: 布尔值。是否应用 ZCA 白化。
- rotation_range: 整数。随机旋转的度数范围。
- width_shift_range: 浮点数、一维数组或整数
- float: 如果 <1,则是除以总宽度的值,或者如果 >=1,则为像素值。
- 1-D 数组: 数组中的随机元素。
- int: 来自间隔 (-width_shift_range, +width_shift_range) 之间的整数个像素。
- width_shift_range=2 时,可能值是整数 [-1, 0, +1],与 width_shift_range=[-1, 0, +1] 相同;而 width_shift_range=1.0 时,可能值是 [-1.0, +1.0) 之间的浮点数。
- height_shift_range: 浮点数、一维数组或整数
- float: 如果 <1,则是除以总宽度的值,或者如果 >=1,则为像素值。
- 1-D array-like: 数组中的随机元素。
- int: 来自间隔 (-height_shift_range, +height_shift_range) 之间的整数个像素。
- height_shift_range=2 时,可能值是整数 [-1, 0, +1],与 height_shift_range=[-1, 0, +1] 相同;而 height_shift_range=1.0 时,可能值是 [-1.0, +1.0) 之间的浮点数。
- shear_range: 浮点数。剪切强度(以弧度逆时针方向剪切角度)。
- zoom_range: 浮点数 或 [lower, upper]。随机缩放范围。如果是浮点数,[lower, upper] = [1-zoom_range, 1+zoom_range]。
- channel_shift_range: 浮点数。随机通道转换的范围。
- fill_mode: {“constant”, “nearest”, “reflect” or “wrap”} 之一。默认为 ‘nearest’。输入边界以外的点根据给定的模式填充:
- ‘constant’: kkkkkkkk|abcd|kkkkkkkk (cval=k)
- ‘nearest’: aaaaaaaa|abcd|dddddddd
- ‘reflect’: abcddcba|abcd|dcbaabcd
- ‘wrap’: abcdabcd|abcd|abcdabcd
- cval: 浮点数或整数。用于边界之外的点的值,当 fill_mode = “constant” 时。
- horizontal_flip: 布尔值。随机水平翻转。
- vertical_flip: 布尔值。随机垂直翻转。
- rescale: 重缩放因子。默认为 None。如果是 None 或 0,不进行缩放,否则将数据乘以所提供的值(在应用任何其他转换之前)。
- preprocessing_function: 应用于每个输入的函数。这个函数会在任何其他改变之前运行。这个函数需要一个参数:一张图像(秩为 3 的 Numpy 张量),并且应该输出一个同尺寸的 Numpy 张量。
- data_format: 图像数据格式,{“channels_first”, “channels_last”} 之一。“channels_last” 模式表示图像输入尺寸应该为 (samples, height, width, channels),“channels_first” 模式表示输入尺寸应该为 (samples, channels, height, width)。默认为 在 Keras 配置文件 ~/.keras/keras.json 中的 image_data_format 值。如果你从未设置它,那它就是 “channels_last”。
- validation_split: 浮点数。Float. 保留用于验证的图像的比例(严格在0和1之间)。
- dtype: 生成数组使用的数据类型。
ImageDataGenerator 类方法
apply_transform
根据给定的参数将变换应用于图像。
apply_transform(x, transform_parameters)
参数
- x: 3D 张量,单张图像。
- transform_parameters: 字符串 - 参数 对表示的字典,用于描述转换。目前,使用字典中的以下参数:
‘theta’: 浮点数。旋转角度(度)。
‘tx’: 浮点数。在 x 方向上移动。
‘ty’: 浮点数。在 y 方向上移动。
shear’: 浮点数。剪切角度(度)。
‘zx’: 浮点数。放大 x 方向。
‘zy’: 浮点数。放大 y 方向。
‘flip_horizontal’: 布尔 值。水平翻转。
‘flip_vertical’: 布尔值。垂直翻转。
‘channel_shift_intencity’: 浮点数。频道转换强度。
‘brightness’: 浮点数。亮度转换强度。
返回
输入的转换后版本(相同尺寸)。
fit
将数据生成器用于某些示例数据。
fit(x, augment=False, rounds=1, seed=None)
它基于一组样本数据,计算与数据转换相关的内部数据统计。
当且仅当 featurewise_center 或 featurewise_std_normalization 或 zca_whitening 设置为 True 时才需要。
参数
- x: 样本数据。秩应该为 4。对于灰度数据,通道轴的值应该为 1;对于 RGB 数据,值应该为 3。
- augment: 布尔值(默认为 False)。是否使用随机样本扩张。
- rounds: 整数(默认为 1)。如果数据数据增强(augment=True),表明在数据上进行多少次增强。
- seed: 整数(默认 None)。随机种子。
flow
采集数据和标签数组,生成批量增强数据。
flow(x, y=None, batch_size=32, shuffle=True, sample_weight=None, seed=None, save_to_dir=None, save_prefix='', save_format='png', subset=None)
参数
- x: 输入数据。秩为 4 的 Numpy 矩阵或元组。如果是元组,第一个元素应该包含图像,第二个元素是另一个 Numpy 数组或一列 Numpy 数组,它们不经过任何修改就传递给输出。可用于将模型杂项数据与图像一起输入。对于灰度数据,图像数组的通道轴的值应该为 1,而对于 RGB 数据,其值应该为 3。
- y: 标签。
- batch_size: 整数 (默认为 32)。
- shuffle: 布尔值 (默认为 True)。
- sample_weight: 样本权重。
- seed: 整数(默认为 None)。
- save_to_dir: None 或 字符串(默认为 None)。这使您可以选择指定要保存的正在生成的增强图片的目录(用于可视化您正在执行的操作)。
- save_prefix: 字符串(默认 ‘’)。保存图片的文件名前缀(仅当 save_to_dir 设置时可用)。
- save_format: “png”, “jpeg” 之一(仅当 save_to_dir 设置时可用)。默认:“png”。
- subset: 数据子集 (“training” 或 “validation”),如果 在 ImageDataGenerator 中设置了 validation_split。
返回
一个生成元组 (x, y) 的 Iterator,其中 x 是图像数据的 Numpy 数组(在单张图像输入时),或 Numpy 数组列表(在额外多个输入时),y 是对应的标签的 Numpy 数组。如果 ‘sample_weight’ 不是 None,生成的元组形式为 (x, y, sample_weight)。如果 y 是 None, 只有 Numpy 数组 x 被返回。
flow_from_dataframe
flow_from_dataframe(dataframe, directory, x_col='filename', y_col='class', has_ext=True, target_size=(256, 256), color_mode='rgb', classes=None, class_mode='categorical', batch_size=32, shuffle=True, seed=None, save_to_dir=None, save_prefix='', save_format='png', subset=None, interpolation='nearest')
输入 dataframe 和目录的路径,并生成批量的增强/标准化的数据。
flow_from_directory
flow_from_directory(directory, target_size=(256, 256), color_mode='rgb', classes=None, class_mode='categorical', batch_size=32, shuffle=True, seed=None, save_to_dir=None, save_prefix='', save_format='png', follow_links=False, subset=None, interpolation='nearest')
返回
一个生成 (x, y) 元组的 DirectoryIterator,其中 x 是一个包含一批尺寸为 (batch_size, *target_size, channels)的图像的 Numpy 数组,y 是对应标签的 Numpy 数组。
get_random_transform
为转换生成随机参数。
get_random_transform(img_shape, seed=None)
参数
- seed: 随机种子
- img_shape: 整数元组。被转换的图像的尺寸。
返回
包含随机选择的描述变换的参数的字典。
random_transform
random_transform(x, seed=None)
将随机变换应用于图像。
参数
- x: 3D 张量,单张图像。
- seed: 随机种子。
返回
输入的随机转换版本(相同形状)。
standardize
将标准化配置应用于一批输入。
standardize(x)
参数
x: 需要标准化的一批输入。
返回
标准化后的输入。
例子
使用 .flow(x, y) 的例子:
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
y_train = np_utils.to_categorical(y_train, num_classes)
y_test = np_utils.to_categorical(y_test, num_classes)
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True)
# 计算特征归一化所需的数量
# (如果应用 ZCA 白化,将计算标准差,均值,主成分)
datagen.fit(x_train)
# 使用实时数据增益的批数据对模型进行拟合:
model.fit_generator(datagen.flow(x_train, y_train, batch_size=32),
steps_per_epoch=len(x_train) / 32, epochs=epochs)
# 这里有一个更 「手动」的例子
for e in range(epochs):
print('Epoch', e)
batches = 0
for x_batch, y_batch in datagen.flow(x_train, y_train, batch_size=32):
model.fit(x_batch, y_batch)
batches += 1
if batches >= len(x_train) / 32:
# 我们需要手动打破循环,
# 因为生成器会无限循环
break
使用 .flow_from_directory(directory) 的例子:
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
'data/validation',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
model.fit_generator(
train_generator,
steps_per_epoch=2000,
epochs=50,
validation_data=validation_generator,
validation_steps=800)
同时转换图像和蒙版 (mask) 的例子。
# 创建两个相同参数的实例
data_gen_args = dict(featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=90,
width_shift_range=0.1,
height_shift_range=0.1,
zoom_range=0.2)
image_datagen = ImageDataGenerator(**data_gen_args)
mask_datagen = ImageDataGenerator(**data_gen_args)
# 为 fit 和 flow 函数提供相同的种子和关键字参数
seed = 1
image_datagen.fit(images, augment=True, seed=seed)
mask_datagen.fit(masks, augment=True, seed=seed)
image_generator = image_datagen.flow_from_directory(
'data/images',
class_mode=None,
seed=seed)
mask_generator = mask_datagen.flow_from_directory(
'data/masks',
class_mode=None,
seed=seed)
# 将生成器组合成一个产生图像和蒙版(mask)的生成器
train_generator = zip(image_generator, mask_generator)
model.fit_generator(
train_generator,
steps_per_epoch=2000,
epochs=50)
本文详细介绍了Keras中用于序列、文本和图像预处理的工具,包括TimeseriesGenerator、pad_sequences、skipgrams、make_sampling_table以及ImageDataGenerator。重点讲解了如何对时序数据进行填充、采样,以及图像数据增强的各种参数和方法。

1267

被折叠的 条评论
为什么被折叠?



