序贯模型
创建序贯模型
通过多个层堆叠并传递给Sequential的构造函数来创建序贯模型
#一个四层的序贯模型
from keras.models import Sequential
from keras.layers import Dense,Activation
model = Sequential([
#第一层全连接层(稠密层),输入(*,784),输出(*,32)
Dense(32,input_share=(784,)),
# 第二层激活层
Activation('tanh'),
#第三层稠密层 输出(*,10)
Dense(10),
#第四层具有softmax函数的激活层
Activation('softmax'),
])
print(model.summary)
softmax 函数,将所有输出结果做百分比,最后的结果和为1
编译模型
compile(optimizer,loss=None,Metrics=None,loss_weights=None,
sample_weight_mode=None,weighted_metrics=None,target_tensors=None)
#参数详解:https://keras.io/models/sequential/#the-sequential-model-api
optimizer:此对象会指定训练过程。从 tf.train 模块向其传递优化器实例,例如 tf.train.AdamOptimizer、tf.train.RMSPropOptimizer 或 tf.train.GradientDescentOptimizer。 定义优化算法
loss:要在优化期间最小化的函数。常见选择包括均方误差 (mse)、categorical_crossentropy 和 binary_crossentropy。损失函数由名称或通过从 tf.keras.losses 模块传递可调用对象来指定。定义损失函数
metrics:用于监控训练。它们是 tf.keras.metrics 模块中的字符串名称或可调用对象。评估模型
训练模型
此方法用于指定次数(数据集上的迭代)训练模型
参数详解:https://keras.io/models/sequential/#the-sequential-model-api
评估模型
evaluate方法用于评估模型,使用批处理完成:
evaluate(x=None,y=None.batch_size=None.verbose=1,
sample_weight=None,steps=None)
参数详解:https://keras.io/models/sequential/#the-sequential-model-api
模型预测
调用predict API 进行预测。返回一个numpy数组
predict(x,batch_size=None.varbose=0,steps=None)
实例
数据 皮马印第安人糖尿病数据集
数据集形状(768,9),由若干医学预测变量(前八列)和一个目标(结果)变量(第九列;1.0 / 0.0)组成,预测变量包括患者的怀孕次数,BMI,胰岛素水平,年龄等。
模型内部检验
通过在调试器中进行模型检验,可以在调用compile方法前得到如下属性模型
模型内部编译
调用model.compile()方法时后台会进行如下操作:
从后端获得优化器
# 支持的优化器列表
all_classes = {
'sgd':SGD,
'rmsprop':RMSporp,
'adagrad':Adagrad,
'adadelta':Adadelta,
'adam':Adam,
'adamax':Adamax,
'nadam':Nadam,
'tfoptimizer':TFOtimizer,
}
初始化损失函数
此处使用的是二元交叉熵损失
交叉熵损失也称为对数损失,输出介于0~1之间的概率值,
随着预测概率偏离实际值的程度变化而变化
-(ylog(p)+(1-y)log(1-p))
self.loss = loss or []
初始化所有输出的内部变量
self._feed_outputs = []
self._feed_output_names = []
self._feed_output_shapes = []
self._feed_loss_fns = []
设置模型目标
self._feed_targets.append(target)
self._feed_outputs.append(self.outputs[i])
self._feed_output_names.append(name)
self._feed_output_shapes.append(shape)
self._feed_loss_fns.append(self.loss_functions[i])
设置样本权重
在编译前,将以下值分配给样本权重和sample_weight_modes:
sample_weight = []
sample_weight_modes = []
设置指标
接下来设置指标名称和metrics_tensors,用于存储实际指标
self.metrics_name = ['loss']
self.metrics_tensors = []
计算总损失和指标
计算损失并添加到self.metrics_tensors:
output_loss = weighted_loss(y_true,y_pred,sample_weight,mask)
self.metrics_tensors.append(output_loss)
self.metrics_names.append(self.output_names[i] + '_loss')
接下来,计算嵌套指标和nested_weighted_metrics:
nested_metrics = collect_metrics(metrics,self.output_names)
nested_weighted_metrics = collect_metrics(weighted_metrics,self.output_names)
初始化测试,训练和预测函数
#全部惰性初始化
self.train_function = None
self.test_function = None
self.predict_function = None
对可训练权重进行排序
最后,我们初始化可训练的权重
trainable_weights = self.trainable_weights
self._collected_trainable_weights = trainable_weights
模型训练
调用model.fit进行模型训练,执行以下步骤:
数据验证
将validation_data传递给Keras模型时,它必须包含两个参数(x_val,y_val)或三个参数(x_val,y_val和val_sample_weights)。
模型输出
上述代码中模型指标的最终输出显示如下:
仅供个人学习使用