神经网络是一种模仿生物神经网络结构和功能的计算模型,用于对函数进行估计或近似,它能在外界信息的基础上改变内部结构,是一种自适应系统,即具备学习功能。当前,神经网络用于机器视觉、语音识别等很难被传统基于规则的编程所解决的问题。
本课程首先介绍了什么是TensorFlow以及如何在Linux、MacOS和Windows系统上安装它,接着讲解了TensorFlow相关的基础知识,比如:处理结构、会话控制、变量、传入值、激励函数等;然后展示了如何建造神经网络,包括添加神经层、建造、结果可视化等步骤,同时还展示了优化器optimizer和可视化工具Tensorboard的用法;最后是神经网络相关的高阶内容,包括:过拟合及缓解、卷积神经网络CNN、循环神经网络RNN、自编码AutoEncoder、批标准化、迁移学习等知识点。
【课程目标】
了解神经网络及TensorFlow
掌握如何使用TensorFlow建造神经网络
了解卷积神经网络、循环神经网络、迁移学习等概念
【适用对象】
AI开发者、学生
腾讯云旗下面向云生态用户的一站式学习成长平台
TensorFlow是谷歌开发的一款神经网络的Python外部的结构包,直接用TensorFlow就可以很快速的入门神经网络。所有TensorFlow的信息,你都可以在百度或者谷歌搜索TensorFlow获得相关信息。
使用pip在每个系统的安装方式:
如果还没有安装,可以在Terminal窗口运行
CPU版,执行如图语句。
GPU版,像找到合适自己版本的安装文件,根据自己的Python版本,执行如图语句。
TensorFlow中的input layer层是所有的相片或者数据输入等资料;output layer层是判断这些资料是什么,代表了什么。举例说明,其中X代表一串数字,Y代表一个函数。
TensorFlow底层的结构即神经网络结构,包含输入层、隐藏层、输出层。输入层可以包含x-input和y-input。隐藏层可以包含weights、blases、激励函数。TensorFlow做的第一步就是建立一个结构,然后将数据放到结构中,让TensorFlow自己运行。
该实例的结构目的为输出每一次训练之后后,其参数是多少。
Session是对话的控制。我可以用session.run来执行创建好的结构上的某一个点的功能。
TensorFlow中定义变量和Python中定义变量有所不同。需要使用session.run初始化所有的变量才会在TensorFlow中激活。
placeholder是在开始是先hold住类似变量的东西,到session.run时,值要从外界传入进来,把placeholder填进去。
激励函数是让某一部分的神经元先激活,然后将激活的消息传入到后面神经系统中。激励函数其实就是一些方程,比如Linear function、Step function、Ramp function,以及非线性方程。TensorFlow中的激励函数是activation function。如果你想知道有哪些activation function,可以在百度或谷歌中搜索TensorFlow activation function,打开TensorFlow链接即可查看Neural Network下的activation function,如tf.nn.relu(features,name=None)、tf.nn.softplus(features,name=None)、tf.nn.dropout(x,keep_prob,noise_shape=None,seed=None,name=None)等等。
在TensorFlow中需要制作的层layer1、layer2两个层。它们内含很多东西,如weights、biases等。
相关代码和讲解请在视频内查看详细演示。
为了更直观的了解神经网络如何优化的,我们需要将其变成可视化。其中结果可视化的模块为matplotlib.pyplot,可以提前下载。
TensorFlow中的优化器有很多不同的种类,其中最基本的一种叫GradientDescentOptimizer。GradientDescent是机器学习中最为重要和基础的线性优化。GradientDescent实际上取决于的是Data的大小和类型。除此之外,还有AdadeltaOptimizer、AdagradOptimizer、MomentumOptimizer、AdamOptimizer、FtrlOptimizer、RMSPropOptimizer等。这几种Optimizer都是基于对其学习效率的改变,如MomentumOptimizer考虑的不仅仅这一步的学习效率,还考虑上一步的学习效率,因此会比AdagradOptimizer更快达到全局最小量。
如果是初学者,建议使用GradientDescentOptimizer。更高级的学习者,可以考虑使用MomentumOptimizer、AdamOptimizer,或者RMSPropOptimizer。
使用TensorFlow自己提供的Tensorboard可以很直观的看到整个TensorFlow的神经网络的框架结构。这个结构分成input层、隐藏层layer、计算loss。其中隐藏层包括权重、偏差、计算;input层包括x-input和y-input。
继续介绍TensorFlow的Tensorboard如何可视化整个神经网络的建造过程和训练过程。
Classification用于分类,之前的所有例子都为线性回归。线性回归为预测的值是连续分布的值,但是如果是Classification则是将值进行分类。TensorFlow中有5万多个数据图片,这些图片都是以28✖28=784个数据点的形式被计算机读取。放在TensorFlow中,784则为x输入的参数,y则为矩阵,用1在矩阵中的不同位置代表分类。
在机器学习中,overfiting是一个非常常见的问题。如图所示正常情况下黑色曲线会明显区分两个区域,但是如果机器学习过度精准学习,就会将原本在红色中的蓝色也被囊括在其中,即overfiting。在图中,绿色的曲线则为overfiting。为了让机器学习呈现为黑色曲线,可以使用dropout。
CNN卷积神经网络是计算机视觉处理飞跃的提升。CNN会将图片中的长、宽、RGB,即图片厚度进行压缩,具体操作为将长宽压小,RGB增大。从图中抽取小部分PATCH进行分析,抽取时有一个参数STRIDE,即每一次跨多少像素点抽取。最终将抽取的部分组合起来,称为PADDING。PADDING分为VALID PADDING,即抽取部分比原先的宽和长裁剪了、SAME PADDING,即抽取部分和原先的长宽相同。为了避免重要信息的丢失,可以使用POOLING方法。POOLING分为MAX POOLING和MEAN POOLING。CNN的整体结构如图所示。
相关代码和讲解请在视频内查看详细演示。
相关代码和讲解请在视频内查看详细演示。
相关代码和讲解请在视频内查看详细演示。
如果数据是按照顺序排列的,即可使用RNN。RNN与CNN做的事情相同,只不过RNN在时间顺序上有所不同。RNN通过对每一个输入值保有记忆,以次对下一个内容进行预测。在预测下一个内容是,需要回顾之前的记忆有哪些,加上现在新的记忆,输出内容。
神经网络中可能存在两个问题,即Gradient Vanishing和Gradient Exploding。如果序列很长,RNN在反向传递时则有可能传不到最开始的地方,则会产生梯度消失或梯度爆炸两个问题。这时候就有了Long Short-term Memory,即LSTM。
相关代码和讲解请在视频内查看详细演示。
相关代码和讲解请在视频内查看详细演示。
相关代码和讲解请在视频内查看详细演示。
Autoencoder就是把数据feature压缩解压缩,属于非监督学习。
有两种方式,分别为tf.get_variable、tf.Variable。
Batch normalization是对每一层神经网络层做normalization处理。为了有效地传递信息,对数据预处理,可以进行normalization。没有用BN时,每层的值迅速变为0,即所有神经元都已经死了。而有了BN,relu过后,每层的值都能有一个比较好的分布效果。
版本更新后不同功能的更新和优化,请在视频内查看详细介绍。
TensorFlow可以用于可视化梯度下降,以及对以前公式的调参。本小节也将介绍全局最优和局部最优,如果你对全局最优不是很了解,可以进入莫烦PYTHON中进行相关学习。
神经网络中的CNN和RNN都有非常庞大的系统,其中参数庞大,单是训练这些系统都需要花费非常多的时间,所以需要使用迁移学习。迁移学习的目的就在于节约时间,不做重复性工作。本小节介绍的迁移VGG参考machrisaa改写的VGG16的代码,可以在莫烦PYTHON中下载相关参数。
本节课所有相关代码:https://github.com/MorvanZhou/PyTorch-Tutorial
课程学习交流
请扫码关注腾讯产业互联网学堂微信公众号