BP神经网络,正向传播求损失,反向传播求误差。
caffe的fine-tuning: 就是把现成的模型略加修改然后再作少量training,主要用于样本数量不足的情形。
**层点进点出,逐点计算,维度不会改变
pytorch最重要是把class完成(网络结构、前向运算),然后定义损失函数、优化器,for循环计算loss。
content loss 欧式距离
tf.placeholder
tf.Variable
op(操作符/算子)
图,session中跑流程
softmax就是如果某一个zj大过其他z,那这个映射的分量就逼近于1,其他就逼近于0,主要应用就是多分类,sigmoid函数只能分两类,而softmax能分多类,softmax是sigmoid的扩展。
损失函数(hinge loss/支持向量机损失、交叉熵损失)
线性分类器的理解:模板匹配
神经元感知器
激励层
端到端指的是输入是原始数据,输出是最后的结果,原来输入端不是直接的原始数据,而是在原始数据中提取的特征,这一点在图像问题上尤为突出,因为图像像素数太多,数据维度高,会产生维度灾难,所以原来一个思路是手工提取图像的一些关键特征,这实际就是就一个降维的过程。
端到端强调中间不用手工干预
做了一些前置处理的,就不是end-to-end了。比如去噪、平滑、显著性提取、分割、去色等等。还比如提取过特征,将特征作为输入的,也不是end-to-end,比如提取个SIFT、RGB值什么的。
将原始图片直接作为输入的,将物理系统需要的调节参数作为输出的,才是端到端。(例如将车辆速度、转角作为输出)
深度学习中的Batch Normalization
BN就是在神经网络的训练过程中对每层的输入数据加一个标准化处理。
BN通过规范化输入数据改变数据分布,在前传过程中消除梯度弥散。
比如你要研究一个新的模型,你是在前人的模型基础上新增加了一些组件,别人也基本都是在这个模型上进行修改,那这个模型就叫做baseline model——基准模型。听名字就能听出来,就是你自己模型的一个基准,一个基本的框架,模型再复杂,最根本的框架是差不多的。比如序列标注任务baseline基本是BILSTM+CRF,大多数人都是在这基础上增改,加些Char-CNN,Attention机制之类的。
神经网络单隐层可以逼近任何连续函数单隐层交 多隐层or
softmax函数
数据格式(data_format)
目前主要有两种方式来表示张量:
a) th模式或channels_first模式,Theano和caffe使用此模式。
b)tf模式或channels_last模式,TensorFlow使用此模式。
下面举例说明两种模式的区别:
对于100张RGB3通道的16×32(高为16宽为32)彩色图,
th表示方式:(100,3,16,32)
tf表示方式:(100,16,32,3)
唯一的区别就是表示通道个数3的位置不一样。
张量(tensor),可以看作是向量、矩阵的自然推广,用来表示广泛的数据类型。张量的阶数也叫维度。
0阶张量,即标量,是一个数。
1阶张量,即向量,一组有序排列的数
2阶张量,即矩阵,一组向量有序的排列起来
3阶张量,即立方体,一组矩阵上下排列起来
4阶张量......
依次类推
重点:关于维度的理解
假如有一个10长度的列表,那么我们横向看有10个数字,也可以叫做10维度,纵向看只能看到1个数字,那么就叫1维度。注意这个区别有助于理解Keras或者神经网络中计算时出现的维度问题。
Dense(500,input_shape=(784,))
a)Dense层属于网络层-->常用层中的一个层
b) 500表示输出的维度,完整的输出表示:(*,500):即输出任意个500维的数据流。但是在参数中只写维度就可以了,比较具体输出多少个是有输入确定的。换个说法,Dense的输出其实是个N×500的矩阵。
c)input_shape(784,) 表示输入维度是784(28×28),完整的输入表示:(*,784):即输入N个784维度的数据
shenji