14-深度学习-卷积
1.简述人工智能、机器学习和深度学习三者的联系与区别
人工智能:
人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。人工智能将涉及到计算机科学、心理学、哲学和语言学等学科。可以说几乎是自然科学和社会科学的所有学科,其范围已远远超出了计算机科学的范畴,人工智能与思维科学的关系是实践和理论的关系,人工智能是处于思维科学的技术应用层次,是它的一个应用分支。
机器学习:
机器学习是人工智能的一个子集,是一种实现人工智能的方法。机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习最基本的做法,是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。
深度学习:
机器学习算法中最关键的是深度学习,一种实现机器学习的技术。深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。深度学习本来并不是一种独立的学习方法,其本身也会用到有监督和无监督的学习方法来训练深度神经网络。但由于近几年该领域发展迅猛,一些特有的学习手段相继被提出(如残差网络),因此越来越多的人将其单独看作一种学习的方法。
三者关系示意图
2. 全连接神经网络与卷积神经网络的联系与区别
全连接神经网络和卷积神经网络都是通过一层一层的节点组织起来的,每一个节点都是一个神经元。在全连接神经网络中,每相邻两层之间的节点都是有边相连,于是一般会将每层全连接层中的节点组织成一列,这样方便显示连接结构。但是对于卷积神经网络,相邻两次之间只有部分节点相连,为了展示每一层神经元的维度,一般会将每一层卷积层的节点组织成一个三维矩阵。
卷积神经网络的输入输出以及训练流程与全连接神经网络也基本一致。以图形分类为例,卷积神经网络的输入层就是图像的原始像素,而输出层中的每一个节点代表了不同类别的可信度。这和全连接神经网络的输入输出是一致的。卷积神经网络和全连接神经网络的唯一区别就在于神经网络中相邻两次的连接方式。
结构对比图
3.理解卷积计算
以digit0为例,进行手工演算。
from sklearn.datasets import load_digits #小数据集8*8
digits = load_digits()
0 | 0 | 5 | 13 | 9 | 1 | 0 | 0 |
0 | 0 | 13 | 15 | 10 | 15 | 5 | 0 |
0 | 3 | 15 | 2 | 0 | 11 | 8 | 0 |
0 | 4 | 12 | 0 | 0 | 8 | 8 | 0 |
0 | 5 | 8 | 0 | 0 | 9 | 8 | 0 |
0 | 4 | 11 | 0 | 1 | 12 | 7 | 0 |
0 | 2 | 14 | 5 | 10 | 12 | 0 | 0 |
0 | 0 | 6 | 13 | 10 | 0 | 0 | 0 |
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 |
卷积API
scipy.signal.convolve2d
tf.keras.layers.Conv2D
from PIL import Image import numpy as np from scipy.signal import convolve2d import matplotlib.pyplot as plt # 读取一个图像 I = Image.open(r'./data/壁纸.jpg') L = I.convert('L') pic=np.array(I) # 原图 picg=np.array(L) # 灰度图 # 卷积核 k1=np.array([[1,0,-1],[1,0,-1],[1,0,-1]]) # 垂直边缘检测 k2=np.array([[1,1,1],[0,0,0],[-1,-1,-1]]) # 水平边缘检测 k3=np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]]) # 中心检测 # boundary:边界填充方式,mode卷积类型 img1 = convolve2d(picg,k1,boundary='symm',mode='same') img2 = convolve2d(picg,k2,boundary='symm',mode='same') img3 = convolve2d(picg,k3,boundary='symm',mode='same')
原图 灰度图
垂直边缘检测图 水平边缘检测图 中心检测图
5. 安装Tensorflow,keras
参考:https://blog.csdn.net/u011119817/article/details/88309256
6. 设计手写数字识别模型结构,注意数据维度的变化。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPool2D
model = tf.keras.Sequential()
model.add(Conv2D(…))
model.add(MaxPool2D(…))
...
#可以上传手动演算的每层数据结构的变化过程。model.summary()
参考:
https://www.jianshu.com/p/afe485aa08ce
https://blog.csdn.net/junjun150013652/article/details/82217571
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D # 建立模型 model = Sequential() # C1卷积层 model.add( Conv2D( filters=16,#输出空间的维度 kernel_size=(5, 5),#卷积核大小 padding='same',#填充边界 input_shape=(28, 28, 1), activation='relu')) # S2池化层 model.add(MaxPool2D(pool_size=(2, 2))) # C3卷积层 model.add( Conv2D( filters=32, kernel_size=(5, 5), padding='same', activation='relu')) # S4池化层 model.add(MaxPool2D(pool_size=(2, 2))) model.add(Dropout(0.25)) #C5卷积层 model.add( Conv2D( filters=64, kernel_size=(5, 5), padding='same', activation='relu')) #平坦层 model.add(Flatten()) #输出层-全连接层 model.add(Dense(128, activation='relu')) model.add(Dropout(0.25)) #激活函数 model.add(Dense(10, activation='softmax')) model.summary()
运行结果: