CS231n
计算机视觉历史回顾与介绍
第一课时:
  深度神经网络:卷积神经网络
  计算机视觉是跨学科的领域
  NLP 自然语言处理
  生物进化出眼睛
  相机的出现
  基础视觉皮层(处理视觉)
第二课时:
  通过实验发现,视觉处理的第一步是对简单的形状结构处理
  简单的边缘结构,边缘决定了结构
  (论文)block world
  CVPR,ICCV
  分层的模型
  感知分组
  人脸检测,富士山相机的人脸检测-2006年
第三课时:
   ImageNet(5000万张,2万个分类)
   ImageNet 挑战赛(针对ImageNet的计算机视觉竞赛)
   2012年卷积神经网络的运用,赢得了ImageNet挑战赛
   特征加支持向量机的结构
   MSRA(残差神经网络)
   对深度学习起了很大的推动作用(GPU,Big Data)
数据驱动的图像分类方式
第四课时:
   线性分类器
   对不同场景具有鲁棒性
   分类问题的复杂性
   进邻算法分类器
   k邻近,k变大图像分类变平滑,效果变好。
   欧式距离,曼哈顿距离
   分类器的泛化验证
第五课时:
   输入一张图像,输出与10个类相对应的数值。
   线性分类器,就是得到最合适的W和B(W是系数,B是独立的权重参数)
   改变每一张图的大小,使他们变成同等大小,就可以转化成长度相同的列向量
   最先进的方法是使用的方形图片
   对权重矩阵W的理解,类似模式匹配
   分类器对图片做了混合变成单个模型,所以会出现双头马,不同角度的汽车重合。
   损失函数,对于一个确定的分类器W,在我们的测试中得到的结果有多坏。
   对于汽车颜色细节识别,引入了神经网络。
线性分类器损失函数与最优化
第六课时:
   多类SVN损失,SVN(向量机)
   SVN损失函数的计算公式:$L_i=\sum_{j!=y_j}max(0,s_j-s_y_j+1)$,这里的1叫做安全系数
   $L = 1/N\sum_{i=1}^{N}L_i$
   正则化,正则化是权衡你的训练损失和你用于测试集的泛化损失
   L2正则化考虑了X要素中的大部分东西,尽可能的展开w的权重
   SVN和softmax分类器,softmax又叫逻辑斯蒂回归
   softMax:$L_i=-log(\frac{e^{s_y_i}}{\sum_{j}e^{s_j}})$
第七课时:
   SoftMax会考虑每一个样例点,SVN对离边界点近的样例点敏感,对离边界点远的样例点不敏感
   线性分类损失可视化:http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/
   多维度的梯度
   步长和权重的正则化参数lambda是需要关注的两个关键点。
   mini-batch,取和GPU或者CPU内存匹配的大小的batch的数据来估测梯度。
   SGD
   while True:
     data_batch = sample_training_data(data, 256) #sample 256 examples
     weights_grad = evaluate_gradient(loss_fun,data_batch,weights)
     weights += -step_size*weights_grad #perform prameter update
   不同的学习速率导致了最终学习结果的好坏(想象成寻找大盆地的最低点)
反向传播与神经网络初步
第八课时:
   计算图,反向传播算法
   链式法则,将局部梯度和最后输出结果的梯度相乘
   前向和反向花的时间基本上是一样的,通常反向慢一些。
   BP的拆分力度,S门
   对于最大值门,Max(x,y),反向传播时较小的梯度为0,较大的梯度是传播过来的梯度
   乘法门的实现
   class MultiplyGate(object):
     def forward(x,y):
    z = x*y;
    self.x = x #must keep these around!
    self.y = y
        return z;
     def backward(dz)
    dx = self.y * dz;#[dz/dx*dL/dx]
    dy = self.x * dz;#[dz/dy*dL/dz]
        return [dx, dy]
第九课时:
   本地梯度原本是标量现在是雅克比矩阵:表示X中每个元素对Z中每个元素的影响。
   并不需要计算雅克比矩阵,层和层之间的交流是通过向量,除非是输出多重才用雅克比矩阵,我们最终输出是一个数
   神经网络,汽车模型,隐藏层。


import numpy as np
# sigmoid function
def nonlin(x,deriv=False):
    if(deriv==True):
        return x*(1-x)
    return 1/(1+np.exp(-x))
 
# input dataset
X = np.array([  [0,0,1],
                [0,1,1],
                [1,0,1],
                [1,1,1] ])
 
# output dataset            
y = np.array([[0,0,1,1]]).T
 
# seed random numbers to make calculation
# deterministic (just a good practice)
np.random.seed(1)
 
# initialize weights randomly with mean 0
syn0 = 2*np.random.random((3,1)) - 1
 
for iter in xrange(10000):
    # forward propagation
    l0 = X
    l1 = nonlin(np.dot(l0,syn0))
 
    # how much did we miss?
    l1_error = y - l1
 
    # multiply how much we missed by the
    # slope of the sigmoid at the values in l1
    l1_delta = l1_error * nonlin(l1,True)
 
    # update weights
    syn0 += np.dot(l0.T,l1_delta)
print "Output After Training:"
print l1

http://python.jobbole.com/82758/


   
想要课件的可以把邮箱留下。不方便公开。