2017-06-09 12:06:50 lqfarmer 阅读数 24549

  

    分享一套Stanford University 在2017年1月份推出的一门Tensorflow与深度学习实战的一门课程。该课程讲解了最新版本的Tensorflow中各种概念、操作和使用方法,并且给出了丰富的深度学习模型实战,涉及Word2vec、AutoEncoder、RNN(LSTM,GRU)、Seq2seq with Attention 、Chatbot: Training and Optimizing、以及最近很火的深度强化学习DRL。还邀请了很多学术界和工业界的大牛做讲座。

课程的Schedule and Syllabus地址:Tensorflow for Deep Learning Research

课程相关实战的github地址:chiphuyen/tf-stanford-tutorials

课程在线视频教程地址:youtube.com/watch?

课程完整视频教程下载地址:

链接: pan.baidu.com/s/1dFb4st

抱歉, 链接有问题,回复关键字“tv”即可得到所有资料

密码: 公众号回复“tv”

课程所有的ppt和笔记notes下载地址:

链接: pan.baidu.com/s/1slIzn6

密码: 公众号回复“tp”

附本套视频课程目录,可以参考一下:

LectureJan 13Overview of Tensorflow

Why Tensorflow?

Graphs and Sessions[note]

To doJan 13Check out TensorBoard

LectureJan 18 Operations

Basic operations, constants, variables

Control dependencies

Feeding inputs

TensorBoard

WorkshopJan 20Linear and Logistic Regression

Tensorflow's Optimizers

Example: OCR task on MNIST dataset[note]

A1 releasedJan 20Assignment #1 released[A1 handout]

LectureJan 25

Week 3Structure your TensorFlow model

Example: word2vecSuggested Readings:

A lot. See lecture note

LectureJan 27Managing experiments and process data

Interfaces

Saver object, checkpoints

Example: word2vec

LectureFeb 1

Week 4Convolutional Neural Networks

Guest lecture by Justin Johnson (Stanford Vision Lab)

Example: Neural style translation

LectureFeb 3Convolutional Neural Networks (continued)

Example: Autoencoder

A2 releasedFeb 8Assignment #2 released[A2 Handout]

LectureFeb 8

Week 5Convolutional Neural Networks

Guest lecture by Jon Shlens (Google Brain)

LectureFeb 10Input Pipeline

Discussion of Assignment #2

Style Transfer

Week 6No classTensorFlow Dev Summit

Sign up for campus viewing

LectureFeb 17Midterm discussionNo slides

LectureFeb 22

Week 7Introduction to RNN, LSTM, GRU

Example: Character-level Language Modeling

LectureFeb 24Convolutional-GRU

Guest lecture by Lukasz Kaiser (Google Brain)

LectureMar 1

Week 8Seq2seq with Attention

Example: Chatbot[slides]

A3 releasedMar 2Assignment #3 released[A3 Handout]

[Anonymous Chatlog Donation]

Mar 3No class

Pete Warden: TensorFlow for Mobile Developers

LectureMar 8

Week 9Seq2seq with Attention (continued)

Chatbot: Training and Optimizing

LectureMar 10Reinforcement Learning in Tensorflow

Guest lecture by Danijar Hafner

(co-author of TensorFlow for Machine Intelligence)[slides]

DemoMar 17Chatbot demo


更多深度学习NLP方面应用的经典论文、实践经验和最新消息,欢迎关注微信公众号“深度学习与NLPDeepLearning_NLP”或扫描二维码添加关注。


2018-10-16 10:46:55 weixin_42711936 阅读数 101

本系列专门用来记录我的深度学习历程,其中代码大部分均出自于李金洪老师的《深度学习之TensorFlow》,希望所有机器学习的道友都能有所知、有所得。

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

plotdata = {"batchsize": [], "loss": []}
def moving_average(a, w=10):
    if len(a) < w:
        return a[:]
    return [val if idx < w else sum(a[(idx - w):idx]) / w for idx, val in enumerate(a)]

1.准备数据

train_X = np.linspace(-1, 1, 100)
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3  # 加入噪声

显示模拟数据点

plt.plot(train_X, train_Y, 'ro', label='Original data')
plt.legend()  # 显示图例
plt.show()  # 显示图

2.创建模型

正向搭建模型

X = tf.placeholder("float")#占位符
Y = tf.placeholder("float")

模型参数

W = tf.Variable(tf.random_normal([1]), name="weight")  # W被初始化成[-1,1]的随机数,形状为一维
b = tf.Variable(tf.zeros([1]), name="bias")  # b被初始化为0,形状也为一维

前向结构

z = tf.multiply(X, W) + b

反向搭建模型

cost = tf.reduce_mean(tf.square(Y - z))
learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)  #梯度下降

3.迭代训练模型 初始化所有变量

init = tf.global_variables_initializer()

定义参数

training_epochs = 20
display_step = 2

启动session

with tf.Session() as sess:
    sess.run(init)
    plotdata={"batchsize": [], "loss": []}
# 向模型输入数据
for epoch in range(training_epochs):
    for (x, y) in zip(train_X, train_Y):
        sess.run(optimizer, feed_dict={X: x, Y: y})

    # 显示训练中的详细信息
    if epoch % display_step == 0:
        loss = sess.run(cost, feed_dict={X: train_X, Y: train_Y})
        print("EPOCH:", epoch + 1, "cost=", loss, "W=", sess.run(W), "b=", sess.run(b))
        if not (loss == "NA"):
            plotdata["batchsize"].append(epoch)
            plotdata["loss"].append(loss)

