《Keras深度学习实战》—2.7 序贯模型
2.7 序贯模型
可以通过将多个层堆叠并传递给Sequential的构造函数来创建序贯模型。
怎么做
创建基本序贯模型涉及指定一个或多个层。
创建序贯模型
我们将创建一个包含四层的序贯网络。
1.第1层是全连接层(稠密层),其input_shape为(*,784),output_shape为(*,32)。
稠密层是一个根据一定规则密集连接的神经网络层,实现操作:output = activation(dot(input,kernel)+ bias)。其中激活函数(activation)是传递激活参数的函数,核(kernel)是由层创建的权重矩阵,偏差(bias)是层创建的偏差向量(仅当use_bias为True时才适用)。
2.第2层是激活层,将tanh激活函数用于激活输入张量:
Activation也可以作为参数应用于稠密层:
3.第3层是一个稠密层,输出为(*,10)。
4.第4层具有应用softmax函数的Activation:
在数学中,softmax函数也称为归一化指数函数,是逻辑函数的泛化,它将一个含任意实数的K维向量z压缩到另一个K维实向量σ(z)。其中每个元素都在(0~1)范围内,所有元素加起来为1。如以下公式所示:
5.创建的模型如下:
Sequential是Model的子类,还有一些其他方法将会在后续章节进行介绍。
编译模型
编译模型:
有关每个参数含义的详细信息,请参阅文档https://keras.io/models/sequential/#the-sequential-model-api。
训练模型
此方法用于以指定次数(数据集上的迭代)训练模型:
有关每个参数含义的详细信息,请参阅文档https://keras.io/models/sequential/#the- sequential-model-api。
评估模型
evaluate方法用于评估模型指标,使用批处理完成:
模型预测
调用以下predict API进行预测,它返回一个numpy数组:
接下来给出一个结合使用这些API的实例。
把它们结合
我们将使用皮马印第安人糖尿病数据集。
该数据集最初来自美国糖尿病、消化系统和肾脏疾病研究所,目标是使用数据集中包括的测量值来诊断性地预测患者是否患有糖尿病。不过这些数据集有一定的局限性,例如,数据集中的所有患者都是大于21岁的女性皮马印第安人。数据集由若干医学预测变量和一个目标变量(结果)组成,预测变量包括患者的怀孕次数、BMI、胰岛素水平、年龄等。
数据集的形状为(768,9)。
数据集的值包括:
X的值,为第0到第7列:
Y的值是数据集的第8列,如下图所示:
模型内部检验
通过在调试器中进行模型检验,可以在调用compile方法之前得到如下模型属性:
模型内部编译
调用model.compile()时后台会进行如下操作:
从后端获得优化器。
以下是支持的优化器列表:
初始化损失函数
所用的损失函数是二元交叉熵损失。
交叉熵损失(也称为对数损失)用于测量模型的性能(分类模型),其输出是介于0~1之间的概率值,随着预测概率偏离实际值的程度变化而变化:
初始化所有输出的内部变量:
设置模型目标:
设置样本权重:
在编译之前,将以下值分配给样本权重和sample_weight_modes:
运行代码后,它会初始化为以下值:
设置指标:
接下来,我们设置指标名称和metrics_tensors,用于存储实际指标:
计算总损失和指标:
计算损失并添加到self.metrics_tensors:
接下来,计算嵌套指标和nested_weighted_metrics:
初始化测试、训练和预测函数:
全部惰性初始化:
对可训练权重进行排序:
最后,我们初始化可训练的权重:
模型训练
调用model.fit进行模型训练,执行以下步骤。
数据验证:
将validation_data传递给Keras模型时,它必须包含两个参数(x_val,y_val)或三个参数(x_val,y_val和val_sample_weights)。
模型输出
上述代码中模型指标的最终输出显示如下:
- 点赞
- 收藏
- 关注作者
评论(0)