机器学习第14次作业
1.简述人工智能、机器学习和深度学习三者的联系与区别。
机器学习是一种实现人工智能的方法,深度学习是一种实现机器学习的技术。
2. 全连接神经网络与卷积神经网络的联系与区别。
卷积神经网络也是通过一层一层的节点组织起来的。和全连接神经网络一样,卷积神经网络中的每一个节点就是一个神经元。在全连接神经网络中,每相邻两层之间的节点都有边相连,于是会将每一层的全连接层中的节点组织成一列,这样方便显示连接结构。而对于卷积神经网络,相邻两层之间只有部分节点相连,为了展示每一层神经元的维度,一般会将每一层卷积层的节点组织成一个三维矩阵。
除了结构相似,卷积神经网络的输入输出以及训练的流程和全连接神经网络也基本一致,以图像分类为列,卷积神经网络的输入层就是图像的原始图像,而输出层中的每一个节点代表了不同类别的可信度。这和全连接神经网络的输入输出是一致的。类似的,全连接神经网络的损失函数以及参数的优化过程也都适用于卷积神经网络。因此,全连接神经网络和卷积神经网络的唯一区别就是神经网络相邻两层的连接方式。
但是,通过我后面的学习,我发现全神经网络无法很好地处理好图像数据,然而卷积神经网络却很好地客服了这个缺点,使用全连接神经网络处理图像的最大问题就是:全连接层的参数太多,对于MNIST数据,每一张图片的大小是28*28*1,其中28*28代表的是图片的大小,*1表示图像是黑白的,有一个色彩通道。假设第一层隐藏层的节点数为500个,那么一个全连接层的神经网络有28*28*500+500=392500个参数,而且有的图片会更大或者是彩色的图片,这时候参数将会更多。参数增多除了导致计算速度减慢,还很容易导致过拟合的问题。所以需要一个合理的神经网络结构来有效的减少神经网络中参数的个数。卷积神经网络就可以更好的达到这个目的。
————————————————
版权声明:本文为CSDN博主「AI-CS研究生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42414405/article/details/90642444
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 |
||||||||||||
-33 |
-27 |
14 |
4 |
6 |
26 |
|||||||||
-40 |
-10 |
30 |
-17 |
-11 |
34 |
|||||||||
-35 |
10 |
35 |
-26 |
-24 |
28 |
|||||||||
-31 |
13 |
30 |
-29 |
-22 |
29 |
|||||||||
-32 |
6 |
22 |
-28 |
-4 |
33 |
|||||||||
-31 |
-11 |
10 |
-6 |
14 |
24 |
|||||||||
1 |
1 |
1 |
||||||||||||
0 |
0 |
0 |
||||||||||||
-1 |
-1 |
-1 |
||||||||||||
-13 |
-2 |
10 |
10 |
-9 |
-18 |
|||||||||
-3 |
-12 |
|
|
24 |
4 |
|||||||||
5 |
|
9 |
4 |
|
2 |
|||||||||
1 |
|
0 |
5 |
|
-11 |
|||||||||
-3 |
8 |
|
|
-5 |
5 |
|||||||||
9 |
-4 |
-17 |
10 |
10 |
19 |
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
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from scipy.signal import convolve2d
def plant(img, kernel):
img = convolve2d(img, kernel, boundary='symm', mode='same')
return img
if __name__ == '__main__':
kernel1 = np.array([
[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]
])
kernel2 = np.array([
[1, 1, 1],
[0, 0, 0],
[-1, -1, -1]
])
kernel3 = np.array([
[1, 0, -1],
[1, 0, -1],
[1, 0, -1]
])
image = Image.open(r'G:\\yys\\Onmyoji\\a.jpg')
img = np.array(image)
img4 = image.convert('L')
img1 = plant(img4, kernel1)
img2 = plant(img4, kernel2)
img3 = plant(img4, kernel3)
# 显示卷积之后的图像
plt.matshow(image)
plt.matshow(img1)
plt.matshow(img2)
plt.matshow(img3)
plt.matshow(img4)
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()