TensowFlow神经网络

神经网络介绍
  • 神经网络
    • 在机器学习和认知科学领域,人工神经网络(artificial neural network,缩写ANN),简称神经网络(neural network,缩写NN)或类神经网络,是一种模仿生物神经网络的结构和功能的计算模型,用于对函数进行估计或近似。
  • 神经网络的分类(人工神经网络)
    • 神经网络前身:   单层感知机
    • 基础神经网络:线性神经网络,BP神经网络,Hopfield神经网络等
    • 进阶神经网络:玻尔兹曼机,受限玻尔兹曼机,递归神经网络等
    • 深度神经网络:深度置信网络,卷积神经网络(CNN),循环神经网络,LSTM网络等
  • 神经网络的特点
    • 输入向量的特征数量和输入神经元的个数相同
    • 输出层的神经元数量和种类数量相同
    • 每个连接都有个权重值
    • 同一层神经元之间没有连接
    •  由输入层,隐层,输出层组成
    • 第N层与第N-1层的所有神经元连接,也叫全连接
  • 简单的神经网络模型
    • 神经网络模型示例
      • 输入层、隐层、输出层  (隐层和输出层统称为全连接层)
    • 神经元模型示例
      • 输入向量的特征数量和输入神经元的个数相同
    • 中间层三个神经元的示例
  • 神经网络的组成
    • 结构: 组成神经网络的神经元
    • 激励函数:隐层和输出层节点的输入和输出之间具有函数关系,这个函数称为激励函数
    • 学习规则:学习规则制定了网络中的权重如何随着时间的推进而调整(反向传播算法)
  • TensowFlow提供神经网络功能的主要模块
    • tf.nn:
      • 神经网络相关操作的支持,包括卷积操作(conv)、池化操作(pooling)、归一化、loss、分类操作、embedding、RNN、Evaluation
    • tf.layers:
      • 主要提供的高层的神经网络,主要和卷积相关的,对tf.nn的进一步封装
    • tf.contrib:
      • tf.contrib.layers提供够将计算图中的  网络层、正则化、摘要操作、是构建计算图的高级操作
神经网络前身--感知机
  • 什么是感知机
    • 有n个输入数据,通过权重与各数据之间进行加权求和,求和后的结果经过激活函数结果(0/1),得出输出
    • 很容易解决与、或问题
    • 通过多个感知机,可以将结果分类的区域划分的越来越准确
  • 用模型表示
  • 感知机与逻辑回归的联系和区别
    • 联系: 都可以用来做分类的学习
    • 区别:激活函数不一样,感知机使用的额是sign函数,输出值是0/1,只能判断简单的分类问题, 逻辑回归使用的是sigmid函数, 结果为0-1, 可以预测为某一个分类的准确概率, 更为广泛使用
浅层(单一隐层)神经网络
  • 概念
    • 只有一层隐藏层的神经网络
  • 目标值处理
    • one-hot编码
    • one-hot api介绍
      • 作用:  将一组目标集转化为one-hot编码
      • tf.one_hot(indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None)
        • indices: 数据集标签, 目标值集合
        • depth: 张量的深度,  即类别数
  • SoftMax回归函数
    • 作用: 
      • 将一组结果数据转化为[0, 1] 两个之间的数, 为1的数代表预测结果为该分类
    • 公式
      •  
    • 使用位置
      • 在特征值经过加权和偏置计算后,经过softmax函数, 得到最终预测的概率结果
    • 图示
  • 特征的加权计算
    • tensorflow加权计算api
      • tf.matmul(a, b,name=None)
        • a: 特征值矩阵
        • b: 加权矩阵
  • 损失计算
    •  损失计算-交叉熵损失公式
    • 损失计算api
      • s = tf.nn.softmax_cross_entropy_with_logits(labels=None, logits=None,name=None)     计算交叉熵损失
        • labels:标签值(真实值)
        • logits:样本加权之后的值
        • return:返回损失值列表
    • 损失均值计算api
      • tf.reduce_mean(s)   获取损失的平均值
  • 损失的优化--梯度下降
    •  tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
      • learning_rate:  学习率,一般为
      • minimize(loss):  最小化损失
      • return:  梯度下降op
  • 模型准确性计算
    • equal_list = tf.equal(tf.argmax(y, 1), tf.argmax(y_label, 1))   返回每一行的最大值的索引
    • equal_list = tf.equal(tf.argmax(y, 0), tf.argmax(y_label, 0))   返回每一列的最大值的索引
    • equal_list = tf.equal(tf.argmax(y, 2), tf.argmax(y_label, 2))   返回每行每列的最大值
    • accuracy = tf.reduce_mean(tf.cast(equal_list, tf.float32))
      • y: 预测结果的集合
      • x: 目标集合
  • 神经网络实现流程
    • 1、准备数据
    • 2、全连接结果计算
    • 3、损失优化
    • 4、模型评估(计算准确性)
