TensorFlow 笔记
------------------------------- 1. 创建模型阶段 -------------------------------
1. Activation 激活函数,
属于模型的一个层,可以用于中间层,输出层。
- ReLU (Rectified Linear Unit), 修正线性单元,即 max(0, x), 速度快, 多用于中间层。
- sigmoid, 输出 0-1 之间的数,适合二分类。多用于最后输出层。
- tanh, 很优秀!
- softmax 返回的是一个由多个概率值(和为1)组成的数组,适合多分类,最后输出层。
------------------------------- 2. 训练模型阶段 -------------------------------
2. loss 损失函数
也称为 目标函数, Loss function:𝐿(𝑦^ , 𝑦).
- cost = 对𝑚个样本的损失函数求和,然后除以 m
- categorical_crossentropy 适合多分类问题
- binary_crossentropy 适合二分类问题
- mean-squared error, 适合回归问题
- CTC,connectionist temporal classification 适合时序分类
- 交叉熵(crossentropy),适用于,输出概率值的模型
交叉熵,属于信息论领域的概念,用于衡量概率分布之间的距离,比如真实分布与预测值之间的距离。 - mse, 均方误差(MSE,mean squared error),回归问题常用的损失函数。
3. 优化器, 目的是进行【快速的梯度下降】
- Adam (Adaptive Moment Estimation)优化算法
基本上就是将 Momentum 和 RMSprop 结合在一起 - RMSprop, root mean square prop
- 动量梯度下降法(Gradient descent with Momentum)
- mini-batch
- rmsprop 无论你的问题是什么,通常都是很好的优化器。
梯度下降,其实就是更新公式的参数,更新 W 和 b 的值
总共大概有6种
- SGD, 小批量随机梯度下降
数据正则化 Regularization 正则化的目的,是为了防止过度拟合。
𝐿2正则化: 很常用,可以防止过度拟合。
dropout 随机失活:
early stopping: 提早停止训练
-
L1 正则化: 添加的成本与权重系数的绝对值成正比
-
L2 正则化: 添加的成本与权重系数的平方成正比
from keras import regularizers
regularizers.l1_l2(l1=0.001, l2=0.001) # 或
layers.Dense(16, kernel_regularizer=regularizers.l2(0.001),… -
dropout 正则化,对一些输出特征随机舍弃(设置为0).
model.add(layers.Dropout(0.5)) # 通常在 0.2 – 0.5
模型评估
- 查准率(precision),在你的分类器标记为猫的例子中,有多少真的是猫。
- 查全率(recall),对于所有真猫的图片,你的分类器正确识别出了多少百分比
- F1 大约是 recall 和 precision 的均值。实际是 调和平均数
- 实际使用中,还要考虑到时间消耗。 即模型做出判断的时间长短。
网络层, 网络架构
- Dense() 是密集连接, 全连接层. 输入一个二维张量,返回一个二维张量。
Dense(16, activation=‘relu’) 这个16,表示16个隐藏单元
隐藏单元越多,网络越复杂,计算代价越大。会提高训练集的性能,不会提高测试集的性能。 - Conv2D, 卷积层,学习的是局部模式,而 Dense 学到的是全局模式,
模式的平移不变性,模式的空间层次结构。 - MaxPooling2D 把上一层输出的图像尺寸减半,26 x 26 --> 13 x 13
是对特征图进行采样,有助于学习特征的空间层级结构。
编译网络阶段
- loss function 损失函数: 网络如何衡量在训练数据上的性能,如何朝着正确的方向前进
- optimizer 基于训练数据和损失函数,来更新网络的机制
- metric 指标, 训练和测试过程中需要监控的指标
网络评价
- 训练精度和测试精度之间的这种差距, 是过拟合(overfit)造成的
其他:
- Numpy(以及大多数其他库)中不存在字符串张量,因为张量存
储在预先分配的连续内存段中,而字符串的长度是可变的,无法用这种方式存储 - 神经网络的引擎: 基于梯度的优化。
- 梯度 gradient, 是张量运算的导数。
- 神经网络常用的场景,二分类问题、多分类问题和标量回归问题。
- Sequential() 是基于层的线性堆叠。
过度拟合
- 降低训练的轮数,可以有效降低过度集合
- 判断过度拟合一个依据是,验证集的准确度从什么时候开始停止增长
- 训练集越小,越容易出现过度拟合,可以减少网络的大小
metric
- mae, 平均绝对误差(MAE,mean absolute error),预测值与目标值之差的绝对值。 这个值越小越好。 这个事情, 我曾经闹出笑话!
使用预训练模型
-
特征提取
-
微调模型
-
激活函数
sigmoid 生成 (0, 1) 之间的数
ReLU 生成 max(0, x) 之间的数
SGD 随机梯度下降 适合大量数据
L2正则化 目的是为了防止过度拟合,增加训练集也可以防止过度拟合
GAN 生成对抗网络,属于是无监督学习。想象一个例子,制作假币。
生成器 输入随机噪点作为样本
判别器 以真实数据作为输入
要点:
- 当训练过程变得困难时,别说话,降低学习速率.
- 千万不要相信你学得有多快