Keras教程:用Python进行深度学习的终极入门指南

star2017 1年前 ⋅ 3464 阅读

在这个循序渐进的Keras教程中,你将学习如何在Python中构建卷积神经网络!

事实上,我们将训练一个用于手写数字的分类器,它在著名的MNIST数据集上夸大了99%的准确度。

在开始之前,我们应该注意的是,这本指南面向那些对应用深度学习感兴趣的初学者。

我们的目标是向您介绍在Python中构建神经网络最流行和最强大的库之一。这意味着我们将复习大量的理论和数学,但我们也会指出你有很好的学习资源。

 

在我们开始之前

推荐的先决条件

本指南推荐的先决条件是:

——基本机器学习概念的理解

——Python编程技巧

为了快速行动,我们假设你有这样的背景。


为什么是Keras?

Keras是我们推荐的Python深层学习库,尤其是初学者。它的简约、模块化的方法使得深入的神经网络运行起来是轻而易举的。你可以在这里读到更多关于它的内容:

用Python进行深度学习的Keras库


什么是深度学习?

深度学习是指具有多个隐藏层的神经网络,可以学习输入数据的日益抽象的表示。这显然是过于简单化了,但对我们来说,这是一个实际的定义。

例如,深度学习促进了计算机视觉的重大进展。我们现在能够对图像进行分类,在其中找到对象,甚至用字幕标记它们。为了做到这一点,具有许多隐藏层的深度神经网络可以从原始输入图像依次学习更复杂的特征:

——第一隐藏层可能只学习局部边缘图案。

——然后,每个后续层(或过滤器)学习更复杂的表示。

——最后,最后一层可以将图像分类为猫或袋鼠。

这些类型的深度神经网络被称为卷积神经网络。


什么是卷积神经网络?

简言之,卷积神经网络(CNN)是假设输入数据是图像的多层神经网络(有时高达17层或更多层)。

通过这样的要求,美国有线电视新闻网可以大大减少需要调整的参数的数量。因此,美国有线电视新闻网可以有效地处理高维的原始图像。

它们的基础力学超出了本教程的范围,但您可以在这里阅读更多关于它们的内容。


本教程不是什么:

这不是一门关于深度学习的完整课程。相反,本教程旨在让您从零到您的第一个卷积神经网络尽可能少头痛!

如果你有兴趣掌握深度学习背后的理论,我们推荐斯坦福大学的这门很棒的课程:

CS23 1N卷积神经网络用于视觉识别


在我们开始之前的一个快速提示:

我们试图使本教程尽可能精简,这意味着我们不会太多的细节,任何一个主题。如果您想了解更多关于函数或模块的情况,请在您旁边打开Keras文档是有帮助的。


Keras Tutorial内容

以下是使用Keras建立第一个美国有线电视新闻网的步骤:

1.建立你的环境。

2.安装Keras。

3.导入库和模块。

4.从MNIST加载图像数据。

5.为Keras预处理输入数据。

6.为Keras预处理类标签。

7.定义模型体系结构。

8.编译模型。

9.训练数据拟合模型。

10.测试数据的评估模型。

 

步骤1:设置你的环境。

首先,挂上一张激励海报:


接下来,确保您的计算机上安装了以下内容:

·Python 2.7 +(Python 3也很好,但是Python 2.7总体上更受数据科学的欢迎)

·NumPy

·Matplotlib(可选的,推荐用于探索性分析)

