【算法】 Keras 四步工作流程

2018-10-26 17:47:19 浏览数 (1)

笔者邀请您,先思考:

1 Keras如何设计和开发神经网络?

Francois Chollet在他的“用Python深度学习”一书中概述了用Keras分4步开发神经网络的过程。 让我们用一个简单的例子来看一下这个过程。

Francois Chollet在他的“深度学习Python”一书中概述了与Keras开发神经网络的概述。 通过本书前面的一个简单的MNIST示例,Chollet将网络构建过程简化为与Keras直接相关的4个主要步骤。

这不是机器学习工作流程,也不是用深度学习解决问题的完整框架。 这4个步骤仅适用于整体神经网络机器学习工作流程中Keras发挥作用的部分。 这些步骤如下:

  • 定义训练数据
  • 定义神经网络模型
  • 配置学习过程
  • 训练模型

虽然Chollet然后花了他的书的其余部分充分说明了使用它的必要细节,让我们通过一个例子初步看看工作流程。

1.定义训练数据

第一步很简单:您必须定义输入和目标张量。 更加困难的数据相关方面 - 不属于Keras特定的工作流程 - 实际上是查找或策划,然后清理和预处理某些数据,这是任何机器学习任务的关注点。 这是模型的一个步骤,通常不涉及调整模型超参数。

虽然我们的设计示例随机生成一些要使用的数据,但它捕获了此步骤的单一方面:定义输入(X_train)和目标(y_train)张量。

代码语言:javascript复制
1# Define the training data
2import numpy as np
3
4X_train = np.random.random((5000, 32))
5y_train = np.random.random((5000, 5))

Keras有两种定义神经网络的方法:Sequential模型类和Functional API。两者都有共同定义神经网络的目标,但采取不同的方法。

Sequential类用于定义网络层的线性堆栈,然后共同构成模型。在下面的示例中,我们将使用Sequential构造函数创建一个模型,然后使用add()方法将图层添加到其中。

创建模型的另一种方法是通过Functional API。与Sequential模型限定仅由线性堆栈中的层构成的网络相反,Functional API提供了更复杂模型所需的灵活性。这种复杂性最好地体现在多输入模型,多输出模型和类图模型的定义的用例中。

我们的示例中的代码使用Sequential类。它首先调用构造函数,然后调用add()方法将图层添加到模型中。第一个这样的调用添加了一个Dense类型的层(“只是你的常规密集连接的NN层”)。 Dense图层的输出大小为16,输入大小为INPUT_DIM,在我们的例子中为32(请查看上面的代码片段进行确认)。请注意,只有模型的第一层需要明确说明输入维度;以下层能够从先前的线性堆叠层推断出。按照标准做法,整流线性单元激活函数用于该层。

下一行代码定义了我们模型的下一个Dense层。请注意,此处未指定输入大小。但是,指定输出大小为5,这与我们的多类别分类问题中的假定类别数量相匹配(请再次检查上面的代码片段以确认)。由于这是我们用网络解决的多类分类问题,因此该层的激活功能设置为softmax。

代码语言:javascript复制
1# Define the neural network model
2from keras import models
3from keras import layers
4
5INPUT_DIM = X_train.shape[1]
6
7model = models.Sequential()
8model.add(layers.Dense(16, activation='relu', input_dim=INPUT_DIM))
9model.add(layers.Dense(5, activation='softmax'))

通过这几行,我们定义了Keras模型。 Sequential类的summary()方法提供了对我们模型的以下见解:

3.配置学习过程

通过定义训练数据和定义模型,可以配置学习过程。 这是通过调用Sequential模型类的compile()方法完成的。 编译需要3个参数:优化器,损失函数和度量列表。

在我们的示例中,设置为多类分类问题,我们将使用Adam优化器,分类的交叉熵损失函数,并且仅包括准确度度量。

代码语言:javascript复制
1# Configure the learning process
2from keras import optimizers
3from keras import metrics
4
5model.compile(optimizer='adam', 
6              loss='categorical_crossentropy', 
7              metrics=['accuracy'])

通过使用这些参数调用compile(),我们的模型现在已经配置了学习过程。

4.训练模型

此时,我们有训练数据和完全配置的神经网络来训练所述数据。 剩下的就是将数据传递给模型以便开始训练过程,这个过程通过迭代训练数据来完成。 通过调用fit()方法开始训练。

fit()至少需要2个参数:输入和目标张量。 如果没有提供更多内容,则会执行一次训练数据迭代,这通常对您没有任何好处。 因此,在实际的最小范围内,更常规的是定义一对附加参数:batch_size和epochs。 我们的例子包括这4个参数。

请注意,epoch精度并不是特别令人钦佩,这对于使用的随机数据是有意义的。

希望通过使用库作者规定并在此概述的简单的4步骤流程,可以解释Keras用于解决普通旧分类问题的方式。

附录:完整代码

代码语言:javascript复制
 1import numpy as np
 2from keras import models
 3from keras import layers
 4from keras import optimizers
 5from keras import metrics
 6
 7X_train = np.random.random((5000, 32))
 8y_train = np.random.random((5000, 5))
 9INPUT_DIM = X_train.shape[1]
10model = models.Sequential()
11model.add(layers.Dense(16, activation='relu', input_dim=INPUT_DIM))
12model.add(layers.Dense(5, activation='softmax'))
13model.compile(optimizer='adam', 
14              loss='categorical_crossentropy', 
15              metrics=['accuracy'])
16model.fit(X_train, y_train, 
17          batch_size=128, 
18          epochs=10)

作者:Matthew Mayo 原文链接: https://www.kdnuggets.com/2018/06/keras-4-step-workflow.html

版权声明:作者保留权利,严禁修改,转载请注明原文链接。

0 人点赞