print("Finished!")
print("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), 'W=', sess.run(W), "b=", sess.run(b))

4.训练模型可视化

plt.plot(train_X, train_Y, 'ro', label='Original data')
plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fittedline')
plt.legend()
plt.show()

plotdata["avgloss"] = moving_average(plotdata["loss"])
plt.figure(1)
plt.subplot(211)
plt.plot(plotdata["batchsize"], plotdata["avgloss"], 'b--')
plt.xlabel('Minibatch number')
plt.ylabel('Loss')
plt.title('Minibatch run vs. Training loss')

plt.show()

5.使用模型

print("x=0.2,z=",sess.run(z,feed_dict={X:0.2}))

总结

本次练习是深度学习开头的一个小引例,里面的代码我还没有完全吃透,目前继续往下学习,以后可能会对本章内容进行补充。

2017-07-09 10:53:40 applecore123456 阅读数 3127

图像识别的经典课题

计算机视觉

  • 核心目标:让计算机“看懂”图像内容
  • 问题挑战:
    • 图像包含的信息复杂,充满着简单(颜色、线条、形状等)和复杂(姿势、场景、物体分布等)的元素,难以使用单一知识体系来概括。
    • 图像对于计算机来说,只是独立的像素集合,计算机无法归纳像素之间的关联关系

图像识别课题

Markdown
Markdown

卷积神经网络原理

前深度学习时代

  • 传统机器学习方法
    • 图像预处理:调整大小、调整明暗度、图像降噪、图像增强等
    • 特征提取:手工或利用图像处理算子(如,SIFT、HoG、Sobel等)
    • 归纳识别:SVM、人工神经网络
  • 局限
    • 传统机器学习算法只能得出输入特征与输出标签之间的映射关系
    • 特征选取强烈依赖人类的先验经验和大量实践,可移植程度低
    • 大量特征无法由人类归纳总结

卷积操作(Convolution)

  • 卷积操作简单来说,就是对于图片中的每一个像素点,计算它的邻域像素和滤波器矩阵(卷积核)的对应位置元素的乘积,然后将所有乘积累加,作为该像素位置的输出值,如下图所示。
    @图中的卷积核(Convolution Kernel)是一个浮雕滤波器(Emboss Filter)
  • 卷积操作的动图:http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution
    Markdown
  • 在图像处理中,通常会用到一些经典的卷积滤波器,如低通滤波器、高通滤波器、高斯滤波器,这些滤波器会产生不容的效果,如下图所示。上排三个依次为:原图、低通滤波器(Low Pass Filter)、高斯滤波器(Gaussian Filter),下三排依次为:锐化滤波器(Sharpeness Filter)、边缘检测(Edge Detection)、浮雕滤波器(Embossing Filter。
    Markdown
  • 在线实验,可以自定义卷积核参数测试:https://graphics.stanford.edu/courses/cs178/applets/convolution.html

池化(Pooling)

  • 池化操作
    • 一般有最大池化(max pooling)和平均池化(average pooling)两种操作
    • 通常采用2×2的窗口大小,步长为2,处理完的图像长和宽都是原图的一半
  • 池化的作用
    • 降维
    • 使特征提取具有“平移不变性”(translation invariant)——即使图像有了一定程度的位移,依然可以获得稳定的特征集合。如人脸检测,不会因为由于角度问题导致的五官位置不对应而无法判断是否是同一个人。
      @Max Pooling,可以看到是一个降采样的过程,由4维矩阵变为了2维
      Markdown

ReLU(Rectified Linear Units)

  • 上述提到的卷积操作是一种线性操作,而特征空间映射到另一个特征空间使之线性可分是需要通过非线性变换才能实现,激活函数(activation function)就是一种引入非线性的手段。
  • 在传统神经网络中,常用的激活函数是sigmoid函数,但容易导致“梯度消失”,使得收敛速度慢且不收敛。
  • ReLU的提出就是为了解决梯度消失问题。
  • ReLU计算公式:f(x)=max(0,x)
  • ReLU求导公式:Markdown
    Markdown

多层卷积

  • 深度学习的精髓是利用多层特征组合,将简单的特征组合成复杂的抽象特征。深度卷积网络也是如此,整个网络是由多个特征提取阶段组成。每一个阶段都包括三种操作:卷积、池化和非线性激活函数(ReLU)。这种组合方式能够逼近复杂的非线性模型函数,同时又能够以较简单的方式训练。
  • 如下图所示,多层卷积可以看作一个金字塔结构,随着层次的加深,特征图的尺寸越来越小,但通道个数越来越多。在比较浅的层次(离输入较近的层次),卷积会提取比较细节的特征,而在较深的层次,会将前面的细节特征进行二次提取和组合,相当于观察的视野变大,就能提取更完整、更加抽象的特征。最终由全连接层和分类器按照提取的特征进行分类。
    Markdown

Dropout

  • Dropout是一种防止过拟合的手段。过拟合是指训练结果在训练集与测试集性能表现差距非常大的情况,即在训练集上能够得到很高的精度,但由于过度拟合,使得模型泛化性能不足,在测试集上的性能变差。
  • 操作:在每次训练中,随机让一部分隐层节点失效,可以达到改变网络结构的目的,但保留每个节点的权值。在预测时,打开全部隐层节点,使用完整的网络进行计算,相当于把多个不同的网络组合在一起,达到集成学习(ensemble)的目的。
  • 作用:削弱节点的共同作用,防止过拟合
    Markdown

经典模型介绍及TensorFlow代码解析

AlexNet: 震惊世界的突破

Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. “Imagenet classification with deep convolutional neural networks.” Advances in neural information processing systems. 2012. [PDF]

  • 背景:
    • LeNet + MNIST 成为 Deep Learning 界的 “Hello World”
    • 传统图像识别技术陷入瓶颈
  • ILSVRC 2012 图像分类第一名
    • Top-5 错误率 15.3%(第二名错误率 26.2%)
  • 关键点及意义
    • 验证了深度学习的威力,开启深度学习时代
    • 使用 ReLU 替代 sigmoid,加速计算
    • 使用 Dropout 技术,防止过拟合(overfitting)
    • 提出GPU训练&分布式并行训练,降低训练时间
      Markdown

VGGNet:更深的结构更优秀

Simonyan, Karen, and Andrew Zisserman. “Very deep convolutional networks for large-scale image recognition.” arXiv preprint arXiv:1409.1556 (2014). [PDF]

  • VGGNet 是基于 AlexNet 的改进
  • ILSVRC 2014 图像分类第二名、图像定位第一名
    • 图像分类 TOP-5 错误率 7.4%
    • 图像定位错误率 25.3%
  • 关键点及意义
    • 发现更“深”的网络,能达到更高的识别准确率
    • 全部使用3×3的卷积核,有效减少参数个数,加深网络深度,计算代价更小收敛速度更快
      @AlexNet、VGG16和VGG19网络结构对比
      Markdown

GoogLeNet & Inception: 更全面的结构更优秀

GoogLeNet

Szegedy, Christian, et al. “Going deeper with convolutions.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015. [PDF]

  • ILSVRC 2014 图像分类第一名
    • 图像分类 TOP-5 错误率 6.6%
  • 关键点及意义
    • 最优局部结构(如下图),通过增加“宽度”的方式增加网络的复杂度。
    • 1×1卷积核有效降维。AlexNet 有 6000W 参数,VGGNet 是 AlexNet 的三倍,GooLgeNet 只有 500W 参数
    • 模型计算量更小,速度更快
  • GoogLeNet 的 Block 结构
    • 在每一个卷积层中,并行使用 1X1 卷积、3X3 卷积和 5X5 卷积,同时提取不同尺度的特征,然后通过 1X1 卷积对每一个分支进行降维(降低的是channel的维度)。
      @GoogLeNet 中的 Block 结构
      Markdown
      @完整的GoogLeNet模型结构
      Markdown
Inception-V2:加入Batch Normalization

Ioffe, Sergey, and Christian Szegedy. “Batch normalization: Accelerating deep network training by reducing internal covariate shift.” arXiv preprint arXiv:1502.03167 (2015). [PDF]

  • 图像分类 TOP-5 错误率 4.9%,TOP-1 错误率 20.1%
  • Batch Normalization
    • 操作:将batch中的所有数值转换为 mean=0,variance=1 的正态分布
    • 原因:
      • 由于 mini-batch 样本数太少,所以每一个 mini-batch 内的实际分布都各不相同,在梯度计算的时候会导致梯度方向不停变化(就像下山走Z字形),导致收敛速度减慢。
      • 标准化后,保证数据分布始终一致,保留数值之间的相对差距,忽略绝对差距,在识别任务上会有更好的表现。
Inception-V3:重新思考 Inception 结构

Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking the Inception Architecture for Computer Vision[C]. computer vision and pattern recognition, 2015. [PDF]

  • 图像分类 TOP-5 错误率 3.58%,TOP-1 错误率17.2%
  • 关键点及意义
    • 将卷积操作继续分解成更小的卷积核
    • 用2层 3X3 卷积替代 5X5 卷积
    • 用 1X3 和 3X1 两个卷积核替代 3X3 卷积核
    • 加深网络层次,减少模型参数,减少计算,提高准确率
      @将卷积操作分解成更小的卷积核
      Markdown
      @左:1X3 和 3X1 的卷积核替代 3X3,右:2层 3X3 的卷积核替代 5X5 的卷积
      Markdown

ResNet:飙升的深度

He, Kaiming, et al. “Deep residual learning for image recognition.” arXiv preprint arXiv:1512.03385 (2015).[PDF]

  • 深度网络的退化问题
    • VGGNet 证明了加深网络层次是提高精度的有效手段,但是由于梯度弥散问题,导致网络深度有限,即深度越深反而效果下降。
      • 残差块(Residual Block)
    • 将 H(x) 的求解过程,转化为H(x) = F(x) + x,通过短路的形式更好的传递梯度
      Markdown
  • ILSVRC 2015 图像分类第一名
    • 图像分类 TOP-5 错误率 3.57%
  • 关键点及意义
    • 残差结构解决深度网络的退化问题(degradation problem)
    • 模型深度越深,识别更准确
    • 参数更少,计算速度更快
    • 目前主流的图像识别模型
      @34层ResNet跟34层plain网络及VGG-19结构对比
      Markdown

上述模型的图形化对比


感谢《深度学习基础与TensorFlow实践》课程主讲王琛老师的讲解
Edited by @AppleCore_Q | http://blog.csdn.net/applecore123456

深度学习书籍

阅读数 709

没有更多推荐了,返回首页