最近一直在搞一个属于自己的智能AI(类似siri)
代码优化了N次之后准确率终于稳定在了98.9999%
研究算法模型自己撸出来的代码比网上ctrl c+v下来就当自己写的调用别人写好的库的劣质代码爽得不止一点半点
整理下这个过程中所用到的各种小知识吧
下面是正文————————————————
一.卷积在神经网络中的作用
卷积神经网络通常在计算机视觉领域上应用最多,在视觉分类应用中尤为突出,譬如以下图示:
通常,人类只要看一眼就能看出图示中每个物件哪个是衣服哪个是帽子,而如果让计算机来识别,其中一个方法就是使用神经网络让计算机学习图中各个物件的特征属性,从而预测出图中哪个是衣服哪个是帽子,在普遍的神经网络中,通常是对一个东西的图像进行像素遍历,从第一个像素点开始,一直将所有像素点遍历后作为训练数据放入神经网络中进行训练,当然如果是一幅占比不是很大的照片(譬如64X64的)确实可以这么做,但是当一幅照片的像素超过了一定的大小(譬如10000X10000),实际上再用神经网络来训练的话效率就会十分低下。
反观人类在观察物件时,我们并不需要像计算机一样每个像素点地遍历,而是看到鞋子该有的鞋底以及鞋子的样式,就可以推测出这是一个鞋子,看到有袖口就可以推测出这是一件衣服,同样,卷积神经网络最大的特点既是模仿人类这一特点,通过提取物件中的某个特征来确定该物件属于什么类型,从而省去每一张图片都遍历一次像素点的工作量。而卷积在此则扮演了一个重要的角色——提取特征。
二.卷积的运作过程
卷积是怎么提取到一副图像的特征的呢?例如以下一副像素图示:
该像素图示实际上为一副黑白并不分明(为了效果明显,假装颜色分明)的图片:
观察图示,可以发现该图示的特征为两个颜色过渡的一条垂直线,所以卷积的作用既是找出这条特征线。而找出特征线的方法是使用一个叫滤波器(filter)的东西。滤波器的用法有点类似于掩膜(mask),为一个固定大小的像素方格(3x3、5x5、7x7各种样式),以指定的移动方式在目标图示上移动,进行运算后输出一副全新的图示。如图上例子则使用大小为3x3的滤波器进行滤波:
使用以上滤波器进行遍历滤波,步长为1:
将3x3的滤波器掩盖在目标图示上进行计算,每个像素点相加求和(如图上的计算为:3*(40*1+0*40-1*40) = 0),当计算完成后,滤波器将向右行进一个,继续进行计算,而当往右到尽头之后,将往下移动一格,继续进行相加求和:
当滤波器将所有的像素点全部遍历完成后,将得到一副大小为4x4的图示:
该图示实际为以下颜色:
可以看到,经过滤波器进行滤波之后,例子图像中的特征线被很明显的刻画了出来,但是现在存在一些问题:
1.每经过一次滤波,图像就会变小,如果经过多次滤波之后,图像就会被压缩至很小很小,为了避免这种情况,在后面的神经网络中,将会引入padding这个术语,即在进行滤波前在原图像外围加一圈数值为 0 的像素,这样滤波到的图像就会和原图像一样大小
2.滤波器中的每个数值都不是固定的,需要根据具体的图像来确定滤波器的大小以及数值,而卷积神经网络中把滤波器中的九个数值当成传入参数,让神经网络去学习出最能提取信号特征的数值,这就是卷积神经网络最大的作用之一。
更多推荐
卷积,神经网络,机器
发布评论