68

Keras 四步工作流程

 5 years ago
source link: http://shujuren.org/article/737.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

f6zABrb.jpg!web

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

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

ZBbE7bU.png!web

虽然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 keras 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()方法提供了对我们模型的以下见解:

2eieqij.png!web

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个参数。

JJnUFbq.jpg!web

请注意,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)

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

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

数据人网是数据人学习、交流和分享的平台http://shujuren.org 。专注于从数据中学习到有用知识。 平台的理念:人人投稿,知识共享;人人分析,洞见驱动;智慧聚合,普惠人人。 您在数据人网平台,可以1)学习数据知识;2)创建数据博客;3)认识数据朋友;4)寻找数据工作;5)找到其它与数据相关的干货。 我们努力坚持做原创,聚合和分享优质的省时的数据知识! 我们都是数据人,数据是有价值的,坚定不移地实现从数据到商业价值的转换!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK