机器学习四个分支:
监督学习
无监督学习
自监督学习
强化学习
数据预处理、特征工程和特征学习
(1)神经网络的数据预处理
向量化
值标准化
处理缺失值
(2)特征工程
特征工程(feature engineering)是指将数据输入模型之前,利用你自己关于数据和机器学 习算法(这里指神经网络)的知识对数据进行硬编码的变换(不是模型学到的),以改善模型的效果。
(3)过拟合和欠拟合
a 获取更多的训练数据
b 减小网络大小
#原始模型
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,))) model.add(layers.Dense(16, activation='relu')) model.add(layers.Dense(1, activation='sigmoid'))
#容量小的模型
model = models.Sequential()
model.add(layers.Dense(4, activation='relu', input_shape=(10000,))) model.add(layers.Dense(4, activation='relu')) model.add(layers.Dense(1, activation='sigmoid'))
#容量大的模型
model = models.Sequential()
model.add(layers.Dense(512, activation='relu', input_shape=(10000,))) model.add(layers.Dense(512, activation='relu')) model.add(layers.Dense(1, activation='sigmoid'))
c 添加权重正则化
L1正则化:添加的成本与权重系数(权重的L1范数)的绝对值成正比
L2正则化:添加的成本与权重系数的平方(权重的 L2 范数)成正比。 神经网络的 L2 正则化也叫权重衰减(weight decay)。
# L2 权重正则化
from keras import regularizers
model = models.Sequential()
model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001),
activation='relu', input_shape=(10000,))) model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001),
activation='relu')) model.add(layers.Dense(1, activation='sigmoid'))
#l2(0.001)的意思是该层权重矩阵的每个系数都会使网络总损失增加0.001 * weight_ coefficient_value。注意,由于这个惩罚项只在训练时添加,所以这个网络的训练损失会 比测试损失大很多。
# 不同的权重的正则化
from keras import regularizers
regularizers.l1(0.001) #L1 正则化
regularizers.l1_l2(l1=0.001, l2=0.001) #同时做L1和L2正则化
d 添加dropout正则化
对某一层使用 dropout,就是在训练过程中随机将该层的一些输出特征舍弃(设置为 0)。dropout 比率(dropout rate)是被设为 0 的特征所占的比例,通常在 0.2~0.5 范围内。
model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,))) model.add(layers.Dropout(0.5))
model.add(layers.Dense(16, activation='relu')) model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation='sigmoid'))
网友评论