山东大学暑期项目实训——云主机服务比价与预测系统

山东大学暑期项目实训——云主机服务比价与预测系统(十一)

Keras学习

1.构建模型

在 Keras 中有两类主要的模型:Sequential 顺序模型使用函数式 API 的 Model 类模型

这些模型有许多共同的方法和属性:

  • model.layers 是包含模型网络层的展平列表。
  • model.inputs 是模型输入张量的列表。
  • model.outputs 是模型输出张量的列表。
  • model.summary() 打印出模型概述信息。 它是 utils.print_summary 的简捷调用。
  • model.get_config() 返回包含模型配置信息的字典。

Sequential 模型方法

1)compile
compile(optimizer, loss=None, metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)
2)fit
fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None)
  • x: 训练数据的 Numpy 数组。 如果模型中的输入层被命名,你也可以传递一个字典,将输入层名称映射到 Numpy 数组。 如果从本地框架张量馈送(例如 TensorFlow 数据张量)数据,x 可以是 None(默认)。
  • y: 目标(标签)数据的 Numpy 数组。 如果模型中的输出层被命名,你也可以传递一个字典,将输出层名称映射到 Numpy 数组。 如果从本地框架张量馈送(例如 TensorFlow 数据张量)数据,y 可以是 None(默认)。
  • batch_size: 整数或 None。每次提度更新的样本数。如果未指定,默认为 32.
  • epochs: 整数。训练模型迭代轮次。一个轮次是在整个 xy 上的一轮迭代。请注意,与 initial_epoch 一起,epochs 被理解为 「最终轮次」。模型并不是训练了 epochs 轮,而是到第 epochs 轮停止训练。
  • verbose: 0, 1 或 2。日志显示模式。 0 = 安静模式, 1 = 进度条, 2 = 每轮一行。
  • callbacks: 一系列的 keras.callbacks.Callback 实例。一系列可以在训练时使用的回调函数。详见 callbacks
  • validation_split: 在 0 和 1 之间浮动。用作验证集的训练数据的比例。模型将分出一部分不会被训练的验证数据,并将在每一轮结束时评估这些验证数据的误差和任何其他模型指标。验证数据是混洗之前 xy 数据的最后一部分样本中。
  • validation_data: 元组 (x_val,y_val) 或元组 (x_val,y_val,val_sample_weights),用来评估损失,以及在每轮结束时的任何模型度量指标。模型将不会在这个数据上进行训练。这个参数会覆盖 validation_split
  • shuffle: 布尔值(是否在每轮迭代之前混洗数据)或者 字符串 (batch)。batch 是处理 HDF5 数据限制的特殊选项,它对一个 batch 内部的数据进行混洗。当 steps_per_epochNone 时,这个参数无效。
  • class_weight: 可选的字典,用来映射类索引(整数)到权重(浮点)值,用于加权损失函数(仅在训练期间)。这可能有助于告诉模型 「更多关注」来自代表性不足的类的样本。
  • sample_weight: 训练样本的可选 Numpy 权重数组,用于对损失函数进行加权(仅在训练期间)。您可以传递与输入样本长度相同的平坦(1D)Numpy 数组(权重和样本之间的 1:1 映射),或者在时序数据的情况下,可以传递尺寸为 (samples, sequence_length) 的 2D 数组,以对每个样本的每个时间步施加不同的权重。在这种情况下,你应该确保在 compile() 中指定 sample_weight_mode="temporal"
  • initial_epoch: 开始训练的轮次(有助于恢复之前的训练)。
  • steps_per_epoch: 在声明一个轮次完成并开始下一个轮次之前的总步数(样品批次)。使用 TensorFlow 数据张量等输入张量进行训练时,默认值 None 等于数据集中样本的数量除以 batch 的大小,如果无法确定,则为 1。
  • validation_steps: 只有在指定了 steps_per_epoch时才有用。停止前要验证的总步数(批次样本)。
3)evaluate
evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None)
4)predict
predict(x, batch_size=None, verbose=0, steps=None)

2.关于Keras的网络层

2.1核心网络层–Dense

keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
  • units: 正整数,输出空间维度。
  • activation: 激活函数 ( 若不指定,则不使用激活函数 (即,「线性」激活: a(x) = x)。
  • use_bias: 布尔值,该层是否使用偏置向量。
  • kernel_initializer: kernel 权值矩阵的初始化器 。
    • 初始化定义了设置 Keras 各层权重随机初始值的方法。
    • 可用的初始化器
      • zeros将张量初始值设为 0 的初始化器
      • ones将张量初始值设为 1 的初始化器
      • constant(value)将张量初始值设为一个常数的初始化器
      • randomNormal(mean,stddev,seed)按照正态分布生成随机张量的初始化器
      • randomUniform()按照均匀分布生成随机张量的初始化器
    • 更多
  • bias_initializer: 偏置向量的初始化器,参照kernel_initializer
  • kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 。正则化项通常用来解决过拟合问题。
    • 正则化器允许在优化过程中对层的参数或层的激活情况进行惩罚
    • L1会产生稀疏矩阵,L2又称为岭回归
  • bias_regularizer: 运用到偏置向的的正则化函数。
    • 通常只是正则化w和activity不对bias进行正则化,否则很容易产生欠拟合。
  • activity_regularizer: 运用到层的输出的正则化函数 (它的 “activation”)。
  • kernel_constraint: 运用到 kernel 权值矩阵的约束函数 。
    • constraints 模块的函数允许在优化期间对网络参数设置约束(例如非负性)
    • 详见官方文档
  • bias_constraint: 运用到偏置向量的约束函数 。
模型可视化
  • 绘制keras模型

    • keras.utils.vis_utils 模块提供了一些绘制 Keras 模型的实用功能
    • plot_model(model, to_file=‘model.png’)绘制一张模型图,并保存为文件
  • 训练历史的可视化

    • fit方法返回了一个History对象

    • History.history 属性是一个记录了连续迭代的训练/验证(如果存在)损失值和评估值的字典

      import matplotlib.pyplot as plt
      
      history = model.fit(x, y, validation_split=0.25, epochs=50, batch_size=16, verbose=1)
      
      # 绘制训练 & 验证的准确率值
      plt.plot(history.history['acc'])
      plt.plot(history.history['val_acc'])
      plt.title('Model accuracy')
      plt.ylabel('Accuracy')
      plt.xlabel('Epoch')
      plt.legend(['Train', 'Test'], loc='upper left')
      plt.show()
      
      # 绘制训练 & 验证的损失值
      plt.plot(history.history['loss'])
      plt.plot(history.history['val_loss'])
      plt.title('Model loss')
      plt.ylabel('Loss')
      plt.xlabel('Epoch')
      plt.legend(['Train', 'Test'], loc='upper left')
      plt.show()
      

2.2 卷积层Convolutional

  • Conv1D

    • keras.layers.Conv1D(filters, kernel_size, strides=1, padding='valid', data_format='channels_last', dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
      
    • filters输出空间的维度

    • 一个整数,或者单个整数表示的元组或列表, 指明 1D 卷积窗口的长度。

    • activation激活函数

    • 输出为3D张量,尺寸为(batch_size, steps, input_dim)

  • Conv2D --2D 卷积层 (例如对图像的空间卷积)

    • keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
      
    • 详见官方文档

2.3池化层Pooling

  • MaxPoolong1D对于时序数据的最大池化

    • keras.layers.MaxPooling1D(pool_size=2, strides=None, padding='valid', data_format='channels_last')
      
    • pool_size: 整数,最大池化的窗口大小。

  • MaxPooling2D对于空间数据的最大池化

    • keras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)
      
  • MaxPooling3D

    • keras.layers.MaxPooling3D(pool_size=(2, 2, 2), strides=None, padding='valid', data_format=None)
      
  • 详见官方文档

2.4 循环层Recurrent

  • RNN

    • keras.layers.RNN(cell, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)
      
    • Cell一个 RNN 单元实例

  • 详见官方文档

  • LSTM!!!长短期记忆网络层(Long short-term Memory)

    • keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)
      
    • units: 正整数,输出空间的维度

    • activation:激活函数

      • softmax
      • elu
      • tach
      • sigmoid
    • recurrent_activation: 用于循环时间步的激活函数

    • dropout: 在 0 和 1 之间的浮点数。 单元的丢弃比例,用于输入的线性转换。

    • return_sequences: 布尔值。是返回输出序列中的最后一个输出,还是全部序列。

  • ConvLSTM2D --卷积 LSTM

    • keras.layers.ConvLSTM2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, return_sequences=False, go_backwards=False, stateful=False, dropout=0.0, recurrent_dropout=0.0)
      
    • filter输出空间的维度

    • kernel_size: 一个整数,或者 n 个整数表示的元组或列表, 指明卷积窗口的维度

3.数据预处理

3.1TimeseriesGenerator–用于生成批量时序数据的实用工具类

  • 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)
    
  • 这个类以一系列由相等间隔以及一些时间序列参数(例如步长、历史长度等)汇集的数据点作为输入,以生成用于训练/验证的批次数据

  • data:可索引的生成器(例如列表或 Numpy 数组),包含连续数据点(时间步)。数据应该是 2D 的,且第 0 个轴为时间维度。

  • targets: 对应于 data 的时间步的目标值。它应该与 data 的长度相同。

  • length: 输出序列的长度(以时间步数表示)

  • sampling_rate: 序列内连续各个时间步之间的周期。对于周期 r, 时间步 data[i], data[i-r], … data[i - length] 被用于生成样本序列

3.2文本预处理

3.3图像预处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PRryaiHf-1627206078646)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210505174947071.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IrM5ijde-1627206078649)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210505175509655.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值