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)
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=" ")
2.3. 分词器Tokenizer
Tokenizer是一个用于向量化文本,或将文本转换为序列(即单词在字典中的下标构成的列表,从1算起)的类。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=" ")
keras.preprocessing.text.one_hot(text, n, filters=base_filter(), lower=True, split=" ")
- n:整数,字典长度
2.3. 分词器Tokenizer
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 array3. 图片预处理
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())
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"
本文详细介绍了Keras中的预处理技术,包括序列预处理的pad_sequences和skipgrams,文本预处理的句子分割、one-hot编码及分词器,以及图像预处理的ImageDataGenerator及其方法。这些预处理技术对于数据清洗和模型训练至关重要。

1078

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



