【tensorflow2.0】4.keras模型训练

本文摘要:model.compile()  、model.fit()
一个完整的神经网络可以分为六部分:
1.import:导入需要的包;
2.data:导入训练所用数据集(训练集、验证集、测试集);
3.model:搭建网络(上节课内容);
4.model.compile:选择损失函数、优化器、评估函数;
5.model.fit:模型训练;
6.model.summary:查看网络结构和参数个数

首先是model.compile():
model.compile()中有三个很重要的参数:损失函数、优化器、评估函数,下面给出常用的参数函数、对应的代码以及适用范围(涉及到的算法公式未给出,大家有兴趣可以自行百度):

'''
1.损失函数
1.1  均方误差(Mean Square Error)是回归问题最常用的损失函数。回归问题解决的是对具体数值的
预测,比如房价预测、销量预测等。这些问题需要预测的不是一个事先定义好的类别,而是一个任意实
数
'''
 tf.keras.losses.MeanSquaredError()
 '''
1.2  交叉熵损失函数(CrossEntropy Loss)是分类中最常用的损失函数。分类问题解决的是对输出结果的
分类,比如鸢尾花识别、minst数字识别等。这些问题需要预测的是一个事先定义好的类别。
'''
 tf.keras.losses.binary_accuracy: 对二分类问题,计算在所有预测值上的平均正确率
 tf.keras.losses.categorical_accuracy:对多分类问题,计算再所有预测值上的平均正确率
 tf.keras.losses.sparse_categorical_accuracy:与categorical_accuracy相同,在对稀疏的目标值预测时有用

'''
2.优化器(optimizer):一个模型只能有一个优化器
2.1.SGD:就是每一次迭代计算mini-batch的梯度,然后对参数进行更新,是最常见的优化方法。lr是学习率;momentum是模拟物理里动量的概念,积累之前的动量来替代真正的梯度.
'''
tf.keras.optimizers.SGD(learning_rate=0.01, momentum=0.0)
'''
2.2.AdaGrad:算法在初始时鼓励收敛,随着迭代的深入慢慢变成惩罚收敛,速度也越来越慢。
'''
tf.keras.optimizers.Adagrad(learning_rate=0.001)
'''
2.3.Adadelta:是对Adagrad的扩展,最初方案依然是对学习率进行自适应约束,但是进行了计算上的简化,rho是衰减率,epsilon十条街grad更新的参数。
'''
tf.keras.optimizers.Adadelta(learning_rate=0.001, rho=0.95, epsilon=1e-07)
'''
2.4.RMSprop:算是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间
'''
tf.keras.optimizers.RMSprop(learning_rate=0.001, rho=0.9, momentum=0.0, epsilon=1e-07)
'''
2.5.Adam:本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。
'''
tf.keras.optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07)

'''
3.评价指标
(由于我也是个小白,官方文档有50多个评估指标,我不太清楚哪些常用,所以这里请大家用到时候自行百度一下)
3.1准确率(Accuracy)
准确率: 即指所有预测正确的样本(无论预测的是正例还是负例)占所有样本的比例。
3.2精确率(Precision)
精确率就是指当前划分到正样本类别中,被正确分类的比例,即真正的正样本所占所有预测为正样本的比例。
3.3召回率(Recall)
召回率即指当前被分到正样本类别中,真实的正样本占所有正样本的比例,即召回了多少正样本的比例。

'''

接下来再说一下model.fit()

#model.fit() 中有许多的参数,我们可以通过help()函数查看
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, validation_freq=1, max_queue_size=10, workers=1, use_multiprocessing=False, **kwargs) 
"""
x: 模型的输入;
y: 模型的输出;
batch_size: 每次梯度更新的样本数。如果未指定,默认为 32。
epochs: 整数。训练模型迭代轮次。
verbose: 0, 1 或 2。日志显示模式。 0 = 安静模式, 1 = 进度条, 2 = 每轮一行。
callbacks: 可以在训练时使用的回调函数,本文后边会有专门的讲解
validation_split: 0 和 1 之间的浮点数。用作验证集的训练数据的比例;
validation_data: 元组 (x_val,y_val) 或元组 (x_val,y_val,val_sample_weights), 用来评估损失,以及在每轮结束时的任何模型度量指标。 
shuffle: 布尔值(是否在每轮迭代之前混洗数据)或者 字符串 (batch)。 
class_weight: 可选的字典,用来映射类索引(整数)到权重(浮点)值,用于加权损失函数(仅在训练期间)。 这可能有助于告诉模型 「更多关注」来自代表性不足的类的样本。
sample_weight: 训练样本的可选 Numpy 权重数组,用于对损失函数进行加权(仅在训练期间)。 可以传递与输入样本长度相同的平坦(1D)Numpy 数组(权重和样本之间的 1:1 映射), 或者在时序数据的情况下,可以传递尺寸为 (samples, sequence_length) 的 2D 数组,以对每个样本的每个时间步施加不同的权重。 在这种情况下,你应该确保在 compile() 中指定 sample_weight_mode=“temporal”。
initial_epoch: 整数。开始训练的轮次(有助于恢复之前的训练)。
steps_per_epoch: 整数或 None。 在声明一个轮次完成并开始下一个轮次之前的总步数(样品批次)。 使用 TensorFlow 数据张量等输入张量进行训练时,默认值 None 等于数据集中样本的数量除以 batch 的大小,如果无法确定,则为 1。
validation_steps: 只有在指定了 steps_per_epoch 时才有用。停止前要验证的总步数(批次样本)。
"""

#这里边改我们常用到的函数有x,y,epoch,batch_size,callbacks,validation_split,validation_data

下边重点说一下callbacks函数(回调函数)
Callbacks的本质是一组函数对象,代码层面就是一个Python List,在训练过程中的特定时期被执行,这些函数对象可以在训练过程中访问,保存或者修改训练中的参数,相当于在训练之前写好了几个锦囊,这些锦囊会在特定的时间被打开并且执行。用好Callbacks训练过程将会是一个很愉快的过程。这里我们只讲解常用的两个:ModelCheckpoint和EarlyStopping

"""
Checkpoint神经网络模型简介
    Checkpoint是为长时间运行进程准备的容错技术。这是一种在系统故障的情况下拍摄系统状态快照的方法。
一旦出现问题不会让进度全部丢失。Checkpoint可以直接使用,也可以作为从它停止的地方重新运行的起点。
    训练深度学习模型时,Checkpoint是模型的权重。他们可以用来作预测,或作持续训练的基础。
	ModelCheckpoint回调类允许你定义检查模型权重的位置在何处,文件应如何命名,以及在什么情况下创建模型的Checkpoint。
"""
tf.keras.callbacks.ModelCheckpoint(
	filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto'
)
"""
filename:字符串,保存模型的路径

monitor:需要监视的值

verbose:信息展示模式,0或1

save_best_only:当设置为True时,将只保存在验证集上性能最好的模型

mode:‘auto’,‘min’,‘max’之一,在save_best_only=True时决定性能最佳模型的评判准则,例如,当监测值为val_acc时,
模式应为max,当检测值为val_loss时,模式应为min。在auto模式下,评价准则由被监测值的名字自动推断。

save_weights_only:若设置为True,则只保存模型权重,否则将保存整个模型(包括模型结构,配置信息等)

"""
tf.keras.callbacks.EarlyStopping(
    monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto',
)
"""
monitor: 被监测的数据。
min_delta: 在被监测的数据中被认为是提升的最小变化, 例如,小于 min_delta 的绝对变化会被认为没有提升。
patience: 没有进步的训练轮数,在这之后训练就会被停止。
verbose: 详细信息模式。
mode: {auto, min, max} 其中之一。 在 min 模式中, 当被监测的数据停止下降,训练就会停止;在 max 模式中,
当被监测的数据停止上升,训练就会停止;在 auto 模式中,方向会自动从被监测的数据的名字中判断出来。
"""

具体的使用方法在作业中会展示!fighting!!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值