卷积核提取特征后用途
我们先考虑一个问题:人脑(和动物脑)如何快速识别物体?早在20世纪60年代,加拿大裔美国神经科学家David Hunter Hubel和瑞典神经科学家Torsten Nils W.iesel就发现人类视觉系统是分层的,V1、V2、V3等。初级视觉皮层中每个神经元或神经元组的分工是不同的。有些神经元对运动特征敏感,有些神经元对方向敏感。例如,如果一条直线以不同角度放置,则刺激的神经元是: 不一样。此外,有些神经元对颜色特征等敏感。
这些研究表明,人类初级视觉皮层具有检测视觉特征的能力。这些不同的特征逐层传递,最后所有的特征合成整个物体,然后大脑进行识别。这大致就是人类视觉系统的工作原理。
也许你认为初级视觉皮层提取特征的这种能力与上一章讨论的卷积运算非常相似。是的,这就是卷积神经网络能够表现出色的原因。事实上,卷积神经网络通过不同的卷积核来提取不同的特征,甚至需要多次提及特征。经过多层处理后,就可以提取出图片中想要的特征,比如提取人脸的轮廓。这就是人脸识别。
当然整个过程中还存在其他的过程,比如激活函数、池化等过程。此外,就像求解线性回归方程和分类问题一样,深度学习也需要大量的数据。这是一个卷积神经网络。简单来说,他模仿人类深层感觉系统的特征来进行识别。这将在下一步的研究中讨论。
知识准备好了,我开始带着问题以教科书式的方式学习JAX中的卷积。
再述卷积
卷积,螺旋积或卷积是一种积分变换的数学方法,表示两个变量在一定重叠范围内相乘的结果(加权求和,注意两个变量可以推广为函数)。如果将参与卷积的函数视为区间的指示函数,则卷积可以视为“移动平均”的推广。
一个新的概念出现了,指标函数。别混淆了,所谓指示函数就是用来判断自变量是否属于某个子集,结果只有0和1。其实和if i 0 i 10的判断类似因此,指示函数也称为特征函数,
导入贾克斯
def 指标函数(i) -bool:
如果我5:
返回1
否则:
返回0
如果__name__=="__main__":
我=10
指标=指标函数(i)
print("indicator=",indicator) 操作结果打印输出如下,
Indicator=1 卷积最初被用作一种滤波器(用于信号系统中去除噪声。当然,Photoshop中滤波器的名称也更接近于卷积本身的目的)。例如,最简单的高斯模板就是将像素乘以不同的权重,然后求和作为模板的中心像素值。用数学表达式将其记为,
滑动平均
如果模板值全为1,则为移动平均线。所谓滑动平均,就是将该点附近的采样点做算术平均,作为该点的平滑值(这就是照片修复和马赛克去除的算法),如下图,
图1 移动平均线
在,
都为1,即
通常,窗口是对称窗口,以防止相位偏差。窗口一般为奇数,如33、55。
高斯模板
如果模板值为高斯,则为加权移动平均值。
其中,如果权重在中低周围较高,则从频率上理解为低通滤波器(允许截止频率以下的信号通过,截止频率以上的信号不难通过)。
如果模板值是某个边缘检测模板,则结果是模板左侧的像素减去右侧的像素,或者右侧的像素减去左侧的像素。结果就是图像梯度。不同的方向代表不同方向的边缘。
对于图像来说,卷积的计算过程就是翻转模板(将卷积运算中两个函数的顺序颠倒过来),然后在原图像上滑动模板,将对应位置的元素相乘,然后相加,得到最终结果。如果不考虑翻转,整个过程就是滑动-乘法-叠加。
图2 对图像卷积过程的另一种理解是投影,因为模板当前覆盖的图像与模板的乘法和累加运算就是图像部分与模板的内积运算。如果将图像部分和模板拉直,则拉直的向量如果看成向量空间中的向量,那么这个过程就是图像部分在模板方向上的投影。
图3 卷积可以理解为一种投影
矩阵卷积
在深度学习中,卷积是数字图像处理中的基本方法,即线性滤波。它将待处理的二维数视为一个大矩阵。图像中的每个像素都可以看作矩阵中的每个元素。像素的大小就是矩阵中的元素值。下面是读取黑白图像的代码,
导入贾克斯
从PIL 导入图像
def Pixel_array(imageName) -jax.numpy.array:
图像=Image.open(图像名称)
print("图像.format=", 图像.format)
print("图像大小=",图像大小)
print("图像.模式=", 图像.模式)
数组=jax.numpy.asarray(图像)
返回数组
def 测试():
图像名称="././Shares/Images/Colorful.jpeg"
数组=Pixel_array(图像名称)
print("数组.shape=", 数组.shape)
print("数组[: 5]=", 数组[: 5, 5])
打印("数组=",数组)
如果__name__=="__main__":
test()操作结果打印输出如下:
图像.格式=JPEG
图像大小=(1200, 1012)
图像模式=RGB
数组.shape=(1012, 1200, 3)
数组[: 5]=[[[217 214 195]
[222219200]
[222219200]
[217214195]
[218215196]]
[[226 223 204]
[228225206]
[227224205]
[224221202]
[224221202]]
[[231 228 209]
[227224205]
[226223204]
[227224205]
[225222203]]
[[232 229 210]
[226223204]
[225222203]
[231228209]
[229226207]]
[[234 229 210]
[230225206]
[233228209]
[240235216]
[238233214]]]
数组=[[[217 214 195]
[222219200]
[222219200]
.
[203206187]
[194197178]
[188191172]]
[[226 223 204]
[228225206]
[227224205]
.
[183186167]
[183186167]
[181184165]]
[[231 228 209]
[227224205]
[226223204]
.
[221224205]
[223226207]
[224227208]]
.
[[ 64 61 42]
[195192173]
[173170151]
.
[201200170]
[188187157]
[167166136]]
[[ 63 60 41]
[194191172]
[171168149]
.
[198197167]
[185184154]
[165164134]]
[[ 62 59 40]
[193190171]
[170167148]
.
[192191161]
[187186156]
[173 172 142]]] 注意,计算机中实际保存的就是这样一个三维矩阵。第一个维度表示高度,第二个维度表示宽度,第三个维度表示通道数,为3,即RGB。例如[222 219 200]分别代表红、绿、绿、蓝的值。
使用的过滤工具是另一个小矩阵,称为卷积核。卷积核小鱼图像矩阵,具体计算方法是计算大图像矩阵中每个像素的周围像素与卷积核对应位置的乘积,然后将结果相加,最终值为该像素值,从而完成卷积。最简单的图像卷积如下,
图4 最简单的图像卷积。下面会再次介绍卷积运算,以及一些运算细节。这些都是使用卷积时必须掌握的东西。
再说卷积运算
前两章提到,卷积相当于离散值计算中的加权求和;卷积公式用于连续函数的计算。但无论使用哪种场景,它都体现了将两个变量或两个函数组合成第三个函数的过程,因此卷积和傅里叶变换密切相关。日常生活中的场景很少只有单一因素。它们往往是多种因素(函数)叠加的结果。人们在环境中听到的声音包括人声、鸟叫声、背景噪音等,耳朵最终听到的是这些声音的合成音,而人脑有非常优秀的卷积计算能力,所以它会过滤掉噪音和可以识别人声,甚至多种声音中特定人的声音。
让我再举一个例子。对于高速公路上汽车的位置跟踪(这也是卷积神经网络图像处理的一个非常重要的应用),计算出摄像头接收到的信号为,它代表了汽车在时间t在道路上的位置。
但实际的位置计算往往并不那么简单,因为我们在自然界中一直面临着各种影响和相机传感器滞后。因此,为了获得小车位置的实时数据,采用的方法是对测量结果进行平均。对于运动目标,采样时间越长,定位精度(传感器滞后)越低,采样时间越短,越接近真实值。因此,可以为不同的时间段分配不同的权重,通过权重定义计算得出。可以表示为,
这种运算方法称为卷积运算。更改符号以表示为,
或者
卷积公式中,第一个参数(函数)称为“输入数据”,而第二个参数称为“核函数”,是输出,即特征图。
矩阵卷积计算
其实,卷积不仅可以应用于值和函数,还可以应用于矩阵,比如上面提到的图像像素矩阵。首先,对于稀疏矩阵,如下所示,
图5 稀疏矩阵的卷积核的大小远小于输入数据矩阵的大小。例如,当输入图片信息时,数据的大小可能有几万个结构,但使用的卷积核只有几十个。这样可以在计算后获得较少的参数特征,大大减少后续的计算量。
如果你还想了解更多这方面的信息,记得收藏关注本站。
【第38章:深度学习中的卷积核与矩阵卷积技术解析】相关文章:
用户评论
看这个标题就知道讲机器学习中很重要的点啊!
有6位网友表示赞同!
卷积核我一直不太理解,希望能解释清楚。
有13位网友表示赞同!
矩阵卷积听起来还是很有技术感的,期待深入了解一下。
有10位网友表示赞同!
感觉这章内容应该比较难吧?需要好好准备一下才行。
有15位网友表示赞同!
终于学到卷积神经网络的核心概念了吗?好激动!
有11位网友表示赞同!
矩阵数学是深度学习的基础啊,这点很重要。
有17位网友表示赞同!
卷积核和矩阵卷积都很有用,应用范围很广。
有9位网友表示赞同!
要明白这些东西,才能更好理解CNN是如何工作的吧?
有14位网友表示赞同!
希望这本书能把这个概念讲得清清楚楚的!
有13位网友表示赞同!
学习深度学习真是需要耐心和毅力啊,不过看到这本书内容还挺期待的。
有7位网友表示赞同!
以前也尝试学习过卷积网络,但总感觉有点云里雾里,希望能这次搞懂了。
有5位网友表示赞同!
终于轮到我关注的部分了!
有9位网友表示赞同!
矩阵操作也是挺有意思的学科啊,现在在深度学习里有很多应用。
有15位网友表示赞同!
这本书应该很系统地讲解吧?期待着学习的旅程!
有11位网友表示赞同!
看来这章内容很有实战意义啊,以后应用起来会更方便。
有19位网友表示赞同!
希望可以从基础开始解释,这样更容易理解!
有20位网友表示赞同!
深度学习确实很多地方需要反复琢磨才能真正理解,加油!
有20位网友表示赞同!
机器学习的领域一直在发展,学习这些基础知识越来越重要了!
有13位网友表示赞同!