·Theano*(安装说明

·我们强烈建议通过Anaconda分布安装Python、NumPy、SciPy和Matplotlib。它带有所有这些包裹。

*注意:Tensorflow也被支持(作为Teano的替代物),但是我们坚持Teano来保持它简单。主要区别在于,在将数据导入网络之前,您需要稍微改变数据。


您可以检查是否正确安装了所有的东西:

转到你的命令行程序(MAC上的终端)并键入:

您将看到Python解释器:

接下来,您可以导入库并打印它们的版本:


步骤2:安装Keras。

如果我们不涉及如何安装Keras,它将不是一个Keras教程。

好消息是,如果你使用了Anaconda,那么你已经有了一个很好的扩展包管理系统,叫做pip。

您可以通过在命令行中键入来确认是否安装成功。它应该输出命令和选项列表。如果你没有pip,你可以在这里安装它。

一旦你有了pip,安装Keras就很容易了:


您可以确认安装正确:

哎呀。。。看来Keras版已经过时了。升级版本很容易:

完美,现在让我们开始一个新的Python文件,并命名为keras_cnn_example.py


步骤3:导入库和模块。

让我们从导入NumPy开始,为计算机的伪随机数生成器设置一个种子。这允许我们从脚本中复制结果:

接下来,我们将从Keras导入序贯模型类型。这只是一个神经网络层的线性堆栈,它非常适合我们在本教程中构建的前馈CNN类型。

接下来,让我们从Keras中导入“核心”层。这些是在几乎任何神经网络中使用的层:

然后,我们将从Keras导入美国有线电视新闻网层。这些是卷积层,将有助于我们有效地训练图像数据:

最后,我们将导入一些实用程序。这将有助于我们以后改变数据:

现在我们拥有了构建神经网络体系结构所需的一切。

 

步骤4:从MNIST加载图像数据。

MNIST是一个伟大的数据集,开始深入学习和计算机视觉。这是一个足够大的挑战来保证神经网络,但它可以在一台计算机上管理。我们在文章中更多地讨论了:初学者的6个有趣的机器学习项目

Keras库已经方便地包含了它。我们可以这样加载:

我们可以查看数据集的形状:

很好,所以我们在训练集中有60000个样本,每个图像都是28像素×28像素。我们可以通过绘制MaMattLIB中的第一个样本来证实这一点:

这里是图像输出:

一般来说,在使用计算机视觉时,在进行任何算法工作之前,对数据进行可视化绘图是有帮助的。这是一个快速健全的检查,可以防止容易避免的错误(如误解数据维度)。


步骤5:为Keras预处理输入数据。

当使用Teano后端时,必须显式声明输入图像的深度的维度。例如,具有所有3个RGB信道的全色图像将具有3的深度。

我们的MNIST图像只有1的深度,但是我们必须明确地声明。

换言之,我们希望将数据集从形状(n,宽度,高度)转换为(n,深度,宽度,高度)。

以下是我们如何做到这一点:

为了确认,我们可以再次输出xyCalm的尺寸:

输入数据的最后一个预处理步骤是将数据类型转换为float32,并将数据值规范化到范围[0,1]。

现在,我们的输入数据已经准备好进行模型训练。

 

步骤6:为Keras预处理类标签。

接下来,让我们看看我们的类标签数据的形状:

这可能是个问题。我们应该有10个不同的类,每个数字一个,但是看起来我们只有一个一维数组。让我们看一下前10个训练样本的标签:

这就是问题所在。y_train和y_test数据不被分割成10个不同的类标签,而是被表示为具有类值的单个数组。

我们可以很容易地解决这个问题:

现在我们可以再看一看:

搞定,好多了


步骤7:定义模型体系结构。

现在我们已经准备好定义我们的模型体系结构了。在实际的研发工作中,研究人员将花费大量的时间来研究模型体系结构。

为了保持这个教程的运行,我们不打算在这里讨论理论或数学。这是一个丰富和丰富的领域,我们建议CS21N类前面提到的那些谁想了解更多。

另外,当你刚开始的时候,你可以从学术论文中复制经过验证的体系结构或者使用现有的例子。下面是Keras中的示例实现列表。

让我们先声明一个连续的模型格式:

接下来,我们声明输入层:

输入形状参数应该是1个样本的形状。在这种情况下,与每个数字图像的(深度、宽度、高度)对应的是相同的(1, 28, 28)。

但是前3个参数代表什么呢?它们分别对应于要使用的卷积滤波器的数量、每个卷积核中的行数和每个卷积核中的列数。

*注意:默认情况下,步长为(1,1),并且可以使用“子采样”参数进行调整。

我们可以通过打印当前模型输出的形状来确认这一点:


接下来,我们可以简单地添加更多的层到我们的模型,就像我们正在建造LeGOS:

再一次,我们不会太投入这个理论,但是强调我们刚刚添加的辍学层是很重要的。这是一种规范我们的模型的方法,以防止过度拟合。你可以在这里了解更多。


MaxPooling2D是通过将一个2x2池滤波器滑过前一层并取2x2滤波器中4个值的最大值来减少模型中的参数数量的一种方法。

到目前为止,对于模型参数,我们添加了两个卷积层。为了完成我们的模型体系结构,让我们添加一个完全连接的层,然后输出层:

对于密集层,第一个参数是层的输出尺寸。Keras自动处理层间的连接。

注意,最终层的输出大小为10,对应于10个数字类。

还要注意,在将卷积层的权重传递到完全连接的致密层之前,必须将其压平(制成一维)。


下面是整个模型架构的共同点:

现在我们需要做的是定义损失函数和优化器,然后我们就可以训练它了。

 

步骤8:编译模型

快到终点了,困难的部分已经过去了。

我们只需要编译这个模型,我们就可以训练它了。当我们编译模型时,我们声明了损失函数和优化器(SGD,亚当等)。

Keras有各种各样的损失函数现成的优化器供选择。


第9步:拟合训练数据模型

为了适应模型,我们所要做的是宣布批大小和数量的历元要训练,然后通过我们的培训数据。

容易,嗯?

您还可以使用各种回调来设置早期停止规则、保存模型权重,或者记录每个训练阶段的历史。


第10步:评估测试数据模型

最后,我们可以在测试数据上评估我们的模型:

祝贺你。。。你已经完成了这个KRAS教程的结尾!

我们刚刚完成了Keras的核心功能的旋风之旅,但我们真的只是划破了表面。希望你已经获得了进一步探索Keras所提供的一切的基础。

为了继续学习,我们建议在Keras和斯坦福大学的计算机视觉类中学习其他示例模型。


完整的代码,从头到尾

这里是所有代码在一个地方,在一个脚本里。

# 3. Import libraries and modules
import numpy as np
np.random.seed(123)  # for reproducibility
 
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras.datasets import mnist
 
# 4. Load pre-shuffled MNIST data into train and test sets
(X_train, y_train), (X_test, y_test) = mnist.load_data()
 
# 5. Preprocess input data
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
 
# 6. Preprocess class labels
Y_train = np_utils.to_categorical(y_train, 10)
Y_test = np_utils.to_categorical(y_test, 10)
 
# 7. Define model architecture
model = Sequential()
 
model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28)))
model.add(Convolution2D(32, 3, 3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
 
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
 
# 8. Compile model
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
 
# 9. Fit model on training data
model.fit(X_train, Y_train, 
          batch_size=32, nb_epoch=10, verbose=1)
 
# 10. Evaluate model on test data
score = model.evaluate(X_test, Y_test, verbose=0)
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: