一、神经网络基本内容
1、结构
组成部分: 输入层、隐藏层、输出层
代码实现
import tensorflow as tf
from tensorflow import keras
#构造模型
model = keras.Sequential()
model.add(keras.layers.Dense(...)) #参数activation:激活函数 ;input_shape:数据规模
model.add(keras.layers.Dense(...))
#编译
#optimizer:优化器,loss :损失函数,metrics :监控指标
model.compile(optimizer = 'Adam',loss = 'relu',metrics = ['accuracy'])
#训练
#epoch:训练次数
model.fit(train_images,train_labels,epoch = 5)
2、参数选择
损失函数 loss- 用于测量模型在训练期间的准确率。您会希望最小化此函数,以便将模型“引导”到正确的方向上。
优化器 optimizer- 决定模型如何根据其看到的数据和自身的损失函数进行更新。
指标 metrics - 用于监控训练和测试步骤。以下示例使用了准确率,即被正确分类的图像的比率。
常见损失函数和最后一层激活函数的选择:
问题 | 最后一层激活函数 | 损失函数 |
---|---|---|
二分类问题 | sigmoid | binary_crossentropy |
多分类、单标签 | softmax | categorical_crossentory |
多分类、多标签 | sigmoid | binary_crossentropy |
回归到任意值 | 无 | mse |
回归到0~1范围内的值 | sigmoid | mse 或binary_crossentropy |
二、过拟合与正则化
1、过拟合
略
2、正则化
降低过拟合的方法
a.减小网络规模
减少层数、减少神经元数以使用更小容量的模型
b.添加权重正则化
L1正则化:添加的成本与权重系数的绝对值(权重的L1范数) 成正比
L2正则化:添加的成本与权重系数的平方(权重的L2范数) 成正比
#L1正则化
regularizers.l1(0.001) —>意为该层权重矩阵的每个系数都会使网络总损失增加0.001*weight_coefficient_value
#L2正则化
regularizers.l2(0.001)
#同时做L1、L2正则化
regularizers.l1_l2(l1 = 0.001,l2 = 0.001)
c.添加dropout正则化
原理:训练过程中随机将该层一些输出数据舍弃,打破训练输出之间的偶然联系防止被模型记住,从而降低过拟合效果。即引入噪声
实现方法:在模型中加入dropout层
model.add(keras.layers.Dropout(0.5)) #参数选择一般在0.2~0.5之间
三、评估方法
留出验证集:数据量很大时使用(一般使用这种方法就行)
K折交叉验证:留出验证的样本量太少,无法保证可靠性时使用
重复K折验证:可用数据很少,同时模型评估又要准确时使用
笔记