Keras读书笔记----预处理

本文详细介绍了Keras中的预处理技术,包括序列预处理的pad_sequences和skipgrams,文本预处理的句子分割、one-hot编码及分词器,以及图像预处理的ImageDataGenerator及其方法。这些预处理技术对于数据清洗和模型训练至关重要。

1. 序列预处理

1.1. 填充序列pad_sequences

将长为 nb_samples 的序列(标量序列)转化为形如 (nb_samples,nb_timesteps) 2D numpy array。如果提供了参数 maxlen , nb_timesteps=maxlen ,否则其值为最长序列的长度。其他短于该长度的序列都会在后部填充0以达到该长度。
keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32')
  • sequences:浮点数或整数构成的两层嵌套列表
  • maxlen: None或整数,为序列的最大长度。大于此长度的序列将被截短,小于此长度的序列将在后部填0.
  • dtype:返回的numpy array的数据类型
  • padding: ‘pre’或‘post’,确定当需要补0时,在序列的起始还是结尾补
  • truncating: ‘pre’或‘post’,确定当需要截断序列时,从起始还是结尾截断
  • value:浮点数,此值将在填充时代替默认的填充值0

1.2. 跳字skipgrams

skipgrams将一个词向量下标的序列转化为下面的一对tuple:
对于正样本,转化为( word, word in the same window)

对于负样本,转化为( word, random word from the vocabulary)

keras.preprocessing.sequence.skipgrams(sequence, vocabulary_size, window_size=4, negative_samples=1., shuffle=True, categorical=False, sampling_table=None)

  • sequence:下标的列表,如果使用sampling_tabel,则某个词的下标应该为它在数据库中的顺序。(从1开始)
  • vocabulary_size:整数,字典大小
  • window_size:整数,正样本对之间的最大距离
  • negative_samples:大于0的浮点数,等于0代表没有负样本,等于1代表负样本与正样本数目相同,以此类推(即负样本的数目是正样本的 negative_samples 倍)
  • shuffle:布尔值,确定是否随机打乱样本
  • categorical:布尔值,确定是否要使得返回的标签具有确定类别
  • sampling_table:形如 (vocabulary_size,) 的numpy array,其中 sampling_table[i] 代表没有负样本或随机负样本。等于1为与正样本的数目相同 采样到该下标为i的单词的概率(假定该单词是数据库中第i常见的单词)

函数的输出是一个 (couples,labels) 的元组,其中:
couples 是一个长为2的整数列表: [word_index,other_word_index]
labels 是一个仅由0和1构成的列表, 1代表 other_word_index 在 word_index 的窗口, 0代表 other_word_index 是词典里的随机单词。

如果设置 categorical 为 True ,则标签将以one-hot的方式给出,即1变为[0,1], 0变为[1,0]

1.3. 获取采样表make_sampling_table

该函数用以产生 skipgrams 中所需要的参数 sampling_table 。这是一个长为 size 的向量, sampling_table[i] 代表采样到数据集中第i常见的词的概率(为平衡期起见,对于越经常出现的词,要以越低的概率采到它)
keras.preprocessing.sequence.make_sampling_table(size, sampling_factor=1e-5)
  • size:词典的大小
  • sampling_factor:此值越低,则代表采样时更缓慢的概率衰减(即常用的词会被以更低的概率被采到),如果设置为1,则代表不进行下采样,即所有样本被采样到的概率都是1。

2. 文本预处理

2.1. 句子分割text_to_word_sequence

本函数将一个句子拆分成单词构成的列表
keras.preprocessing.text.text_to_word_sequence(text, filters=base_filter(), lower=True, split=" ")
  • text:字符串,待处理的文本
  • filters:需要滤除的字符的列表或连接形成的字符串,例如标点符号。默认值为 base_filter() ,包含标点符号,制表符和换行符等
  • lower:布尔值,是否将序列设为小写形式
  • split:字符串,单词的分隔符,如空格
返回值:字符串列表

2.2. one-hot编码

本函数将一段文本编码为one-hot形式的码,即仅记录词在词典中的下标。
keras.preprocessing.text.one_hot(text, n, filters=base_filter(), lower=True, split=" ")
  • n:整数,字典长度
返回值:整数列表,每个整数是[1,n]之间的值,代表一个单词(不保证唯一性,即如果词典长度不够,不同的单词可能会被编为同一个码)。

2.3. 分词器Tokenizer

Tokenizer是一个用于向量化文本,或将文本转换为序列(即单词在字典中的下标构成的列表,从1算起)的类。
keras.preprocessing.text.Tokenizer(nb_words=None, filters=base_filter(), lower=True, split=" ")
  • nb_words: None或整数,处理的最大单词数量。若被设置为整数,则分词器将被限制为处理数据集中最常见的 nb_words 个单词

2.4. 类方法

2.4.1. fit_on_texts(texts)

texts:要用以训练的文本列表

2.4.2. texts_to_sequences(texts)

texts:待转为序列的文本列表
返回值:序列的列表,列表中每个序列对应于一段输入文本

2.4.3. texts_to_sequences_generator(texts)

本函数是 texts_to_sequences 的生成器函数版
texts:待转为序列的文本列表
返回值:每次调用返回对应于一段输入文本的序列

2.4.4. texts_to_matrix(texts, mode):

texts:待向量化的文本列表
mode: ‘binary’, ‘count’, ‘tfidf’, ‘freq’之一,默认为‘binary’
返回值:形如 (len(texts), nb_words) 的numpy array

2.4.5. fit_on_sequences(sequences):

sequences:要用以训练的序列列表

