• keras_5_数据预处理


    1. 序列预处理

    1. 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]]))
        
    2. pad_sequences

      • 将多个序列截断或补齐为相同长度。该函数将一个 num_samples 的序列(整数列表)转化为一个 2D Numpy 矩阵,其尺寸为 (num_samples, num_timesteps)num_timesteps 要么是给定的 maxlen 参数,要么是最长序列的长度。
      • num_timesteps 短的序列将在末端value补齐。向前补齐为默认操作。
      • num_timesteps 长的序列将会被截断以满足所需要的长度。补齐或截断发生的位置分别由参数 padingtruncating 决定。
    3. skipgrams

      • 生成 skipgram 词对。该函数将一个单词索引序列(整数列表)转化为以下形式的单词元组
        • (单词, 同窗口的单词),标签为 1(正样本)。
        • (单词, 来自词汇表的随机单词),标签为 0(负样本)。
    4. make_sampling_table

      • 生成一个基于单词的概率采样表。用来生成 skipgramssampling_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 常量。
        

    2. 文本预处理

    1. Tokenizer
      • 文本标记实用类。该类允许使用两种方法向量化一个文本语料库: 将每个文本转化为一个整数序列(每个整数都是词典中标记的索引); 或者将其转化为一个向量,其中每个标记的系数可以是二进制值、词频、TF-IDF权重等。
      • 默认情况下,删除所有标点符号,将文本转换为空格分隔的单词序列(单词可能包含 ' 字符)。 这些序列然后被分割成标记列表。然后它们将被索引或向量化。0 不会被分配给任何单词的保留索引。
    2. hashing_trick
      • 将文本转换为固定大小散列空间中的索引序列。由于哈希函数可能发生冲突,可能会将两个或更多字分配给同一索引。 碰撞的概率与散列空间的维度和不同对象的数量有关。
    3. one_hot
      • One-hot 将文本编码为大小为 n 的单词索引列表。
    4. text_to_word_sequence
      • 将文本转换为单词(或标记)的序列。

    3. 图像预处理

    • 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)
      
    • ImageDataGenerator 类方法:

      • apply_transform
        • 根据给定的参数将变换应用于图像。
      • fit
        • 将数据生成器用于某些示例数据。它基于一组样本数据,计算与数据转换相关的内部数据统计。当且仅当 featurewise_centerfeaturewise_std_normalizationzca_whitening 设置为 True 时才需要。
      • flow
        • 采集数据和标签数组,生成批量增强数据。
      • flow_from_directory
      • get_random_transform
        • 为转换生成随机参数。
      • random_transform
        • 将随机变换应用于图像。
      • standardize
        • 将标准化配置应用于一批输入。
  • 相关阅读:
    C++基础学习1: C++布尔类型
    Hadoop-Yarn-框架原理及运作机制
    mapreduce shuffle 和sort 详解
    线程生命周期
    JVM 内存模型及垃圾回收
    利用Hive分析nginx日志
    mysql 30大优化策略
    hive 分组排序,topN
    Java核心卷笔记(一)
    Java 核心卷学习笔记(一)
  • 原文地址:https://www.cnblogs.com/LS1314/p/10380618.html
Copyright © 2020-2023  润新知