斯坦福大学公开课 视觉识别卷积神经网络

课程简介

ImageNet Challenge.

计算机视觉已经变得普适了,在我们的社会中应用,如搜索、图像理解、APP、地图、医疗、无人机和自动驾驶。这些应用中的很多核心都是视觉识别方面的任务,例如图像分类、定位和识别。

学习本课程的预备知识

  • Proficiency in Python, high-level familiarity in C/C++(语言:熟练使用Python,以及高级水平的C/C++)

    所有的课程任务将会以Python的形式(而且要使用numpy)(我们会提供一个教程供不熟悉Python的人学习),但是后面某些课程的深度学习类库是以C++的形式写成的。所以,如果你有很多的编程经验但是是其他语言的(如C/C++/Matlab/Javascript)你可能也可以胜任这些任务。

  • College Calculus, Linear Algebra (e.g. MATH 19 or 41, MATH 51) 大学微积分,线性代数

    你应该对求导很熟悉,并且理解矩阵向量操作和符号。

  • Basic Probability and Statistics (e.g. CS 109 or other stats course)基本的概率统计方面的知识

    你应该知道基本的概率、高斯分布、平均值和标准差。

  • Equivalent knowledge of CS229 (Machine Learning)对CS229(机器学习)有相当的了解

    We will be formulating cost functions, taking derivatives and performing optimization with gradient descent. 我们将会使用梯度下降法建立成本函数,求标准差以及进行最优化。

http://cs231n.stanford.edu/syllabus.html

视频教程链接:YoutubeB站

课程Notes:2017年

代码:链接

Lecture 1:Introduction to Convolutional Neural Networks for Visual Recognition(用于视觉识别的卷积神经网络简介)

80%的网络流量都是图像,但是图像又是网络中的暗物质。如何能够理解图像是一件很重要的事情,YouTube上每秒钟上传的视频多达分钟,就算YouTube有很多员工那也很难一个一个看完整个视频。

Lecture 2: Image Classification(图像分类)

Lecture 3:Loss Functions and Optimization(损失函数和最优化)

Lecture 4:Introduction to Neural Networks(神经网络简介)

Lecture 5:Convolutional Neural Networks(卷积神经网络)

Lecture 6:Training Neural Networks I(训练神经网络I)

#assume some unit gaussian 10-D input data假设一些单位的高斯10-维输入数据
D = np.random.randn(1000, 500) #1000*500的随机初始化矩阵
hidden_layer_sizes = [500]*10 #隐藏图层尺寸 10个图层 每个图层有500个神经元
nonlinearities = ['tanh']*len(hidden_layer_sizes) #非线性=['tanh']*len([500]*10)

act = {'relu':lambda x:np.maximum(0,x), 'tanh':lambda x:np.tanh(x)} #行动{'relu':lambda x=max(0,x), 'tanh':lambda x=tanh(x)}
Hs = {}
for i in xrange(len(hidden_layer_sizes)):
  X = D if i == 0 else Hs[i-1] #input at this layer 输入该图层的数据(当i=0时X=D,否则更新为X=Hs[i-1])
  fan_in = X.shape[l] #输入_fan
  fan_out = hidden_layer_sizes[i] #输出_fan
  W = np.random.randn(fan_in, fan_out)*0.01 #layer initialization

  H = np.dot(X, W) #matrix multiply
  H = act[nonlinearities[i]](H) #nonlinearity
  Hs[i] = H #cache result on this layer

  #look at distributions at each layer
  print 'input layer had mean %f and std %f' % (np.mean(D), np.std(D))
  layer_means = [np.mean(H) for i,H in Hs.iteritems()]
  layer_stds = [np.std(H) for i,H in Hs.iteritems()]
  for i,H in Hs.iteritems():
    print 'hidden layer %d had mean %f and std %f' % (i+l, layer_means[i], layer_stds[i])

  #plot the means and standard deviations
  plt.figure()
  plt.subplot(121)
  plt.plot(Hs.keys(), layer_means, 'ob.')
  plt.title('layer mean')
  plt.subplot(122)
  plt.plot(Hs.keys), layer_stds, 'or-')
  plt.title('layer std')

  #plot the raw distributions
  plt.figure()
  for i,H in Hs.iteritems():
    plt.subplot(l, len(Hs), i+l)
    plt.(H.ravel(), 30, range(-1,1))

Lecture 7:Training Neural Networks II(训练神经网络II)