2.4.6. sequences_to_matrix(sequences):

返回值:形如 (len(sequences), nb_words) 的numpy array

3. 图片预处理

3.1. 图片生成器ImageDataGenerator

用以生成一个batch的图像数据,支持实时数据提升。训练时该函数会无限生成数据,直到达到规定的epoch次数为止。
keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,
samplewise_center=False,
featurewise_std_normalization=False,
samplewise_std_normalization=False,
zca_whitening=False,
rotation_range=0.,
width_shift_range=0.,
height_shift_range=0.,
shear_range=0.,
zoom_range=0.,
channel_shift_range=0.,
fill_mode='nearest',
cval=0.,
horizontal_flip=False,
vertical_flip=False,
rescale=None,
dim_ordering=K.image_dim_ordering())
  • featurewise_center:布尔值,使输入数据集去中心化(均值为0)
  • samplewise_center:布尔值,使输入数据的每个样本均值为0
  • featurewise_std_normalization:布尔值,将输入除以数据集的标准差以完成标准化
  • samplewise_std_normalization:布尔值,将输入的每个样本除以其自身的标准差
  • zca_whitening:布尔值,对输入数据施加ZCA白化
  • rotation_range:整数,数据提升时图片随机转动的角度
  • width_shift_range:浮点数,图片宽度的某个比例,数据提升时图片水平偏移的幅度
  • height_shift_range:浮点数,图片高度的某个比例,数据提升时图片竖直偏移的幅度
  • shear_range:浮点数,剪切强度(逆时针方向的剪切变换角度)
  • zoom_range:浮点数或形如 [lower,upper] 的列表,随机缩放的幅度,若为浮点数,则相当于 [lower,upper] = [1 - zoom_range, 1+zoom_range]
  • channel_shift_range:浮点数,随机通道偏移的幅度
  • fill_mode:; ‘constant’, ‘nearest’, ‘reflect’或‘wrap’之一,当进行变换时超出边界的点将根据本参数给定的方法进行处理
  • cval:浮点数或整数,当 fill_mode=constant 时,指定要向超出边界的点填充的值
  • horizontal_flip:布尔值,进行随机水平翻转
  • vertical_flip:布尔值,进行随机竖直翻转
  • rescale: 重放缩因子,默认为None. 如果为None或0则不进行放缩,否则会将该数值乘到数据上(在应用其他变换之前)
  • dim_ordering: ‘tf’和‘th’之一,规定数据的维度顺序。 ‘tf’模式下数据的形状为 samples, width, height, channels , ‘th’下形状为 (samples, channels, width, height). 

3.2. 方法

3.2.1. fit(X, augment=False, rounds=1)

计算依赖于数据的变换所需要的统计信息(均值方差等),只有使用 featurewise_center , featurewise_std_normalization 或 zca_whitening 时需要此函数。
  • X: numpy array,样本数据
  • augment:布尔值,确定是否使用随即提升过的数据
  • round:若设 augment=True ,确定要在数据上进行多少轮数据提升,默认值为1
  • seed: 整数,随机数种子

3.2.2. flow(self, X, y, batch_size=32, shuffle=True, seed=None, save_to_dir=None, save_prefix='', save_format='jpeg')

接收numpy数组和标签为参数,生成经过数据提升或标准化后的batch数据,并在一个无限循环中不断的返回batch数据
  • X:数据
  • y:标签
  • batch_size:整数,默认32
  • shuffle:布尔值,是否随机打乱数据,默认为True
  • save_to_dir: None或字符串,该参数能让你将提升后的图片保存起来,用以可视化
  • save_prefix:字符串,保存提升后图片时使用的前缀, 仅当设置了 save_to_dir 时生效
  • save_format: "png"或"jpeg"之一,指定保存图片的数据格式,默认"jpeg"
  • _yields:形如(x,y)的tuple,x是代表图像数据的numpy数组.y是代表标签的numpy数组.该迭代器无限循环.
  • seed: 整数,随机数种子

3.2.3. flow_from_directory(directory)

以文件夹路径为参数,生成经过数据提升/归一化后的数据,在一个无限循环中无限产生batch数据
  • directory: 目标文件夹路径,对于每一个类,该文件夹都要包含一个子文件夹.子文件夹应只包含JPG或PNG格式的图片.
  • target_size: 整数tuple,默认为(256, 256). 图像将被resize成该尺寸
  • color_mode: 颜色模式,为"grayscale","rgb"之一,默认为"rgb".代表这些图片是否会被转换为单通道或三通道的图片.
  • classes: 可选参数,为子文件夹的列表,如['dogs','cats']默认为None. 若未提供,则该类别列表将自动推断(类别的顺序将按照字母表顺序映射到标签值)
  • class_mode: "categorical", "binary", "sparse"或None之一. 默认为"categorical. 该参数决定了返回的标签数组的形式, "categorical"会返回2D的one-hot编码标签,"binary"返回1D的二值标签."sparse"返回1D的整数标签,如果为None则不返回任何标签, 生成器将仅仅生成batch数据, 这种情况在使用 model.predict_generator() 和 model.evaluate_generator() 等函数时会用到.
  • batch_size: batch数据的大小,默认32
  • shuffle: 是否打乱数据,默认为True
  • seed: 可选参数,打乱数据和进行变换时的随机数种子
  • save_to_dir: None或字符串,该参数能让你将提升后的图片保存起来,用以可视化
  • save_prefix:字符串,保存提升后图片时使用的前缀, 仅当设置了 save_to_dir 时生效
  • save_format: "png"或"jpeg"之一,指定保存图片的数据格式,默认"jpeg"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值