TimeseriesGenerator
用于生成批量时序数据的实用工具类。这个类以一系列由相等间隔以及一些时间序列参数(例如步长、历史长度等)汇集的数据点作为输入,以生成用于训练/验证的批次数据。
from keras.preprocessing.sequence import TimeseriesGenerator
import numpy as np
data = np.array([[i] for i in range(50)]) # 时间步
targets = np.array([[i] for i in range(50)]) # 对应于data的时间步的目标值
data_gen = TimeseriesGenerator(data, targets,
length=10, sampling_rate=2,
batch_size=2)
assert len(data_gen) == 20
batch_0 = data_gen[0]
x, y = batch_0
assert np.array_equal(x,
np.array([[[0], [2], [4], [6], [8]],
[[1], [3], [5], [7], [9]]]))
assert np.array_equal(y,
np.array([[10], [11]]))
pad_sequences
num_samples
的序列(整数列表)转化为一个 2D Numpy 矩阵,其尺寸为 (num_samples, num_timesteps)
。 num_timesteps
要么是给定的 maxlen
参数,要么是最长序列的长度。num_timesteps
短的序列将在末端以 value
值补齐。向前补齐为默认操作。num_timesteps
长的序列将会被截断以满足所需要的长度。补齐或截断发生的位置分别由参数 pading
和 truncating
决定。skipgrams
make_sampling_table
生成一个基于单词的概率采样表。用来生成 skipgrams
的 sampling_table
参数。sampling_table[i]
是数据集中第 i 个最常见词的采样概率(出于平衡考虑,出现更频繁的词应该被更少地采样)。
采样概率根据 word2vec 中使用的采样分布生成:
p(word) = (min(1, sqrt(word_frequency / sampling_factor) /
(word_frequency / sampling_factor)))
# 我们假设单词频率遵循 Zipf 定律(s=1),来导出 frequency(rank) 的数值近似:
frequency(rank) ~ 1/(rank * (log(rank) + gamma) + 1/2 - 1/(12*rank))
# 其中 gamma 为 Euler-Mascheroni 常量。
‘
字符)。 这些序列然后被分割成标记列表。然后它们将被索引或向量化。0
不会被分配给任何单词的保留索引。ImageDataGenerator 类:通过实时数据增强生成张量图像数据批次。数据将不断循环(按批次)。
使用 .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_train的每个元素进行one-hot编码
y_test = np_utils.to_categorical(y_test, num_classes)
datagen = ImageDataGenerator(
featurewise_center=True, # 将输入数据的均值设置为 0,逐特征进行(像素矩阵?)
featurewise_std_normalization=True, # 将输入除以数据标准差,逐特征进行。
rotation_range=20, # 整数。随机旋转的度数范围。(图片旋转?)
width_shift_range=0.2, # 浮点数、一维数组或整数 (width伸缩?)
height_shift_range=0.2, # 浮点数、一维数组或整数 (height伸缩?)
horizontal_flip=True) # 布尔值。将图片执行随机水平翻转。
# 计算特征归一化所需的数量
# (如果应用 ZCA 白化,将计算标准差,均值,主成分)# ZCA 白化 ? 协方差矩阵?用再查!
datagen.fit(x_train) # 做了上述ImageDataGenerator中涉及的图像增强
# 使用实时数据增益的批数据对模型进行拟合:
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)
featurewise_center
或 featurewise_std_normalization
或 zca_whitening
设置为 True 时才需要。原文:https://www.cnblogs.com/LS1314/p/10380618.html