神经网络入门2

神经网络过拟合的处理方法

获取更多的训练数据

调节模型允许存储的信息量

模型越小,越不容易过拟合。因为当模型容量很大的时候,网络会学习到一种类似全映射的方式。好比如反正能记住,所有的图片对应的答案都记下来。这会导致泛化能力变差。如果你去约束他的记忆容量,然后通过训练避免网络模型去提取压缩有效的内在映射关系。这样会帮助提升泛化能力。

添加权重正则化

这里的前提是这样一个经验, 模型的参数值分布的熵越小的模型越不容易过拟合, 这个前提就当经验好了,为啥不知道。所以我们希望训练出来的参数逼近正态分布,均值为0。 对于大的参数进行惩罚,让网络训练通过惩罚反馈,不断的把参数中的大值打压下去。
要实现这个目的,方法是,在计算传递损失的时候,添加惩罚值。

from keras import regularizers
model = models.Sequential()
model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001), activation='relu', input_shape=(10000,)))
...

上面代码中regularizers.l2(0.001)表示在损失反向传递的时候,在计算损失的时候,要加上权重矩阵引起的惩罚,该层权重矩阵每个系数的平方*0.001作为惩罚值添加到损失中。这个损失只有在训练的时候添加,在测试的时候是不惩罚的。

dropout正则化

对某一层使用dropout,就是在训练过程中随机把该层的输出舍弃一些。(设置为0)同时因为测试时没有单元被舍弃,所以需要该层的输出值按dropout比例缩小(这个纯粹就讲不出啥道理了)
通常测试中为了让测试时输出不变,训练时dropout往往这样实现

layer_output *= np.random.randint(0,high=2,size=layer_output.shape)
layer_output /= 0.5  #注意因为随机丢掉了一半,这里参数要扩大一倍(感觉是经验做法)

在keras可以通过dropout层向网络中引入正则化。dropout将被应用与前面一层的输出

model.add(layers.Dropout(0.5))

机器学习模型建立的通用流程

1 定义问题,收集数据集

要明确并整理你要用机器学习解决的问题. 他的输入是什么,输出是什么. 要收集足够的数据集. 并且这些数据集包含足够的学习信息(输入到输出的各种映射关系都涵盖).

2 选择衡量成功的指标

这个涉及的是如何计算损失。对于平衡分类问题(每个类别的可能性相同),精度和接收者操作特征曲线下面积是常用指标,对于类别不平衡的问题,可以使用准确率, 这里精度和准确率的区别是啥???

3确定评估方法

根据数据集的大小可以选择

  • 留出验证集
  • K折交叉验证
  • 重复的K折交叉验证

3准备数据

比如将数据格式化为张量(因为神经网络的输入必须是张量)
比如把张量的取值缩放到较小的值范围
比如当不同的特征具有不同的取值范围的时候,进行数据标准化
你可能需要做特征工程,尤其是对于小数据问题 (这句话不理解)

4开发基础网络

5开始进行过拟合

6约束过拟合

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容