深层神经网络(卷积神经网络介绍)
  • 概念
    • 深度学习网络与更常见的单一隐藏层神经网络的区别在于深度,深度学习网络中,每一个节点层在前一层输出的基础上学习识别一组特定的特征。随着神经网络深度增加,节点所能识别的特征也就越来越复杂
  • 为什么引入深层神经网络
    • 全连接神经网络具有一定的局限性
    • 当数据的特征特别多的时候, 每一个特征值都会有一个权重, 这时每一个神经元都需要很多个权重值
    • 这样就会很影响资源, 造成资源的浪费, 影响训练
    • 增加隐藏层数, 可以每层逐渐的减少所需权重的数量
  • 什么是卷积神经网络
    • 卷积神经网络,是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。
  • 卷积神经网络的发展历史
  • 卷积神经网络的特点
    • 神经网络(neural networks)的基本组成包括输入层、隐藏层、输出层。
    • 而卷积神经网络的特点在于隐藏层分为卷积层和池化层(pooling layer,又叫下采样层)
  • 卷积神经网络的结构分析
    • 训练结构图
    • 卷积层(CONV): 
      • 卷积层介绍
        • 通过Filter(过滤器)在原始图像上平移来提取并转化特征, 使转化后的特征可以提供给池化层进行数据的池化
      • 卷积层过滤器参数介绍
        • 个数
        • 大小(1*1,3*3,5*5)
        • 步长
        • 零填充
      • 卷积层输出的参数介绍
        • 深度由过滤器个数决定
        • 输出长度和宽度:由filter尺寸和步长决定
    • RELU激活函数
      • 使用Relu函数的优点
        • 第一,采用sigmoid等函数,反向传播求误差梯度时,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多
        • 第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(求不出权重和偏置)
      • 函数图形

    • 激活函数使用api
      • tf.nn.relu(features, name=None)
        • features:卷积后加上偏置的结果
        • return:结果
  • 池化层(POOL):
    • 池化层介绍
      • 通过特征后稀疏参数来减少学习的参数,降低网络的复杂度,(最大池化和平均池化)
      • Pooling层主要的作用是特征提取,通过去掉Feature Map中不重要的样本,进一步减少参数数量。
      • Pooling的方法很多,最常用的是Max Pooling。2*2  2步长
    • 数据的池化过程图例
    • 池化使用api
      • tf.nn.max_pool(value, ksize=, strides=, padding=,name=None)   输入上执行最大池数
        • value:4-D Tensor形状[batch, height, width, channels]
        • ksize:池化窗口大小,[1, ksize, ksize, 1]
        • strides:步长大小,[1,strides,strides,1]
        • padding:“SAME”, “VALID”,使用的填充算法的类型,使用“SAME”
  • 全连接层(FC):
    • 全连接层在卷积神经网络中介绍
      • 前面的卷积和池化相当于做特征工程,后面的全连接相当于做特征加权。最后的全连接层在整个卷积神经网络中起到“分类器”的作用。
  • 卷积神经网络相关参数计算
    • 输入值的体积
      • H1 * W1 * D1
    • 卷积层过滤器四个超参数
      • Filter数量K
      • Filter大小K
      • 步长S
      • 零填充大小P
    • 卷积层过滤器输出体积大小
      • H2 = (H1-F+2P)/S + 1
      • W2 = (W1-F+2P)/S +1
      • D2 = K
  • 数据特征的变化过程
    • 数据在经过多个卷积层后的变化
      • 宽度和高度在缩小, 深度不断的增加(深度和卷积层的过滤器数量相关)
    • 单个卷积层(2个Filter)的过程示例
  • 卷积层的零填充
    • 定义
      • 卷积核在提取特征映射时的动作称之为padding(零填充)
      • 由于移动步长不一定能整出整张图的像素宽度。其中有两种方式,SAME和VALID
    • 两种零填充的方式
      • 1. SAME:越过边缘取样,取样的面积和输入图像的像素宽度一致。
      • 2. VALID:不越过边缘取样,取样的面积小于输入人的图像的像素宽度
    • 卷积网络卷积操作零填充api介绍
      • tf.nn.conv2d(input, filter, strides=, padding=, name=None)    卷计划操作
        • input:给定的输入张量,具有[batch,heigth,width, channel],类型为float32,64
        • filter:指定过滤器的大小,[filter_height, filter_width,in_channels, out_channels]
        • strides:strides = [1, stride, stride, 1],步长
        • padding:“SAME”, “VALID”,使用的填充算法的类型,使用“SAME”。其中”VALID”表示滑动超出部分舍弃,SAME”表示填充,使得变化后height,width一样大
神经网络总结
  • 输入层的矩阵的特征数量和特征的数量(样本的列数)相等
  • 输出层的矩阵的列数与分类数量相等
  • 经过矩阵变换的矩阵: 行数=左矩阵的行, 列数= 右矩阵的列
  • 每个矩阵代表全连接层的一层隐层
  • 矩阵中的每一列代表一个神经元
  • 一个全连接层和一有多个隐层,即多个矩阵
  • 偏置的列数应该等于矩阵的行数

刘小恺(Kyle) wechat
如有疑问可联系博主