Python深度学习(基础入门到深度实践).docx
《Python深度学习(基础入门到深度实践).docx》由会员分享,可在线阅读,更多相关《Python深度学习(基础入门到深度实践).docx(321页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Python深度学习基础入门到深度实践1.1人工智能、机器学习与深度学习中所有红色像素”这个任务,使用RGB格式会更简单,而对于“降 低图像饱和度”这个任务,使用HSV格式那么更简单。机器学习模型 都是为输入数据寻找合适的表示一一对数据进行变换,使其更适合 手头的任务(比方分类任务)。我们来具体说明这一点。考虑x轴、y轴和在这个(x, y)坐标系 中由坐标表示的一些点,如图1-3所示。可以看到,图中有一些白点和一些黑点。假设我们想要开发一 个算法,输入一个点的坐标(儿y),就能够判断这个点是黑色还是白 色。在这个例子中: 输入是点的坐标; 预期输出是点的颜色; 衡量算法效果好坏的一种方法是,正
2、确分类的点所占的百分比。y图1-3 一些样本数据可用的方法有很多,这里这里我们需要的是一种新的数据表示,可以明确区分白点与黑点。 用的是坐标变换,如图1-4所示。在这个新的坐标系中,点的坐标可以看作数据的一种新的表示。这种表示很棒!利用这种新 的表示,用一条简单的规那么就可以描述黑/白分类问题:“x0的是黑点”或“xvO的是白点”。这 种新的表示基本上解决了该分类问题。在这个例子中,我们人为定义了坐标变换。但是,如果我们尝试系统性地搜索各种可能的坐 标变换,并用正确分类的点所占百分比作为反响信号,那么我们做的就是机器学习。机器学习中 的学习指的是,寻找更好数据表示的自动搜索过程。所有机器学习算
3、法都包括自动寻找这样一种变换:这种变换可以根据任务将数据转化为更加有 用的表示。这些操作可能是前面提到的坐标变换,也可能是线性投影(可能会破坏信息)、平移、非 线性操作(比方“选择所有Q0的点”),等等。机器学习算法在寻找这些变换时通常没有什么创 造性,而仅仅是遍历一组预先定义好的操作,这组操作叫作假设空间(hypothesis space)。这就是机器学习的技术定义:在预先定义好的可能性空间中,利用反响信号的指引来寻找输 入数据的有用表示。这个简单的想法可以解决相当多的智能任务,从语音识别到自动驾驶都能解 决。5.1卷积神经网络简介95重要的是,卷积神经网络接收形犬为(image_heigh
4、t, image_width, image_channe 1 s) 的输入张量(不包括批量维度)。本例中设置卷积神经网络处理大小为(28, 28, 1)的输入张量, 这正是MNIST图像的格式。我们向第一层传入参数input_shape= (28, 28, 1)来完成此设置。我们来看一下目前卷积神经网络的架构。 model.summary()Layer (type)Output ShapeParam #conv2d_l (Conv2D)(None, 26z 26, 32)320max_pooling2d_l (MaxPooling2D)(None, 13, 13, 32)0conv2d_2 (
5、Conv2D)(None, 11, llz 64)18496max_pooling2d_2 (MaxPooling2D)(None, 5, 5, 64)0conv2d_3 (Conv2D)(None, 3, 3, 64)36928Total params: 55,744 Trainable params: 55,744 Non-trainable params: 0可以看到,每个Conv2D层和MaxPooling2D层的输出都是一个形状为(height, width, channels)的3D张量。宽度和高度两个维度的尺寸通常会随着网络加深而变小。通道数量由传 入Conv2D层的第一个参数所
6、控制(32或64)。下一步是将最后的输出张量大小为(3, 3, 64)输入到一个密集连接分类器网络中, 即Dnse层的堆叠,你已经很熟悉了。这些分类器可以处理1D向量,而当前的输出是3D张量。 首先,我们需要将3D输出展平为1D,然后在上面添加几个Dns层。代码清单5-2在卷积神经网络上添加分类器model. add(layers.Flatten()model.add(layers.Dense (64, activation= * relu *)model.add(layers.Dense(10, activation= * softmax *)我们将进行10类别分类,最后一层使用带10个输出
7、的softmax激活。现在网络的架构如下。 model.summary()conv2d 3 (Conv2D)Layer (type)OutputShapeParam #conv2d_l (Conv2D)(None,26, 26, 32)320max_pooling2d_l (MaxPooling2D)(None,13, 13z 32)0conv2d_2 (Conv2D)(None,11, 11, 64)18496max_pooling2d_2 (MaxPooling2D)(None,5, 5, 64)0(None, 3, 3, 64)3692896第5章深度学习用于计算机视觉flatten_l
8、 (Flatten)(None,576)0dense_l (Dense)(None,64)36928dense_2 (Dense)(None,10)650Total params: 93,322Trainable params: 93,322Non-trainable params: 0如你所见,在进入两个Dense层之前,形状(3, 3, 64)的输出被展平为形状(576,)的 向量。下面我们在MNIST数字图像上训练这个卷积神经网络。我们将复用第2章MNIST例如中 的很多代码。代码清单5-3 在MNIST图像上训练卷积神经网络from keras.datasets import mnis
9、tfrom keras.utils import to_categorical(train_images, train_labels), (test_imagesz test_labels) = mnist.load_data()train_images = train_images.reshape(60000, 28, 28z 1)train_images = train_images.astype(* float321) / 255test_images = test_images.reshape(10000, 28, 28, 1)test_images = test_images.ast
10、ype(* float32 f) / 255train_labels = to_categorical(train_labels)test_labels = to_categorical(test_labels)model. compile (optimizer= rmsprop ,loss= * categorical_crossentropy, metrics=1 accuracy1)model.fit(train_imagesz train_labelsz epochs=5, batch_size=64)我们在测试数据上对模型进行评估。 test_loss, test_acc = mod
11、el.evaluate(test_imagesz test_labels) test_acc0.99080000000000001第2章密集连接网络的测试精度为97.8%,但这个简单卷积神经网络的测试精度到达了99.3%,我们将错误率降低了68% (相比照例)。相当不错!与密集连接模型相比,为什么这个简单卷积神经网络的效果这么好?要回答这个问题,我们 来深入了解Conv2D层和MaxPooling2D层的作用。卷积运算密集连接层和卷积层的根本区别在于,Dense 层从输入特征空间中学到的是全局模式5.1卷积神经网络简介97(比方对于MNIST数字,全局模式就是涉及所有像素的模式),而卷积层学到
12、的是局部模式(见图 5-1),对于图像来说,学到的就是在输入图像的二维小窗口中发现的模式。在上面的例子中,这 些窗口的大小都是3义3。图5-1 图像可以被分解为局部模式,如边缘、纹理等这个重要特性使卷积神经网络具有以下两个有趣的性质。口卷积神经网络学到的模式具有平移不变性(translation invariant)o卷积神经网络在图像 右下角学到某个模式之后,它可以在任何地方识别这个模式,比方左上角。对于密集连接网络来说,如果模式出现在新的位置,它只能重新学习这个模式。这使得卷积神经网 络在处理图像时可以高效利用数据(因为视觉世界从根本上具有平移不变性),它只需 要更少的训练样本就可以学到具
13、有泛化能力的数据表示。 卷积神经网络可以学到模式的空间层次结构(spatial hierarchies of patterns),见图5-2。 第一个卷积层将学习较小的局部模式(比方边缘),第二个卷积层将学习由第一层特征 组成的更大的模式,以此类推。这使得卷积神经网络可以有效地学习越来越复杂、越来越 抽象的视觉概念(因为视觉世界从根本上具有空间层次结构)。对于包含两个空间轴(高度和宽度)和一个深度轴(也叫通道轴)的3D张量,其卷积也叫 特征图(feature m叩)。对于RGB图像,深度轴的维度大小等于3,因为图像有3个颜色通道:红色、 绿色和蓝色。对于黑白图像(比方MNIST数字图像),深度
14、等于1 (表示灰度等级)。卷积运算从 输入特征图中提取图块,并对所有这些图块应用相同的变换,生成输出特征图(output feature map)o该输出特征图仍是一个3D张量,具有宽度和高度,其深度可以任意取值,因为输出深度 是层的参数,深度轴的不同通道不再像RGB输入那样代表特定颜色,而是代表过滤器(filter)o过滤器对输入数据的某一方面进行编码,比方,单个过滤器可以从更高层次编码这样 一个概念:“输入中包含一张脸。”98第5章 深度学习用于计算机视觉图5-2 视觉世界形成了视觉模块的空间层次结构:超局部的边缘组合成局部的对象, 比方眼睛或耳朵,这些局部对象又组合成高级概念,比方“猫”
15、在MNIST例如中,第一个卷积层接收一个大小为(28, 28, 1)的特征图,并输出一个大 小为(26, 26, 32)的特征图,即它在输入上计算32个过滤器。对于这32个输出通道,每个 通道都包含一个26X26的数值网格,它是过滤器对输入的响应图(response m印),表示这个过滤 器模式在输入中不同位置的响应(见图5-3)。这也是特征图这一术语的含义:深度轴的每个维 度都是一个特征(或过滤器),而2D张量output :, :, n是这个过滤器在输入上的响应的 二维空间图(map)。图5-3响应图的概念:某个模式在输入中的不同位置是否存在的二维图卷积由以下两个关键参数所定义。口从输入中
16、提取的图块尺寸:这些图块的大小通常是3X3或5X5。本例中为3义3,这是 很常见的选择。 输出特征图的深度:卷积所计算的过滤器的数量。本例第一层的深度为32,最后一层的 深度是64。5.1卷积神经网络简介99对于Keras的Conv2D层,这些参数都是向层传入的前几个参数:Conv2D (output_depth, (window_height, window_width)。卷积的工作原理:在3D输入特征图上滑动(slide)这些3X3或5X5的窗口,在每个可能 的位置停止并提取周围特征的3D图块形状为(window_hight, window_width, input_ depth) o然后
17、每个3D图块与学到的同一个权重矩阵叫作卷积核(convolution kernel)做张 量积,转换成形状为(output_depth,)的ID向量。然后对所有这些向量进行空间重组,使 其转换为形状为(height, width, output_depth)的3D输出特征图。输出特征图中的每 个空间位置都对应于输入特征图中的相同位置(比方输出的右下角包含了输入右下角的信息)。举个例子,利用3X3的窗口,向量output izj ,:来自3D 图块 input i-1: i + lz j-1: j+1, : o整个过程详见图5-4。图5-4卷积的工作原理3x3注意,输出的宽度和高度可能与输入的宽
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 深度 学习 基础 入门 实践
限制150内