Press "Enter" to skip to content

Keras 四步工作流程

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

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

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

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


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

1.定义训练数据

第一步很简单:您必须定义输入和目标张量。 更加困难的数据相关方面 – 不属于Keras特定的工作流程 – 实际上是查找或策划,然后清理和预处理某些数据,这是任何机器学习任务的关注点。 这是模型的一个步骤,通常不涉及调整模型超参数。
虽然我们的设计示例随机生成一些要使用的数据,但它捕获了此步骤的单一方面:定义输入(X_train)和目标(y_train)张量。
# Define the training data
import numpy as np
X_train = np.random.random((5000, 32))
y_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。
# Define the neural network model
from import models
from keras import layers
INPUT_DIM = X_train.shape[1]
model = models.Sequential()
model.add(layers.Dense(16, activation=’relu’, input_dim=INPUT_DIM))
model.add(layers.Dense(5, activation=’softmax’))
通过这几行,我们定义了Keras模型。 Sequential类的summary()方法提供了对我们模型的以下见解:

3.配置学习过程

通过定义训练数据和定义模型,可以配置学习过程。 这是通过调用Sequential模型类的compile()方法完成的。 编译需要3个参数:优化器,损失函数和度量列表。
在我们的示例中,设置为多类分类问题,我们将使用Adam优化器,分类的交叉熵损失函数,并且仅包括准确度度量。
# Configure the learning process
from keras import optimizers
from keras import metrics
model.compile(optimizer=’adam’,
loss=’categorical_crossentropy’,
metrics=[‘accuracy’])
通过使用这些参数调用compile(),我们的模型现在已经配置了学习过程。

4.训练模型

此时,我们有训练数据和完全配置的神经网络来训练所述数据。 剩下的就是将数据传递给模型以便开始训练过程,这个过程通过迭代训练数据来完成。 通过调用fit()方法开始训练。
fit()至少需要2个参数:输入和目标张量。 如果没有提供更多内容,则会执行一次训练数据迭代,这通常对您没有任何好处。 因此,在实际的最小范围内,更常规的是定义一对附加参数:batch_size和epochs。 我们的例子包括这4个参数。

请注意,epoch精度并不是特别令人钦佩,这对于使用的随机数据是有意义的。
希望通过使用库作者规定并在此概述的简单的4步骤流程,可以解释Keras用于解决普通旧分类问题的方式
完整代码:
import numpy as np
from keras import models
from keras import layers
from keras import optimizers
from keras import metrics
X_train = np.random.random((5000, 32))
y_train = np.random.random((5000, 5))
INPUT_DIM = X_train.shape[1]
model = models.Sequential()
model.add(layers.Dense(16, activation=’relu’, input_dim=INPUT_DIM))
model.add(layers.Dense(5, activation=’softmax’))
model.compile(optimizer=’adam’,
loss=’categorical_crossentropy’,
metrics=[‘accuracy’])
model.fit(X_train, y_train,
batch_size=128,
epochs=10)

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注