如何用Keras建立多层感知器神经网络模型

122 阅读6分钟

Keras中的神经网络模型

Keras库的重点是一个模型。

最简单的模型被定义在Sequential类中,它是一个线性的Layers堆栈。

你可以创建一个Sequential模型并在构造函数中定义所有的层,例如。

from tensorflow.keras.models import Sequential
model = Sequential(...)

一个更有用的成语是创建一个序列模型,并按照你想执行的计算顺序添加你的层,例如:。

from tensorflow.keras.models import Sequential
model = Sequential()
model.add(...)
model.add(...)
model.add(...)

模型输入

你模型中的第一层必须指定输入的形状。

这是输入属性的数量,由input_dim参数定义。这个参数期望是一个整数。

例如,你可以用密集型层的8个输入来定义输入,如下所示。

Dense(16, input_dim=8)

模型层

不同类型的层有一些共同的属性,特别是它们的权重初始化方法和激活函数。

权重初始化

一个层所使用的初始化类型是在init参数中指定的。

一些常见的层初始化类型包括。

  • "统一"。权重被初始化为0到0.05之间的均匀随机小值。
  • "normal":权重被初始化为小的高斯随机值(平均值为零,标准差为0.05)。
  • ""。所有权重都被设置为零值。

你可以在初始化的用法页面上看到支持的初始化技术的完整列表。

激活函数

Keras支持一系列标准的神经元激活函数,例如:softmax、rectified linear、tanh和sigmoid。

你通常在激活参数中指定一个层所使用的激活函数的类型,该参数需要一个字符串值。

你可以在激活的用法页面上看到Keras支持的激活函数的完整列表。

有趣的是,你也可以创建一个激活对象,并将其直接添加到你的模型中,在你的层之后,将该激活应用于该层的输出。

图层类型

对于标准的神经网络,有大量的核心层类型。

你可以选择一些常见和有用的层类型。

  • 密集层。全连接层,是多层感知器模型中最常用的层类型。
  • 辍学。对模型应用dropout,将一部分输入设置为零,以减少过度拟合。
  • 合并。将多个层的输出合并为一个单层的输入。

你可以在核心层页面上了解到Keras核心层的完整列表。

模型编译

一旦你定义了你的模型,它就需要被编译。

这将创建由TensorFlow使用的有效结构,以便在训练期间有效地执行您的模型。具体来说,TensorFlow将你的模型转换为一个图,所以训练可以有效地进行。

你使用compile()函数编译你的模型,它接受三个重要属性。

  1. 模型优化器。
  2. 损失函数。
  3. 度量。
model.compile(optimizer=..., loss=..., metrics=...)

1.模型优化器

优化器是用于更新模型中权重的搜索技术。

你可以创建一个优化器对象,并通过优化器参数将其传递给编译函数。这允许你用它自己的参数配置优化程序,如学习率。比如说。

from tensorflow.keras.optimizers import SGD
sgd = SGD(...)
model.compile(optimizer=sgd)

你也可以通过向优化器参数指定优化器的名称来使用优化器的默认参数。比如说。

model.compile(optimizer='sgd')

你可能想选择的一些流行的梯度下降优化器包括。

  • SGD:随机梯度下降,支持动量。
  • RMSprop:由Geoff Hinton提出的自适应学习率优化方法。
  • Adam:自适应动量估计法(Adam),也使用自适应学习率。

你可以在优化器的使用页面上了解Keras所支持的所有优化器。

你可以在Sebastian Ruder的帖子An overview of gradient descent optimization algorithms中的Gradient descent optimization algorithms部分了解更多关于不同的梯度下降方法。

2.模型损失函数

损失函数,也叫目标函数,是对优化器用来浏览权重空间的模型的评价。

你可以通过损失参数向编译函数指定要使用的损失函数的名称。一些常见的例子包括。

  • mse':表示平均平方误差。
  • 'binary_crossentropy':用于二进制对数损失(logloss)。
  • 'categorical_crossentropy':用于多类对数损失(logloss)。

你可以在Losses页面上了解更多关于Keras支持的损失函数。

3.模型度量

指标是由模型在训练期间评估的。

目前只支持一个指标,那就是准确性。

模型训练

模型在NumPy数组上使用fit()函数进行训练,例如

model.fit(X, y, epochs=..., batch_size=...)

训练时既要指定训练的历时数,又要指定批次大小。

  • Epochs(nb_epoch)是模型接触训练数据集的次数。
  • 批量大小(batch_size)是在进行权重更新之前显示给模型的训练实例的数量。

拟合函数还允许在训练期间对模型进行一些基本评估。你可以设置validation_split值来保留训练数据集的一部分,以便在每个历时中进行验证评估,或者提供一个validation_data元组(X, y)的数据来评估。

拟合模型会返回一个历史对象,其中包含每个历时为模型计算的细节和度量。这可用于绘制模型性能图。

模型预测

一旦你训练好了你的模型,你可以用它来对测试数据或新数据进行预测。

你可以从你训练的模型中计算出许多不同的输出类型,每一种都是通过对你的模型对象的不同函数调用来计算。例如。

  • model.evaluate()。计算输入数据的损失值。
  • model.predict()。为输入数据生成网络输出。
  • model.predict_classes()。为输入数据生成类的输出。
  • model.predict_proba()。为输入数据生成类的概率。

例如,在分类问题上,你将使用predict_classes()函数来对测试数据或新的数据实例进行预测。

在Python中的深度学习方面需要帮助?

参加我为期两周的免费电子邮件课程,了解MLPs、CNNs和LSTMs(含代码)。

现在就点击注册,还可以获得该课程的免费PDF电子书版本。

现在开始你的免费迷你课程

总结模型

一旦你对你的模型感到满意,你就可以最终确定它。

你可能希望输出一个你的模型的摘要。例如,你可以通过调用summary函数来显示一个模型的摘要,例如。

model.summary()

你也可以使用get_config()函数检索模型配置的概要,例如:。

model.get_config()

最后,你可以直接创建一个你的模型结构的图像。比如说

from keras.utils.vis_utils import plot_model
plot(model, to_file='model.png')

总结

在这篇文章中,你发现了Keras的API,你可以用它来创建人工神经网络和深度学习模型。

具体来说,你了解了Keras模型的生命周期,包括。

  • 构建一个模型。
  • 创建和添加层,包括权重初始化和激活。
  • 编译模型,包括优化方法、损失函数和度量。
  • 拟合模型,包括 epochs 和 batch size
  • 模型预测。
  • 总结模型。