神经网络 订阅
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。 [1] 展开全文
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。 [1]
信息
简    称
神经网络(NNs)
应用学科
通信
中文名
神经网络
外文名
neural networks
神经网络定义
生物神经网络主要是指人脑的神经网络,它是人工神经网络的技术原型。人脑是人类思维的物质基础,思维的功能定位在大脑皮层,后者含有大约10^11个神经元,每个神经元又通过神经突触与大约103个其它神经元相连,形成一个高度复杂高度灵活的动态网络。作为一门学科,生物神经网络主要研究人脑神经网络的结构、功能及其工作机制,意在探索人脑思维和智能活动的规律。人工神经网络是生物神经网络在某种简化意义下的技术复现,作为一门学科,它的主要任务是根据生物神经网络的原理和实际应用的需要建造实用的人工神经网络模型,设计相应的学习算法,模拟人脑的某种智能活动,然后在技术上实现出来用以解决实际问题。因此,生物神经网络主要研究智能的机理;人工神经网络主要研究智能机理的实现,两者相辅相成。 [2] 
收起全文
精华内容
参与话题
问答
  • 1、神经网络简介 2. 卷积神经网络

    1、神经网络

    神经网络简介

            神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。神经元为神经网络中的基本组成单位,

            下图为单个神经元的图片,如图所示,每个神经元的输入包含多个变量x1——xn以及一个偏置值b,同时输出h(x) = f(w1*x1+w2*x2+w3*x3+b),f(x)称激活函数。激活函数是用来加入非线性因素的,因为线性模型的表达能力不够(若采用性激活函数,将网络的多层展开,会发现都只是相当于一层的结果)。


    常见的激活函数有sigmoid函数,双曲正切函数,其函数图像如下图所示。

    神经网络模型

            将许多神经元连接在一起,某些神经元的输出为另一些神经元的输入,就可以构成神经网络。如下图,为一个简单的三层神经网络。



            图中每一个圆代表一个神经元的输入,写有b的圆代表偏置项。图中最左边的层称为输入层,我们图中的神经网络有三个输入单元。最右边一层成为输出层,输出层可以有一个结点,也可以有多个结点,表示整个网络的输出。其他中间的层成为隐含层。  

            我这里用ali表示第l层第i个单元的激活值,即a22表示第二层第二个神经元的激活值;用Wijl表示第l层第i个神经元和第l+1层第j个神经元之间的连接参数;用bl表示第l层的偏置参数。则在我们的网络中第2层的神经元可以如下公式计算。

            输出层

    2、反向传播算法
    损失函数
            损失函数在统计学中是一种衡量损失和误差程度的函数,它一般包括损失项(loss term)和正则项(regularization term)

    损失项
            损失项比较常见的有平方损失,常用在回归问题;以及对数损失函数,常用在分类问题。
        正则项
            加入正则项目的是减小权重的幅度,防止过度拟合。常用的有L1-regularization和L2-regularization。
    深度学习也有一个目标函数,通过这个目标函数我们可以知道参数为何值时对我们来说才是一组“好”的参数,这个函数就是损失函数。
    训练的过程就是通过每一次迭代对网络中参数进行更新,来使损失函数的值达到最小
    BackPropagation算法(BP)
    BP算法的整体思路如下:对于每个给定的训练样本,首先进行前向计算,计算出网络中每一层的激活值和网络的输出。对于最后一层(输出层),我们可以直接计算出网络的输出值与已经给出的标签值(label)直接的差距,我们将这个值定义为残差δ。对于输出层之前的隐藏层L,我们将根据L+1层各节点的加权平均值来计算第L层的残差。
    在反向传播过程中,若第x层的a节点通过权值W对x+1层的b节点有贡献,则在反向传播过程中,梯度通过权值W从b节点传播回a节点。

    反向传播的具体步骤如下:
    (1)根据输入,计算出每一层的激活值。
    (2)对于输出层,计算每个单元的残差
    (3)对于输出层之前的每一层,计算每一层的残差
    (4)由残差计算每一层的偏导数
    (5)最后,使用偏导数更新权值和偏置。

    3、卷积神经网络(Convolutional Neural Networks)
    它的权值共享网络结构,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。
    卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。
    它利用空间关系减少需要学习的参数数目以提高一般前向BP算法的训练性能。
    在CNN中,图像的一小部分(局部感受区域)作为层级结构的最低层的输入,信息再依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最显著的特征。这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征。
    网络结构
          卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。

          输入图像通过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如上图,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进行求和,加权值,加偏置,通过一个Sigmoid函数得到三个S2层的特征映射图。这些映射图再进过滤波得到C3层。这个层级结构再和S2一样产生S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。
           一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。
    由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。
    关于参数减少与权值共享
    从CNN可视化的角度来讲,就是卷积神经网络每一层输出的特征图(featuremap)某个节点的响应对应的原始输入图像的区域就是感受野,即feature map上的像素点在原始图像上映射的区域大小。
    感受野计算时有下面的几个情况需要说明:
      (1)第一层卷积层的输出特征图像素的感受野的大小等于滤波器的大小
      (2)深层卷积层的感受野大小和它之前所有层的滤波器大小和步长有关系
      (3)计算感受野大小时,忽略了图像边缘的影响,即不考虑padding的大小
    这里的每一个卷积层还有一个strides的概念,这个strides是之前所有层stride的乘积。
      即strides(i) = stride(1) * stride(2) * ...* stride(i-1)
      关于感受野大小的计算采用top to down的方式, 即先计算最深层在前一层上的感受野,然后逐渐传递到第一层,使用的公式可以表示如下:   
       RF = 1 #待计算的feature map上的感受野大小
      for layer in (top layer To down layer):
        RF = ((RF -1)* stride) + fsize
    stride 表示卷积的步长; fsize表示卷积层滤波器的大小  
    用python实现了计算Alexnet zf-5和VGG16网络每层输出feature map的感受野大小

    图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。   

    假如局部感受野是10x10,隐层每个感受野只需要和这10x10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即10^8个参数。比原来减少了四个0(数量级)。我们知道,隐含层的每一个神经元都连接10x10个图像区域,也就是说每一个神经元存在10x10=100个连接权值参数。那如果我们每个神经元这100个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有100个参数啊!不管你隐层的神经元个数有多少,两层间的连接只有100个参数!这就是权值共享!但这样你只提取了一种特征。
    假如一种滤波器,也就是一种卷积核就是提出图像的一种特征,例如某个方向的边缘。那么我们需要提取不同的特征,只需加多几种滤波器就行了。所以假设我们加到100种滤波器,每种滤波器的参数不一样,表示它提出输入图像的不同特征,例如不同的边缘。这样每种滤波器去卷积图像就得到对图像的不同特征的放映,我们称之为Feature Map。所以100种卷积核就有100个Feature Map。这100个Feature Map就组成了一层神经元。我们这一层有多少个参数了?100种卷积核x每种卷积核共享100个参数=100x100=10K,也就是1万个参数。

    刚才说隐层的参数个数和隐层的神经元个数无关,只和滤波器的大小和滤波器种类的多少有关。那么隐层的神经元个数怎么确定呢?它和原图像,也就是输入的大小(神经元个数)、滤波器的大小和滤波器在图像中的滑动步长都有关!例如,我的图像是1000x1000像素,而滤波器大小是10x10,假设滤波器没有重叠,也就是步长为10,这样隐层的神经元个数就是(1000x1000 )/ (10x10)=100x100个神经元了。注意了,这只是一种滤波器,也就是一个Feature Map的神经元个数,如果100个Feature Map就是100倍了。由此可见,图像越大,神经元个数和需要训练的权值参数个数的贫富差距就越大。


    卷积层的权值共享是指每一个map局部和整体权值共享,具体表现出来就是每一个map与卷积核进行卷积,卷积核在map上移动map的不同局部区域之间使用的同一个卷积核进行计算,而不是多个map使用相同的卷积核。
    总之,卷积网络的核心思想是将:局部感受野、权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。

    实现一个卷积神经网络

    设计的网络结构如下图所示:包含2个卷积层,2个max池化层,2个全链接层和1个relu层与一个softmax层。


    卷积层的输入来源于输入层或者pooling层。每一层的多个卷积核大小相同,在这个网络中,使用的卷积核均为5*5。

    下面我来推导一下每层的神经元数目和参数的个数。
    1、输入层:输入层输入一个28*28的图片。
    2、卷积层1:该层使用20个5*5的卷积核分别对输入层图片进行卷积,所以包含20*5*5=500个参数权值参数。卷积后图片边长为(28-5+1)/1 = 24,故产生20个24*24个map,包含20*24*24 = 11520个神经元。
    3、池化(pooling)层1:对上一层每个2*2区域进行降采样,选取每个区域最大值,这一层没有参数。降采样过后每个map的长和宽变为原来的一半。
    4、卷积层2:该层使用20*50个5*5的卷积核分别对上一层的每一个map进行卷积,所以包含20*50*5*5=25000个参数权值参数。卷积后图片边长为(12-5+1)/1 = 8,故产生50个8*8个map,包含50*8*8 = 3200个神经元。
    5、池化层2:和上一个池化层功能类似,将8*8的map降采样为4*4的map。该层无参数。
    6、全连接层1:将上一层的所有神经元进行连接,该层含有500个神经元,故一共有50*4*4*500 = 400000个权值参数。
    7、relu层:激活函数层,实现x=max[0,x],该层神经元数目和上一层相同,无权值参数。
    8、全连接层2:功能和上一个全连接层类似,该层共有10个神经元,包含500*10=5000个参数。
    9、softmax层:实现分类和归一化


    卷积层的前向计算
    如图输入为28*28的图像,经过5*5的卷积之后,得到一个 24*24的map。卷积层2的每个map是不同卷积核在前一层每个map上进行卷积,并将每个对应位置上的值相加然后再加上一个偏置项。

    每次用卷积核与map中对应元素相乘,然后移动卷积核进行下一个神经元的计算。如图中矩阵C的第一行第一列的元素2,就是卷积核在输入map左上角时的计算结果。在图中也很容易看到,输入为一个4*4的map,经过2*2的卷积核卷积之后,结果为一个(4-2+1) *(4-2+1) = 3*3的map。

    卷积层的后向计算
    前面提到:在反向传播过程中,若第x层的a节点通过权值W对x+1层的b节点有贡献,则在反向传播过程中,梯度通过权值W从b节点传播回a节点。卷积层的反向传播过程也是如此,我们只需要找出卷积层L中的每个单元和L+1层中的哪些单元相关联即可。我们还用上边的图片举例子。
    在上图中,我们的矩阵A11通过权重B11与C11关联。而A12与2个矩阵C中2个元素相关联,分别是通过权重B12和C11关联,和通过权重B11和C12相关联。矩阵A中其他元素也类似。
    那么,我们有没有简单的方法来实现这样的关联呢。答案是有的。可以通过将卷积核旋转180度,再与扩充后的梯度矩阵进行卷积。扩充的过程如下:如果卷积核为k*k,待卷积矩阵为n*n,需要以n*n原矩阵为中心扩展到(n+2(k-1))*(n+2(k-1))。具体过程如下:
    假设D为反向传播到卷积层的梯度矩阵,则D应该与矩阵C的大小相等,在这里为3*3。我们首先需要将它扩充到(3+2*(2-1))* (3+2*(2-1)) = 5*5大小的矩阵,


    同时将卷积核B旋转180度:


    将旋转后的卷积核与扩充后的梯度矩阵进行卷积:



    一种典型的用来识别数字的卷积网络是LeNet-5,详见此文章
    关于里面涉及到的池化和全连接介绍,详见下面文章

    展开全文
  • 第一个地方是输入x的维度,这里的占位需要用卷积输入的格式: # x, y_是定义的占位符,需要指定参数的类型,维度(要和网络的输入与输出维度一致),类似于函数的形参,运行时必须传入值 x = tf.placeholder(tf....

    因为反向传播和前面差不多,这里只说一下需要改的地方(毕竟反向传播是依赖于已经构建好的前向传播计算图,设计比较简单)

    第一个地方是输入x的维度,这里的占位需要用卷积输入的格式:

        # x, y_是定义的占位符,需要指定参数的类型,维度(要和网络的输入与输出维度一致),类似于函数的形参,运行时必须传入值
        x = tf.placeholder(tf.float32, [
            BATCH_SIZE,
            mnist_lenet5_forward.IMAGE_SIZE,
            mnist_lenet5_forward.IMAGE_SIZE,
            mnist_lenet5_forward.NUM_CHANNELS])

    如果对上面的几行代码感觉印象有些模糊,我们回到之前定义卷积函数的代码:

    # 定义卷积计算函数
    def conv2d(x, w):
        #x: 一个输入 batch [batch , 分辨率 , 分辨率 , 通道数]
        return tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')

    这样就明白了:x是一个输入参数格式。

    然后我们还要在每一轮的训练中把输入x改变一下,使用如下函数:

    xs, ys = mnist.train.next_batch(BATCH_SIZE)  # 读取一个 batch 的数据
    reshaped_xs = np.reshape(xs, (  # 将输入数据 xs 转换成与网络输入相同形状的矩阵
                BATCH_SIZE,
                mnist_lenet5_forward.IMAGE_SIZE,
                mnist_lenet5_forward.IMAGE_SIZE,
                mnist_lenet5_forward.NUM_CHANNELS))

    把输入数据改变一下维度,变成输入的形式。

    然后喂入神经网络:

                # 喂入训练图像和标签,开始训练
                _, loss_value, step = sess.run([train_op, loss, global_step], feed_dict={x: reshaped_xs,
                                                                     y_: ys})

    方法和步骤其实并没有改变多少,就是把以前喂给全参数网络的数据现在改为了喂给卷积神经网络。

    展开全文
  • 先写一个函数名: # 定义前向传播的过程 def forward(x, train, regularizer): 在这个大函数里我们要把前向传播的网络结构搭建好。...我们定义第一层网络结构,这是一个卷积层,卷积的结构由前...

    先写一个函数名:

    # 定义前向传播的过程
    def forward(x, train, regularizer):

    在这个大函数里我们要把前向传播的网络结构搭建好。

    x是输入数据,train表示是否是训练还是测试,因为我们训练和测试都在使用同样的前向传播结构。

    train如果是TRUE,就是训练,如果是FALSE,就说明是用来测试。

    我们定义第一层网络结构,这是一个卷积层,卷积的结构由前面定义的函数的变量来生成。这里是定义了5*5的卷积核,共32个这样的卷积核,图像的通道数为1 (黑白图像)。在卷积层定义一个偏置,然后卷积加入计算图。之后把偏置加入到卷积结果中,并用relu函数激活,然后进行2*2的最大值池化。

        # 实现第一层卷积层的前向传播过程
        conv1_w = get_weight([CONV1_SIZE, CONV1_SIZE, NUM_CHANNELS, CONV1_KERNEL_NUM],
                             regularizer)  # 初始化卷积核
        conv1_b = get_bias([CONV1_KERNEL_NUM])  # 初始化偏置项
        conv1 = conv2d(x, conv1_w)  # 实现卷积运算
        relu1 = tf.nn.relu(tf.nn.bias_add(conv1, conv1_b))  # 对卷积后的输出添加偏置,并过 relu 非线性激活函数
        pool1 = max_pool_2x2(relu1)  # 将激活后的输出进行最大池化

    第二个神经网络就是把第一层的网络输出结果输入到第二层上,然后输出激活池化:

        # 实现第二层卷积层的前向传播过程,并初始化卷积层的对应变量
        conv2_w = get_weight([CONV2_SIZE, CONV2_SIZE, CONV1_KERNEL_NUM,
                          CONV2_KERNEL_NUM], regularizer)  # 该层每个卷积核的通道数要与上一层卷积核的个数一致
        conv2_b = get_bias([CONV2_KERNEL_NUM])
        conv2 = conv2d(pool1, conv2_w)  # 该层的输入就是上一层的输出 pool1
        relu2 = tf.nn.relu(tf.nn.bias_add(conv2, conv2_b))
        pool2 = max_pool_2x2(relu2)

    现在我们的数据是三维的,因为除了batch以外还有长宽,深度:第一个卷积后的结果有32个(卷积核数),第二个卷积后的结果有64个(第二层卷积核数),然后深度表示每层的图像卷积后的像素数。

    通过reshape函数把这些量根据每个BATCH大小进行拉伸,拉成一个矩阵。

        # 将上一池化层的输出 pool2(矩阵)转化为下一层全连接层的输入格式(向量)
        pool_shape = pool2.get_shape().as_list()  # 得到pool2输出矩阵的维度,并存入list中,注意pool_shape[0]是一个batch的值
        nodes = pool_shape[1] * pool_shape[2] * pool_shape[3]  # 从 list 中依次取出矩阵的长宽及深度,并求三者的乘积就得到矩阵被拉长后的长度
        reshaped = tf.reshape(pool2, [pool_shape[0], nodes])  # 将 pool2 转换为一个 batch 的向量再传入后续的全连接

    然后构建全连接层第一层的网络模型:输入节点数为上面算的nodes,输出为第二层网络节点数

        # 实现第三层全连接层的前向传播过程
        fc1_w = get_weight([nodes, FC_SIZE], regularizer)  # 初始化全连接层的权重,并加入正则化
        fc1_b = get_bias([FC_SIZE])  # 初始化全连接层的偏置项
        fc1 = tf.nn.relu(tf.matmul(reshaped, fc1_w) + fc1_b)

    如果是训练的话就采用dropout函数:

        # 如果是训练阶段,则对该层输出使用 dropout,也就是随机的将该层输出中的一半神经元置为无效,是为了避免过拟合而设置的,一般只在全连接层中使用
        if train: fc1 = tf.nn.dropout(fc1, 0.5)

    然后就是实现最后一层,并输出:

        # 实现第四层全连接层的前向传播过程,并初始化全连接层对应的变量
        fc2_w = get_weight([FC_SIZE, OUTPUT_NODE], regularizer)
        fc2_b = get_bias([OUTPUT_NODE])
        y = tf.matmul(fc1, fc2_w) + fc2_b
        return y

    至此,前向传播的网络结构就搭建完毕了。

    接下来写后向传播的网络结构。

     

    展开全文
  • 因为敲卷积神经网络的代码确实浪费了不少时间,这里我详细地把代码进行解释。 只导入一个模块: import tensorflow as tf 提前先把变量定义好:这个卷积层是先输入28*28维的图像,图像的通道数是1。第一个卷积核...

    因为敲卷积神经网络的代码确实浪费了不少时间,这里我详细地把代码进行解释。

    只导入一个模块:

    import tensorflow as tf

    提前先把变量定义好:这个卷积层是先输入28*28维的图像,图像的通道数是1。第一个卷积核的大小是5,卷积核数量是32.第二个卷积核的大小是5,数量是64。第三层是全连接层的。

    # 设定神经网络的超参数
    # 定义神经网络可以接收的图片的尺寸和通道数
    IMAGE_SIZE = 28
    NUM_CHANNELS = 1
    # 定义第一层卷积核的大小和个数
    CONV1_SIZE = 5
    CONV1_KERNEL_NUM = 32
    # 定义第二层卷积核的大小和个数
    CONV2_SIZE = 5
    CONV2_KERNEL_NUM = 64
    # 定义第三层全连接层的神经元个数
    FC_SIZE = 512
    # 定义第四层全连接层的神经元个数
    OUTPUT_NODE = 10

    我画个图表示一下:

    现在开始定义网络各个层的参数。首先是网络权重函数。

    该函数不但可以用来生成卷积层的参数,还可以用来生成全网络层的参数。(反正只需要注意运算方式不同即可)

    # 定义初始化网络权重函数
    def get_weight(shape, regularizer):
        '''
        args:
        shape:生成张量的维度
        regularizer: 正则化项的权重
         '''
        # tf.truncated_normal 生成去掉过大偏离点的正态分布随机数的张量,stddev 是指定标准差
        w = tf.Variable(tf.truncated_normal(shape, stddev=0.1))
        # 为权重加入 L2 正则化,通过限制权重的大小,使模型不会随意拟合训练数据中的随机噪音
        if regularizer != None: tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w))
        return w

    然后是生成偏置的函数。注意其实卷积层也可以给每个卷积的最后运算结果上加个偏置。

    # 定义初始化偏置项函数
    def get_bias(shape):
        '''
        args:
        shape:生成张量的维度
        '''
        b = tf.Variable(tf.zeros(shape))  # 统一将 bias 初始化为 0
        return b

    然后我们定义卷积函数:

    该函数返回一个卷积的计算图,输入数据和卷积核,然后进行计算

    # 定义卷积计算函数
    def conv2d(x, w):
        '''
        args:
        x: 一个输入 batch [batch , 5分辨率 , 5分辨率 , 3通道数]
        w: 卷积层的权重 [3 3 3通道数 16核个数]
        '''
        # strides 表示卷积核在不同维度上的移动步长为 1,第一维和第四维一定是 1,这是因为卷积层的步长只对矩阵的长和宽有效;
        # padding='SAME'表示使用全 0 填充,而'VALID'表示不填充
        return tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')

    然后我们定义池化操作函数:池化过滤器边长为2,移动步长为2,边界填充0.

    # 定义最大池化操作函数
    def max_pool_2x2(x):
        '''
        args:
        x: 一个输入 batch
        '''
        # ksize 表示池化过滤器的边长为 2,strides 表示过滤器移动步长是 2,'SAME'提供使用全 0 填充
        return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

    有了这四个函数,下一节里,我们就可以现在定义前向传播的函数了。

    展开全文
  • 卷积神经网络

    万次阅读 多人点赞 2014-11-29 16:20:41
    自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Network,CNN),期间配置和使用过theano和cuda-convnet、cuda-convnet2。为了增进CNN的理解和使用,特写此博文,以其与人交流,互有增益。...
  • 我的毕设做的是基于opencv和卷积神经网络的人脸识别项目。在做完这个项目之后,我一直想好好总结一下所学到的关于卷积神经网络的知识。现在趁着有点空闲,随手记录一点以前学过的,或者正在学习的知识点,相当于一个...
  • 卷积神经网络综述

    千次阅读 2019-02-25 14:51:38
    下面来简单介绍和归纳总结一下国内外卷积神经网络的结构,分析一下卷积神经网络的基本原理,阐述一下卷积神经网络在图像识别中的相关应用及取得的最新研究成果。 卷积神经网络是人工神经网络与深度学习相结合,通过...
  • CNN笔记:通俗理解卷积神经网络

    万次阅读 多人点赞 2016-07-02 22:14:50
    通俗理解卷积神经网络(cs231n与5月dl班课程笔记) 1 前言 2012年我在北京组织过8期machine learning读书会,那时“机器学习”非常火,很多人都对其抱有巨大的热情。当我2013年再次来到北京时,有...
  • 卷积神经网络架构

    万次阅读 多人点赞 2018-11-20 17:14:48
    卷积神经网络(conv)架构 卷积神经网络在图像分类数据集上有非常突出的表现,由于一般正常的图像信息过大,如果使用全连接神经网络,需要设置大量的权值w和basic值,这样会导致运算效率较低,还容易导致过分拟合的...
  • 利用MATLAB 进行BP神经网络的预测(含有神经网络工具箱) 最近一段时间在研究如何利用预测其销量个数,在网上搜索了一下,发现了很多模型来预测,比如利用回归模型、时间序列模型,GM(1,1)模型,可是自己在结合...
  • CNN卷积神经网络原理详解(上)

    万次阅读 多人点赞 2019-10-18 23:59:17
    CNN卷积神经网络原理详解(上)前言卷积神经网络的生物背景我们要让计算机做什么?卷积网络第一层全连接层训练 前言 卷积网络(convolutional network),也叫作卷积神经网络(convolutional neural network,CNN),是...
  • 今天就来谈一谈关注度比较高的车牌识别吧.1 车牌识别的步骤 ...识别的话方法就比较多了,有模板匹配,bp神经网络,卷积神经网络等. 2 一个简单的例子先读取车牌图片 [uuu,vvv]=uigetfile({'*.jpg;*.tif;
  • 卷积神经网络概念与原理

    万次阅读 多人点赞 2016-09-05 10:00:27
    一、卷积神经网络的基本概念 受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷积神经网络(CNN),Yann Lecun 最早将CNN用于手写数字识别并一直保持了其在该问题的霸主地位。近年来卷积神经网络在多个方向...
  • 第五章 卷积神经网络

    千次阅读 2020-01-13 07:49:37
    第五章 卷积神经网络第五章 卷积神经网络卷积一维卷积二维卷积互相关卷积的变种卷积的数学性质交换性导数卷积神经网络用卷积来代替全连接卷积层汇聚层(池化层)典型的卷积网络结构参数学习误差项的计算几种典型的卷积...
  • pytorch定义神经卷积网络CNN源码

    万次阅读 2019-06-13 17:24:17
    import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim torch.nn仅支持迷你批次。整个torch.nn 软件包仅支持小批量样本的输入,而不是单个样本。 ...
  • 卷积神经网络入门详解

    万次阅读 多人点赞 2017-11-08 15:52:14
      本文主要内容为 CS231n 课程的学习笔记,主要参考 学习...  在之前的博客《十四、卷积神经网络(1):介绍卷积神经网络》《十五、卷积神经网络(2):卷积神经网络的结构》中只是介绍性的阐述了一些关于卷积神...
  • python3_实现BP神经网络 + BP神经网络应用实例

    万次阅读 多人点赞 2018-07-29 22:10:28
    1.BP神经网络简介 BP神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。 优点:具有任意复杂的模式分类能力和优良的...
  • 卷积神经网络详解

    千次阅读 2019-11-15 16:29:59
    卷积神经网络是第一个我系统学习的神经网络,在学习的过程中,通过不断地查阅资料也好,看书也好,对它的理解逐渐的深入了,下面我就来介绍一下卷积神经网络。 神经网络 说到卷积神经网络,就不得不先说一下神经...
  • 卷积神经网络 卷积 池化 上下采样

    千次阅读 2018-06-05 21:47:32
    (参考链接https://www.zhihu.com/question/39022858)如何理解卷积神经网络(CNN)中的卷积和池化?(参考链接https://www.zhihu.com/question/49376084)可以看看这篇文章《An Intuitive Explanation of ...
  • 卷积神经网络的一些规则

    万次阅读 2020-04-02 17:31:09
    feature的输出维度是[feat的0维度值,self.liner_layer的输出值]
  • 卷积神经网络卷积计算具体过程?

    千次阅读 2019-06-04 21:37:46
    对于卷积神经网络中的计算,大部分人所知道的计算如下图所示:卷积核中的各参数与图像矩阵相应位置的数值相乘后再求和。但是实际计算时图像往往是rgb图像,即图像有三个通道,每张输入图像有三个二维矩阵(也说图像...
  • 卷积层的矩阵输出大小为 n−f+2ps+1\frac{n-f+2p}{s} +1sn−f+2p​+1,向下取整 其中nnn为输入矩阵的大小,fff为卷积核的大小,ppp为padding的大小,sss为strides的大小 池化层计算公式 池化层计算公式和卷积层的...
  • CNN卷积神经网络的理论教程参考 http://blog.csdn.net/luanpeng825485697/article/details/79009241 加载样本数据集 首先我们要有手写体的数据集文件 t10k-images.idx3-ubyte t10k-labels.idx1-ubyte train-...
  • 卷积神经网络超详细介绍

    万次阅读 多人点赞 2018-09-19 10:16:59
    1、卷积神经网络的概念 2、 发展过程 3、如何利用CNN实现图像识别的任务 4、CNN的特征 5、CNN的求解 6、卷积神经网络注意事项 7、CNN发展综合介绍 8、LeNet-5结构分析 9、AlexNet 10、ZFNet 10.1 意义 ...
  • CNN卷积神经网络卷积后的大小计算

    千次阅读 2018-09-27 16:05:14
    (忽略图片深度) 输出图片的边长N为: ·N = (W - F + 2P)/S + 1 设 ·输入图片大小 WW ·卷积核大小 FF ·卷积核移动步长 S ·零填充的像素数 P ...
  • 定义:在卷积神经网络中,感受野的定义是,卷积神经网络中每一层输入的特征图(feature map)上的像素点在原始图像上的映射大小。 对于pooling操作,第一个作用是降低feature map的尺寸,减少需要训练的参数;第二...
  • 实战+原理--手写数字识别--CNN卷积神经网络--matlab

    千次阅读 多人点赞 2019-04-13 23:27:09
    实战+原理–手写数字识别–卷积神经网络–matlab Marshal Zheng 2019-04-13 文章目录实战+原理--手写数字识别--卷积神经网络--matlabTargetDatasetDataset-converted into bmpTrainTestResultTheory about CNN ...
  • 神经网络模型简述 实例:交通运输能力预测设计 MATLAB程序及仿真结果 由于货物运输、地方经济及企业发展的紧密联系,因此作为反映货物运输需求的一项重要指标, 货运量预测研究和分析具有较强的实际意义。 常用的...
  • 卷积神经网络CNN原理——结合实例matlab实现

    万次阅读 多人点赞 2016-10-22 21:32:00
    卷积神经网络CNN是深度学习的一个重要组成部分,由于其优异的学习性能(尤其是对图片的识别)。近年来研究异常火爆,出现了很多模型LeNet、Alex net、ZF net等等。由于大多高校在校生使用matlab比较多,而网上的教程...

空空如也

1 2 3 4 5 ... 20
收藏数 145,395
精华内容 58,158
关键字:

神经网络