1.简述人工智能、机器学习和深度学习三者的联系与区别。
人工智能 | 机器学习 | 深度学习 | |
区别 | 人工智能是目的,是结果 | 机器学习是一种方法、是工具 | 深度学习是一种方法、是工具 |
联系 | 1、机器学习是一种实现人工智能的方法 2、深度学习则是一种实现机器学习的技术,适合处理大数据 3、深度学习使得机器学习能够实现众多应用并拓展人工智能的领域范畴。 |
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 |
valid类型的卷积计算
补0后——same类型的卷积计算
补充一点:http://imgtec.eetrend.com/d6-imgtec/blog/2018-11/19122.html
相关运算是将卷积核在图像上滑动,对应位置相乘求和;卷积运算则先将卷积核旋转180度(行列均对称翻转),然后使用旋转后的滤波器进行相关运算。两者在计算方式上可以等价,有时为了简化,虽然名义上说是“卷积”,但实际实现时是相关运算。
所以有时候直接用卷积核在图像上进行滑动计算,得到的结果会与python代码运行的结果正负相反。
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
一个卷积核是提取一个特征,多个卷积核提取多个特征
卷积模式有三种:
①full
②same(用得最多)--------填充0或者边缘数据,做完卷积后和原矩阵规模一样
③valid------不填充,做完卷积后会比原矩阵的规模小
1 from PIL import Image
2 import matplotlib.pyplot as plt
3 import numpy as np
4 from scipy.signal import convolve2d #2维卷积
5 I=Image.open("./机器学习/William.jpg")
6 L=I.convert('L')#彩色图形转为灰度图
7 plt.imshow(L,cmap='gray')#灰度图展示
8 plt.show()
9 william=np.array(I)#转为数组
10 williamg=np.array(L)#转为数组,包括像素等等
11 k1=np.array([[1,0,-1],[1,0,-1],[1,0,-1]]) #垂直边缘检测
12 k2=np.array([[1,1,1],[0,0,0],[-1,-1,-1]]) #水平边缘
13 k3=np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])
14 william1=convolve2d(williamg,k1,boundary='symm',mode="same")
15 william2=convolve2d(williamg,k2,boundary='symm',mode="same")
16 william3=convolve2d(williamg,k3,boundary='symm',mode="same")
17 plt.figure(figsize=(8,8)) #自定义一个画布
18 plt.subplot(221) #是2x2的格子上第一块图形原图
19 plt.imshow(I)
20 plt.subplot(222) #是2x2的格子上第2块图形垂直边缘
21 plt.imshow(william1)
22 plt.subplot(223) #是2x2的格子上第3块图形水平边缘
23 plt.imshow(william2)
24 plt.subplot(224) #是2x2的格子上第4块图形
25 plt.imshow(william3)
运行结果图:
当卷积核为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]])是时,中间部分的边缘特征更加明显。
5. 安装Tensorflow,keras
参考:https://blog.csdn.net/u011119817/article/details/88309256
如果想在pycharm里面使用:安装好TensorFlow后,新建一个项目,将其interpreter改成anaconda的。
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()
5个组成部分:
输入层(原数据)
卷积层(提取特征映射,对应一个特定的图案,即卷积层需要的数据只是对应上一层的部分数据)
激活函数层(引入非线性)
池化层(把维度变小)
全连接层(所有特征拉成一条,做分类)
第一步:手写数字的图片大小(8,8)
第二步:可以做x个3*3的卷积核,提取出x个特征,得到x个8*8的卷积层
提取多少个特征是可以自己定的,卷积核大小也可以自己定,3*3也可以,5*5也可以,三种模式(full,same,valid)也是可以自己选择,然后能够得到结果就是x个y*y的卷积层
第三步:可以做池化,这样原来是8*8的卷积层会变成4*4的卷积层,规格缩小一半,得到x个4*4的卷积层
第四步:可以继续做卷积,或者做池化,自己设计
参考:
https://www.jianshu.com/p/afe485aa08ce
https://blog.csdn.net/junjun150013652/article/details/82217571