山东大学暑期项目实训——云主机服务比价与预测系统(十一)
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: 整数。训练模型迭代轮次。一个轮次是在整个
x
或y
上的一轮迭代。请注意,与initial_epoch
一起,epochs
被理解为 「最终轮次」。模型并不是训练了epochs
轮,而是到第epochs
轮停止训练。 - verbose: 0, 1 或 2。日志显示模式。 0 = 安静模式, 1 = 进度条, 2 = 每轮一行。
- callbacks: 一系列的
keras.callbacks.Callback
实例。一系列可以在训练时使用的回调函数。详见 callbacks。 - validation_split: 在 0 和 1 之间浮动。用作验证集的训练数据的比例。模型将分出一部分不会被训练的验证数据,并将在每一轮结束时评估这些验证数据的误差和任何其他模型指标。验证数据是混洗之前
x
和y
数据的最后一部分样本中。 - validation_data: 元组
(x_val,y_val)
或元组(x_val,y_val,val_sample_weights)
,用来评估损失,以及在每轮结束时的任何模型度量指标。模型将不会在这个数据上进行训练。这个参数会覆盖validation_split
。 - shuffle: 布尔值(是否在每轮迭代之前混洗数据)或者 字符串 (
batch
)。batch
是处理 HDF5 数据限制的特殊选项,它对一个 batch 内部的数据进行混洗。当steps_per_epoch
非None
时,这个参数无效。 - 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)]