keras两种模型之序贯模型

序贯模型

创建序贯模型

通过多个层堆叠并传递给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)。
模型输出
上述代码中模型指标的最终输出显示如下:
在这里插入图片描述

在这里插入图片描述

仅供个人学习使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值