首页 > 技术文章 > 14 深度学习-卷积

moxiaomo 2020-06-07 18:15 原文

1.简述人工智能、机器学习和深度学习三者的联系与区别。

 

 

  答:就范围而言:人工智能>机器学习>深度学习,并且它们三者也属于包含关系。

  人工智能:

  人工智能英文缩写为AI,它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学研究领域的一个重要分支,又是众多学科的一个交叉学科,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括语音识别、图像识别、机器人、自然语言处理、智能搜索和专家系统等等。

  机器学习:

  机器学习是人工智能领域的一个小分支,机器学习最基本的做法是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。类似人类在接触过很多事物、经历后获得的“经验”一样。例如有经验的老师在教书多年以后知道如何因材施教(经验)

  深度学习:

  深度学习就是一种实现机器学习的优秀技术。深度学习使得机器学习能够实现众多的应用,并拓展了人工智能的领域范围。最初的深度学习是利用深度神经网络来解决特征表达的一种学习过程。可大致理解为包含多个隐含层的神经网络结构。

 

2. 全连接神经网络与卷积神经网络的联系与区别。

  答:从广义上说深度学习的网络结构也是多层神经网络的一种。深度学习中最著名的卷积神经网络是由Lecun等人提出的,是第一个真正多层结构学习算法,它利用空间相对关系减少参数数目以提高训练性能。在原来多层神经网络的基础上,加入了特征学习部分,这部分是模仿人脑对信号处理上的分级的。具体操作就是在原来的全连接的层前面加入了部分连接的卷积层与降维层,而且加入的是一个层级:输入层-卷积层-降维层-卷积层-降维层- ....-隐藏层-输出层。深度学习做的步骤是:信号->特征->值,特征是由网络自己选择。

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

卷积核:

1 0 -1
1 0 -1
1 0 -1

 

演算结果:

 

 

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 matplotlib.pyplot as plt
import numpy as np
from scipy.signal import convolve2d

I = Image.open(r'E:\公园薰.jpg')
L = I.convert('L')

cat = np.array(I)  # 原图
plt.matshow(cat)
plt.show()
catg = np.array(L)  # 灰质图
plt.matshow(catg)
plt.show()

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卷积类型
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(cat1)
plt.show()
plt.matshow(cat2)
plt.show()
plt.matshow(cat3)
plt.show()

原图:

 

灰制图:

 

 垂直边缘检测:

 

 

水平边缘检测:

 

 中间检测:

 

 

 

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()

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D

# 建立模型
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=(5, 5), padding='same',input_shape=(28, 28, 1), activation='relu'))  # 一层卷积
model.add(MaxPool2D(pool_size=(2, 2)))  # 池化层1
model.add(Dropout(0.25))

model.add(Conv2D(filters=32, kernel_size=(5, 5), padding='same', activation='relu'))  # 二层卷积
model.add(MaxPool2D(pool_size=(2, 2)))  # 池化层2
model.add(Dropout(0.25))

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()

 

 

翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内)

推荐阅读