keras入门实战

网络结构模型:搭建的是一个3层全连接Dense网络,3072--512--256--3,顺序模型

optimizer选择 SGD 随机梯度下降(自定义学习率) , LOSS FUNCTION 选择 cross entropy交叉熵。

数据集3000个,划分 训验比 为 3:1

模型为普通神经网络模型,即Dense层(全连接层)神经元,初步选用 lr=0.01,epoch =200,batch_size=32;

可以发现,模型  在训练到200轮的时候发现红线train-loss趋于0,而在验证集上val_loss还很大,则模型 已经过拟合了

从训练集 精度为1,而模型在验证集上分类精度只有0.6,看出 模型过拟合了。

(1)学习率对结果的影响

当模型过拟合时,通常可以调整 学习率 和 批大小 这两个超参数。可以优先缩小  1/10 倍学习率

 可以发现,用小学习率 训练200次时,模型过拟合现象有所改善。为了更好观察,可设置epochs =2000,训练2000轮。更好地 观察 模型是否在训练集上过拟合。

很可惜,扩大训练轮数,发现 lr=0.001时模型在训练集上acc=1,loss=0(完美),在验证集上loss发散,acc = 0.6。。。模型明显过拟合

(2)批大小对结果的影响

进一步,调整批大小的超参数,设置 batch_size =16,观察 

仍然不难预测到模型过拟合,分析可能是 小批次 在 该学习率下效果不好,二者不适配,非最优对应解。 过拟合的模型是没有任何用的,因为只在训练集上表现良好,没有预测的能力。

此外,还可以从减少层数(优化小型网络深度),改变网络每层输出单元的个数(output)来降低过拟合。

抑制过拟合方法

1. 添加dropout

全连接神经元过多造成过拟合,随机杀死部分神经元,添加的 dropout  将被引入前一层的输出中,随机从上一层输出的特征图中丢弃特征

epoch =200  难以充分分析是否过拟合, 可以考虑更多的训练轮数,但遗憾的是 模型仍然过拟合,但相比最初 lr=0.01 时,验证集的 loss发散更小, acc 也有提高

2.初始化权重参数

DENSE层的 Initializer 方法 的 API:

 越小的初始化参数 sted标准差越小,会使模型过拟合风险越小 ,即 val 集和train 集的 loss接近

model.add(Dense(256,
 activation="relu",
kernel_initializer = initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)))

model.add(Dense(256, 
activation="relu",
kernel_initializer = initializers.TruncatedNormal(mean=0.0, stddev=0.01, seed=None)))

3.目标函数正则化

使 目标 函数= 原损失函数 loss  +  正则项

L2 正则化(平方项权重系数w),选择不同的惩罚力度lamuda,观察 不同lamuda值 对 模型的 影响

lamuda =0.01 ,TruncatedNormal .std= 0.05

 由于添加 L2正则项 ,会使 目标函数初始值很大,所以 前150 个 训练轮次的参考意义不大。

故取值时 ,把 N取150个点后的值方便观察 , 且   由于loss取值区间  比 acc取值区间【0,1】要大很多,所以 只观察 模型在 后50个训练轮次上 训练集和验证集 的准确率(每个轮次迭代3000个数据)

较小的正则化惩罚:l2 = 0.01

 l2 = 0.05,train acc和 val acc二者更接近

w

 惩罚力度小,则输出结果不太稳定,容易造成过拟合现象(w2):

保存上述生成的模型

model.save(args["model"])# 调用了当时自定义的argparse工具包里的方法

predict.py:

在运行(U)里的  编辑配置中  可以选择 重新设置形参; 把dog 的图片导入

在图片上预测其输出类别,并打印类别判断的概率

 混淆矩阵中:绿色 True 代表我们预测正确,橙色 False代表我们预测错误

Positive 代表我们预测的是Positive类。故TP 代表预测正确的 Positive类 的 数目

 在多分类混淆矩阵的问题中 ,绿色的对角线 是模型预测正确的情况。 橙色部分是预测错误的部分。希望模型绿色部分的值尽可能大,橙色部分的值尽可能小,代表模型的分类效果越好。

 

 accuracy precision  Recall分别对应  解决了 1 2 3 这 3 个问题

猫狗熊猫 3 分类问题,则得到一个 3*3的矩阵 ,其中 召回率 = 该类对应的对角线元素(绿色)/该列所有元素和 , 精确率 =  该类对应的对角线元素(绿色)/该行所有元素和

在某些领域,比如医学领域不希望遗漏掉任何一位患者,所以我们会认为 Recall 更重要 ,于是 在计算F1 时会把 beta 取值为 2。 在某些领域,若认为 Precision精确率更重要,就会把  beta 取值为 【0,1】的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值