![4cde9ed4af1066ba99677283bc52fb41.png](https://i-blog.csdnimg.cn/blog_migrate/3bc48d59f302ba83ba01b60f89d10dfa.jpeg)
卷积神经网络(CNN,Convolutional Neural Network)是目前最热门的深度学习方法之一,其算法可大大减少学习参数又大幅提升模型学习效果,被广泛用于计算机视觉以及自然语言处理等领域。那么卷积到底是一种怎样令人窒息的操作,本篇小渣将带大家管中窥豹,看看将其作用在天气图上会发生什么。
一、初识卷积神经网络
卷积神经网络有别于其他神经网络的地方在于特有的卷积层,以及常与之搭配食用更佳的池化层。
1.预备知识
数字成像的图像是像素值的矩阵,一般会有三个通道,分别对应光学三原色中的红R、绿G和蓝B,每个通道的像素值在0到255之间。因此一张图片可以视作一个三维数组,其维度通常表示为(X_pixel,Y_pixel,Channel_No.)。比较特殊的一类图像为灰度图,其仅含有一个通道;而另一种带有透明度的图像,会具有4个通道。
2.卷积
关于卷积的定义与本质,有信号学、数学等各种角度的理解。小渣才疏学浅,将其简单的理解为一种数据的函数变换,这种变换借助卷积核进行一种类似于向量内积的矩阵计算来完成。卷积核在这里可视为变换函数的系数矩阵,矩阵的尺寸被称为感受野。当对一个数据使用多个不同的卷积核进行卷积时即可得到多种不同的特征图(卷积后数据构成的二维平面),这些特征图有助于提取数据的局部特征,同时保留了部分特征的空间关联性,又降低了噪声。下面通过一个例子来直观的了解卷积是如何计算的。
![eb7e681925ee644b6b2771fddd8458d5.gif](https://i-blog.csdnimg.cn/blog_migrate/56204052f9989aeb2dc9def48af9fb54.gif)
3.池化
池化的主要目的是降维,亦称为下采样,可以视为一种特征工程,在保持原有基本特征的基础上尽可能的将特征维度降低。常用的池化方法有最大池化,平均池化和全局平均池化。最大池化强调数据的细节特征,而平均池化强调数据的背景信息。下面仍旧以例子进行直观理解(由于具体操作和卷积有相似之处,算法更为简单,就不做动态演示了)。
![6a9c650f7ca442a75212486e25f7b019.png](https://i-blog.csdnimg.cn/blog_migrate/73ce9d2ad2f632dd0be0d63a23f6cc75.jpeg)
二、数据与模型框架
接下来我们将对台风图像进行卷积,使用keras建立具有多个卷积层的神经网络,并提取中间卷积层的输出结果,观察对天气图进行卷积会产生怎样的直观效果。
![13aa3310073d9d85ac62d527673f7083.png](https://i-blog.csdnimg.cn/blog_migrate/67b45b13f11164757f88f890880247cb.jpeg)
三、提取keras中间层输出
小渣使用较为便捷、keras自带的Model模块提取中间层结果,该方法可以理解为从原有模型中截取一段形成一个独立的小模型,具体命令和用法详见下列代码或keras手册。
from keras.models import Sequential,Model,Conv2D,MaxPooling2D
#-------建立网络--------
model=Sequential() #建立顺序网络并命名
model.add(Conv2D(filters=32,kernel_size=(5,5),input_shape=(120,120,3),activation='relu',padding='same')) #添加卷积层作为输入层
model.add(MaxPooling2D(pool_size=(2,2))) #添加最大池化层
model.add...... #重复添加卷积层与池化层
......
#-------提取中间输出--------
layer_index=7#中间层所在原网络中的层数(输入层为0)
intermediate_layer_model=Model(inputs=model.input, outputs=model.get_layer(index=layer_index).output) #截取原模型另建新模型
intermediate_output = intermediate_layer_model.predict(input) #进行输出,input本例中为输入层input
四、卷积后天气图发生了什么
读取天气图并输入建立好的神经网络后,便得到了各卷积核输出的特征图(下图选取16个)。可以看到不同的卷积核强调的局部特征和程度各不相同,有的偏向提取背景特征,有的主要捕捉台风整体轮廓,还有的介于两者之间。
![fc3dfdf6ae19e37d45ec50007119a654.png](https://i-blog.csdnimg.cn/blog_migrate/8a6cdf7ad380fa4f31182cf64e0e5329.jpeg)
再来看看配合池化的效果。经过前两次卷积+池化后的特征图基本保留原有大部分的信息,分辨率较低,而经过三次的特征图已变得较为模糊,经过四次的就呈马赛克状态,肉眼难以察觉其与原图的联系了。
![335d0f9eedb8ab00bd895dc1f88d9d6f.png](https://i-blog.csdnimg.cn/blog_migrate/0ed2ee3214a240c6add2a788426509e9.jpeg)
好了,今天小渣的学习笔记就到这里,有时间小渣将具体介绍运用卷积神经网络进行天气图识别与天气预报,感谢本次阅读!