首页 AI学术青年与开发者社区

【中文字幕】2017春季CS231n 斯坦福深度视觉识别课

开课时间:2017年11月10日
开课时长:讲座共有6个lecture,3个 Guest Talk,已完结。加入小组即可立即观看(完全免费):https://ai.yanxishe.com/page/groupDetail/19。
免费课 基础入门
现价: 免费
该课程已关闭

神经网络训练太耗资源,怎么尽可能节省成本?就是让模型变小
 
高效推断的算法
1、pruning剪枝。通过剪枝去除多余参数,即去掉多余的神经元,然后重新训练,不断重复,你可能在修剪90%的权重后,准确率还能回复到原先水平。但是过度修剪,程序可能懵逼,视具体情况而定。迭代训练时,权重可以重置为0。
2、weighing sharing权值共享。通过K均值聚类简化相似权重,去掉小数,不是所有的权重都需要进行高精度存储。实验证明,卷积层参数在4bits以下准确率才会明显降低,FC在2bits以下准确率会明显降低。
(以上两种方法结合使用能使模型达到更高的压缩比。常见经典CNN网络都可以在不减少准确率的情况下压缩至几M内,压缩后,CPU、GPU、mGPU速度一般至少能彪升三至六倍。如何不使用以上处理方式,而是直接搭建一个精简模型呢?SqueezeNet。)
3、quntization,量化。TPU都是使用8bits来进行推断的。如何确定位数的?统计一个常规方法训练的NN的所有层,最大值与最小值分布多少,然后将32bits调整为合适的位数。TPU,实验证明,位数下降到8bits以下,准确率才会明显下降
4、low rank approximation,低秩近似。
5、Binary / Ternary Net
6、Winograd Transformation
 
高效推断的硬件
 
高效训练的算法
1. Parallelization 并行化。深度学习可以数据并行化、模型并行化
2. Mixed Precision with FP16 and FP32 混合精度训练,同时使用32和16bits
3. Model Distillation 模型蒸馏
4. DSD: Dense-Sparse-Dense Training 密疏密训练,或者称为更好的正则化训练技术
 
高效训练的硬件
[展开全文]

import numpy as np np.random.seed(0) N,D=3,4 x=np.random.randn(N,D) y=np.random.randn(N,D) z=np.random.randn(N,D) a=x*y b=a+z c=np.sum(b) grad_c=1.0 grad_b=grad_c*np.ones((N,D)) grad_a=grad_b.copy() grad_z=grad_b.copy() grad_x=grad_a*y grad_y=grad_a*x

[展开全文]

challenges:

  • viewpoint variantion
  • illumination(照明)
  • deformation(可变形性)
  • occlusion(遮挡)
  • background clutter(物体和背景难以区分)
Data-Driven Approach
NN-L1 distance
KNN-take vote(the larger value of k, the more smooth of decision boundaries)
 
 
 

 

[展开全文]

CS331  and  CS431 for advanced topics in computer vision

[展开全文]
# Vanilla Gradient Descent while True: weights_grad=evaluate_gradient(loss_fun,data,weights) weights+=-step_size*weights_grad # perform parameter update # Adam (almost) first_moment=0 second_moment=0 while True: dx=compute_gradient(x) first_moment=beta1*first_moment+(1-beta1)*dx second_moment=beta2*second_moment+(1-beta2)*dx*dx x-=learning_rate*first_moment/(np.sqrt(second_moment)+1e-7) while True: data_batch=dataset.sample_data_batch() loss=network.forwadr(data_batch) dx=network.backward() x+=-learning_rate*dx x_test=0.995*x_test+0.005*x # use for test set
[展开全文]

# Double check taht the loss is reasonable: def init_two_layer_model(input_size,hidden_size,output_size): # initialize a model model={} model['W1']=0.0001*np.random.randn(input_size,hidden_size) model['b1']=np.zeros(hidden_size) model['W2']=0.0001*np.random.randn(hidden_size,output_size) model['b2']=np.zeros(output_size) return model model=init_two_layer_model(32*32*3,50,10) #input size,hidden size,number of classes loss,grad=two_layer_net(X_train,model,y_train,0.0) # 0.0 denotes disable regularization print loss """ 如果我们加上了正则项,loss会变大一点,这是完整性 """ """ 往往需要先确保可以过拟合非常小部分的训练数据""" model=init_two_layer_model(32*32*3,50,10) # trainer=ClassfierTrain() X_tiny=x_train[:20] # take examples y_tiny=y_train[:20] best_model,stats=trainer.train(X_tiny,y_tiny,X_tiny,y_tiny, model,two_layer_net, num_epochs=200,reg=0.0, updat='sgd',learning_rate_decay=1, sample_batchs=False, learning_rate=1e-3,verbose=True)

 

1. loss not going down:

learning rate too low

2. 即使损失没怎么变化,但正确率却很快上升到了20%,为什么?

虽然这里的分布依然很分散,因为我们的损失项很接近,但是当我们移动这些分布时,都朝着正确的方向在轻微的移动,我们的权重参数在朝着正确的方向改变,现在准确率可能发生突变,因为我们正选取最大的准确率,所以准确率会得到一个很大的提升,虽然损失还是很分散。

3.loss exploding:

learning rate too high

 

 

[展开全文]
# Double check taht the loss is reasonable
[展开全文]

http://cs.standard.edu/people/karpathy/convnetjs/demo/cifar10.html

[展开全文]

import numpy as np from numpy.random import randn N,D_in,H,D_out=64,1000,100,10 x,y=randn(N,D_in),randn(N,D_out) w1,w2=randn(D_in,H),randn(H,D_out) for t in range(2000): h=1/(1+np.exp(-x.dot(w1))) y_pred=h.dot(w2) loss=np.square(y_pred-y).sum() print(t,loss) grad_y_pred=2.0*(y_pred-y) grad_w2=h.T.dot(grad_y_pred) grad_h=grad_y_pred.dot(w2.T) grad_w1=x.T.dot(grad_h*h*(1-h)) w1-=1e-4*grad_w1 w2-=1e-4*grad_w2 class Neuron: # ... def neuron_tick(inputs): """ assume inputs and weights are 1-D numpy arrays and bias is a number""" cell_body_sum=np.sum(inputs*self.weights)+self.bias firing_rate=1.0/(1.0+math.exp(-cell_body_sum)) return firing_rate # forward-pass of a 3-layer neural network: f=lambda x:1.0/(1.0+np.exp(-x)) x=np.random.randn(3,1) h1=f(np.dot(W1,x)+b1) h2=f(np.dot(W2,h1)+b2) out=np.dot(W3,h2)+b3

[展开全文]
张广慧 · 2018-08-14 · 4.2 神经网络 0

交叉验证 超参数

线性分类

损失函数 

[展开全文]

相关课程

开课日期:直播已结束,可回看开始
智能驾驶 基础入门 87051
开课日期:开始
机器学习 基础入门 111844

授课教师

暂无教师
微信扫码分享课程