14 深度学习-卷积

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

答:人工智能是最早出现的,也是最大、最外侧的同心圆;其次是机器学习,稍晚一点;最内侧,是深度学习,也是当今人工智能大爆炸的核心驱动。

14 深度学习-卷积

人工智能是目的,是结果;深度学习、机器学习是方法,是工具;

机器学习,一种实现人工智能的方法;机器学习都可以被精准地定义为:1.任务T;2.训练过程E;3.模型表现P

深度学习则是一种实现机器学习的技术;它适合处理大数据。深度学习使得机器学习能够实现众多应用,并拓展了人工智能的领域范畴。深度学习以“摧枯拉朽之势”席卷行业。深度学习,给人工智能以璀璨的未来。

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

答:

卷积神经网络也是通过一层一层的节点组织起来的。和全连接神经网络一样,卷积神经网络中的每一个节点就是一个神经元。在全连接神经网络中,每相邻两层之间的节点都有边相连,于是会将每一层的全连接层中的节点组织成一列,这样方便显示连接结构。而对于卷积神经网络,相邻两层之间只有部分节点相连,为了展示每一层神经元的维度,一般会将每一层卷积层的节点组织成一个三维矩阵。

       除了结构相似,卷积神经网络的输入输出以及训练的流程和全连接神经网络也基本一致,以图像分类为列,卷积神经网络的输入层就是图像的原始图像,而输出层中的每一个节点代表了不同类别的可信度。这和全连接神经网络的输入输出是一致的。类似的,全连接神经网络的损失函数以及参数的优化过程也都适用于卷积神经网络。因此,全连接神经网络和卷积神经网络的唯一区别就是神经网络相邻两层的连接方式。

      但是,通过我后面的学习,我发现全神经网络无法很好地处理好图像数据,然而卷积神经网络却很好地客服了这个缺点,使用全连接神经网络处理图像的最大问题就是:全连接层的参数太多,对于MNIST数据,每一张图片的大小是28*28*1,其中28*28代表的是图片的大小,*1表示图像是黑白的,有一个色彩通道。假设第一层隐藏层的节点数为500个,那么一个全连接层的神经网络有28*28*500+500=392500个参数,而且有的图片会更大或者是彩色的图片,这时候参数将会更多。参数增多除了导致计算速度减慢,还很容易导致过拟合的问题。所以需要一个合理的神经网络结构来有效的减少神经网络中参数的个数。卷积神经网络就可以更好的达到这个目的。

3.理解卷积计算。

以digit0为例,进行手工演算。

from sklearn.datasets import load_digits #小数据集8*8

digits = load_digits()

14 深度学习-卷积

4.理解卷积如何提取图像特征。

读取一个图像;

以下矩阵为卷积核进行卷积操作;

显示卷积之后的图像,观察提取到什么特征

import numpy as npimport cv2from matplotlib import pyplot as pltdef conv(image, kernel, mode=‘same‘):    if mode == ‘fill‘:        h = kernel.shape[0] // 2        w = kernel.shape[1] // 2        image = np.pad(image, ((h, h), (w, w), (0, 0)), ‘constant‘)    conv_b = _convolve(image[:, :, 0], kernel)    conv_g = _convolve(image[:, :, 1], kernel)    conv_r = _convolve(image[:, :, 2], kernel)    res = np.dstack([conv_b, conv_g, conv_r])    return resdef _convolve(image, kernel):    h_kernel, w_kernel = kernel.shape    h_image, w_image = image.shape    res_h = h_image - h_kernel + 1    res_w = w_image - w_kernel + 1    res = np.zeros((res_h, res_w), np.uint8)    for i in range(res_h):        for j in range(res_w):            res[i, j] = normal(image[i:i + h_kernel, j:j + w_kernel], kernel)    return resdef normal(image, kernel):    res = np.multiply(image, kernel).sum()    if res > 255:        return 255    elif res<0:        return 0    else:        return resif __name__ == ‘__main__‘:    path = ‘C:/Users/Administrator/Desktop/img/doramon.jpeg‘      # 原图像路径    image = cv2.imread(path)    #kernel 是一个3x3的边缘特征提取器,可以提取各个方向上的边缘    #kernel2 是一个5x5的浮雕特征提取器。    kernel1 = np.array([        [1, 1, 1],        [1, -7.5, 1],        [1, 1, 1]    ])    kernel2 = np.array([[-1, -1, -1, -1, 0],                        [-1, -1, -1, 0, 1],                        [-1, -1, 0, 1, 1],                        [-1, 0, 1, 1, 1],                        [0, 1, 1, 1, 1]])    res = conv(image, kernel1, ‘fill‘)    plt.imshow(res)    plt.savefig(‘./out/filtered_picdoramon01.jpg‘, dpi=600)    plt.show()

边缘特征提取

14 深度学习-卷积

14 深度学习-卷积

卷积API

scipy.signal.convolve2d

tf.keras.layers.Conv2D