14 深度学习-卷积
1.简述人工智能、机器学习和深度学习三者的联系与区别。
搞清三者关系的最简单方法,就是把它们想象成一个同心圆,其中人工智能最大,此概念也最先问世;然后是机器学习,出现的稍晚;最后才是深度学习,不过却是如今人工智能爆炸式发展的根源,处于前两者的范围之内。
机器学习最基本的做法,是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。
机器学习直接来源于早期的人工智能领域。传统算法包括决策树学习、推导逻辑规划、聚类、分类、回归、强化学习和贝叶斯网络等等(当然还有很多)。众所周知,我们还没有实现强人工智能。早期机器学习方法甚至都无法实现弱人工智能。
人工神经网络(Artificial Neural Networks)是早期机器学习中的一个重要的算法,历经数十年风风雨雨。神经网络的原理是受我们大脑的生理结构——互相交叉相连的神经元启发。但与大脑中一个神经元可以连接一定距离内的任意神经元不同,人工神经网络具有离散的层、连接和数据传播的方向。
例如,我们可以把一幅图像切分成图像块,输入到神经网络的第一层。在第一层的每一个神经元都把数据传递到第二层。第二层的神经元也是完成类似的工作,把数据传递到第三层,以此类推,直到最后一层,然后生成结果。
每一个神经元都为它的输入分配权重,这个权重的正确与否与其执行的任务直接相关。最终的输出由这些权重加总来决定。
深度学习本来并不是一种独立的学习方法,其本身也会用到有监督和无监督的学习方法来训练深度神经网络。但由于近几年该领域发展迅猛,一些特有的学习手段相继被提出(如残差网络),因此越来越多的人将其单独看作一种学习的方法。
最初的深度学习是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并不是一个全新的概念,可大致理解为包含多个隐含层的神经网络结构。为了提高深层神经网络的训练效果,人们对神经元的连接方法和激活函数等方面做出相应的调整。其实有不少想法早年间也曾有过,但由于当时训练数据量不足、计算能力落后,因此最终的效果不尽如人意。
深度学习摧枯拉朽般地实现了各种任务,使得似乎所有的机器辅助功能都变为可能。无人驾驶汽车,预防性医疗保健,甚至是更好的电影推荐,都近在眼前,或者即将实现。
2. 全连接神经网络与卷积神经网络的联系与区别。
全连接神经网络结构和卷积神经网络的结构直观上差异比较大,但是实际上他们的整体架构是非常相似的。卷积神经网络也是通过一层一层的节点组织起来的。和全连接神经网络一样,卷积神经网络中的每一个节点都是一个神经元。在全连接神经网络中,每相邻两层之间的节点都是有边相连,于是一般会将每层全连接层中的节点组织成一列,这样方便显示连接结构。而对于卷积神经网络,相邻两次之间只有部分节点相连,为了展示每一层神经元的维度,一般会将每一层卷积层的节点组织成一个三维矩阵。除了结构相似,卷积神经网络的输入输出以及训练流程与全连接神经网络也基本一致。以图形分类为例,卷积神经网络的输入层就是图像的原始像素,而输出层中的每一个节点代表了不同类别的可信度。这和全连接神经网络的输入输出是一致的。
卷积神经网络和全连接神经网络的唯一区别就在于神经网络中相邻两次的连接方式。
全连接神经网络在图片中的连接方式 | ![]() |
卷积神经网络在图片中的连接方式 | ![]() |
可参考:https://zhuanlan.zhihu.com/p/22038289?refer=intelligentunit or https://www.cnblogs.com/alexzhang92/p/10069547.html
3.理解卷积计算。
以digit0为例,进行手工演算。
from sklearn.datasets import load_digits #小数据集8*8
digits = load_digits()
结果:
4.理解卷积如何提取图像特征。
读取一个图像;
以下矩阵为卷积核进行卷积操作;
显示卷积之后的图像,观察提取到什么特征。
1 | 0 | -1 |
1 | 0 | -1 |
1 | 0 | -1 |
1 | 1 | 1 |
0 | 0 | 0 |
-1 | -1 | -1 |
-1 | -1 | -1 |
-1 | 8 | -1 |
-1 | -1 | -1 |
三维图像的灰度:https://blog.csdn.net/Tony_Stark_Wang/article/details/80006366
卷积API
scipy.signal.convolve2d
tf.keras.layers.Conv2D
图片位于scipy中:
import numpy as np from scipy import signal from scipy import misc import matplotlib.pyplot as plt face=misc.face(gray=True) #创建一个灰度图像 scharr=np.array([[-3-3j,0-10j,+3-3j], [-10+0j,0+0j,+10+0j], [-3+3j,0+10j,+3+3j]]) #设置一个特殊的卷积和 grad=signal.convolve2d(face,scharr,boundary='symm',mode='same') #把图像的face数组和设计好的卷积和作二维卷积运算,设计边界处理方式为symm fig,(ax1,ax2)=plt.subplots(1,2,figsize=(10,6)) #建立1行2列的图fig ax1.imshow(face,cmap='gray') #显示原始的图 ax1.set_axis_off() #不显示坐标轴 ax2.imshow(np.absolute(grad),cmap='gray') #显示卷积后的图 ax2.set_axis_off() #不显示坐标轴 fig.show() #显示绘制好的画
实验结果:
图片下载的:
from PIL import Image import matplotlib.pyplot as plt %matplotlib inline import numpy as np from scipy.signal import convolve2d image = Image.open(r'1.jpg') huidu = image.convert("image") cat = np.array(image) catg = np.array(huidu) k1 = np.array([[1,0,-1],[1,0,-1],[1,0,-1]]) #垂直边缘检测 k2 = np.array([[1,1,1],[0,0,0],[-1,-1,-1]]) #水平边缘I k3 = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]]) cat1 = convolve2d(catg, k1, boundary="symm", mode="same") cat2 = convolve2d(catg, k2, boundary="symm", mode="same") cat3 = convolve2d(catg, k3, boundary="symm", mode="same") plt.matshow(cat) plt.matshow(cat1) plt.matshow(cat2) plt.matshow(cat3)
实验结果:
5. 安装Tensorflow,keras
卷积神经网络也是通过一层一层的节点组织起来的。和全连接神经网络一样,卷积神经网络中的每一个节点都是一个神经元。在全连接神经网络中,每相邻两层之间的节点都是有边相连,于是一般会将每层全连接层中的节点组织成一列,这样方便显示连接结构。而对于卷积神经网络,相邻两次之间只有部分节点相连,为了展示每一层神经元的维度,一般会将每一层卷积层的节点组织成一个三维矩阵。
除了结构相似,卷积神经网络的输入输出以及训练流程与全连接神经网络也基本一致。以图形分类为例,卷积神经网络的输入层就是图像的原始像素,而输出层中的每一个节点代表了不同类别的可信度。这和全连接神经网络的输入输出是一致的。卷积神经网络和全连接神经网络的唯一区别就在于神经网络中相邻两次的连接方式。