tensorflow
tensor
variable
graph
session
operation
神经网络
输入层
隐藏层:损失函数,优化算法
输出层
每一层作为上一层的输入,
损失函数:交叉熵,均方误差
感知机:01损失函数
逻辑斯蒂回归:对数损失函数
Adaboost:指数损失函数
线性回归:平方损失函数
决策树:极大似然函数
SVM:hinge损失函数
:交叉熵(适合分类)
池化意义,降采样:
1、增大感受野
2、平移不变性
3、降低优化难度和参数
4、保留显著特征、降低特征维度
一是,邻域大小受限造成了估计值方差增大;二是,卷积层参数误差造成了估计均值的偏移。
一般来说,在图像研究领域,对图像进行平均池化操作能减少第一种误差,同时更多地保留图像的背景信息;而另一方面,最大池化能减小第二种误差,更多地保留纹理信息。简而言之,池化就是去除杂余信息,保留关键信息
优化算法:
1)梯度下降:每次使用全部数据集进行训练
优点:得到的是最优解
缺点:运行速度慢,内存可能不够
2)随机梯度下降SGM
在随机梯度下降法中每次仅根据一个样本对模型中的参数进行调整
优点:可以一定程度上解决局部最优解的问题
缺点:容易震荡,收敛速度较慢
3)批量梯度下降BGM
优点:容易陷入局部最优解
缺点:收敛速度较快
4)mini_batch梯度下降
假设训练集中的样本的个数为1000,则每个mini-batch只是其一个子集,假设,每个mini-batch中含有10个样本,这样,整个训练数据集可以分为100个mini-batch。
综合随机梯度下降和批量梯度下降的优缺点,提取的一个中和的方法。
优点:训练速度快,无内存问题,震荡较少
缺点:可能达不到最优解
5)牛顿法
牛顿法在迭代的时候,需要计算Hessian矩阵,当维度较高的时候,计算 Hessian矩阵比较困难。
6)拟牛顿法
拟牛顿法是为了改进牛顿法在迭代过程中,计算Hessian矩阵而提取的算法,它采用的方式是通过逼近Hessian的方式来进行求解。
7)momentum
当前权重的改变会受到上一次的影响,带上了惯性,加快收敛速度,极点处会因为惯性震荡。
8)NAG(Nesterov accelerated gradient)
针对8避免震荡。
9)adagrad
自动调节,但是学习率越来越低,速度也越来越慢
10)RMSprop
针对9避免速度越来越慢。
11)adam
GradientDescentOptimizer
神经元初始化Weights和Bias
随机初始化
激活函数:
非线性 – 当激活函数是非线性的时,则可以证明双层神经网络是通用函数逼近器。恒等激活函数不满足这个属性,当多个层使用恒等激活函数连接时,整个网络就近似于一个单层的模型。
值域 – 当激活函数值域是有限的时,基于梯度的训练方法往往更稳定,因为仅影响有限的权重。当范围无限时,训练通常更有效,因为影响大多数权重。在后一种情况下,通常需要较小的学习率。
处处可导性 – 使用基于梯度的优化算法时必须满足处处可导(ReLU不满足条件,但仍然可以用)。
单调性 – 保证单层模型相关联的误差函数是凸函数。
具有单调导数的平滑函数
近似于原点附近的身份 – 激活函数 f(0)=0f(0)=0 ,f'(0)=1f
(0)=1, f’f’在0处连续。
softmax:多分类输出层,计算是每一种分类的概率。onehot编码,曼哈顿距离,欧氏距离。用交叉熵做损失函数
2.1 Sigmoid
优点:能够把输入的连续实值“压缩”到 0 和 1 之间。可用于输出层。
缺点:1. 饱和区(也就是两端)会 kill 梯度(也就是梯度非常小,使得网络难以学习)。
- 输出不是 0 均值
- 运算复杂
2.2 tanh
优点:输出 0 均值,实际表现好于 Sigmoid.
缺点:同 Sigmoid 的 1, 3 缺点
2.3 ReLU
优点:SGD算法的收敛速度快,运算简单
缺点:训练的时候很”脆弱”,很容易就”die”。
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
解决方案是使用较小的学习率。
2.4 Softmax
用于多分类问题的输出层。
常用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全连接层,后者relu常见于卷积层。
tensorbroad可视化
name_space()
summary写入log文件夹
FileWriter
merged:合并所有summary
tensorboard –logdir logs
递归学习RNN
梯度消失:y=x做激活就不会消失,但是误差也不会减少,没意义
梯度爆炸:
LSTM:保留好的特征,消除差的特征,修改权重
隐层单元
连续词袋模型
GPU跑程序
卷积神经网络
定义步长,维度,输入,输出
定义神经元
激活函数
池化
迭代
全连接
迭代
输出
dropout
迭代
权重和偏置
weight和输入层shape一样
bias和y的shape一样
[x,y,in,out]
[out]
卷积层:和multiple相似的函数,做神经元
conv2d(x,W,strides=[1,x,y,1],padding='SAME') 二维卷积操作
x数据,(批次,高,宽,输入通道数)
W滤波器:卷积核[高,宽,输入通道数,输出通道数]
strides:x是x轴的步长,y是y轴的步长。
padding:补全数据类型。
卷积后池化
池化类型:
最大池化max_pool(),[1,x,y,1] x,y窗口大小