前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【算法】 Keras 四步工作流程

【算法】 Keras 四步工作流程

作者头像
陆勤_数据人网
发布2018-10-26 17:47:19
6770
发布2018-10-26 17:47:19
举报

笔者邀请您,先思考:

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学与人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.定义训练数据
  • 3.配置学习过程
  • 4.训练模型
  • 附录:完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档