Keras深度学习模型Sequential和Model详解

 更新时间:2023年08月23日 10:53:42   作者:小锋学长生活大爆炸  
这篇文章主要介绍了Keras深度学习模型Sequential和Model详解,在Keras中有两种深度学习的模型:序列模型(Sequential)和通用模型(Model),差异在于不同的拓扑结构,,需要的朋友可以参考下

Keras模型

在Keras中有两种深度学习的模型:序列模型(Sequential)和通用模型(Model)。

差异在于不同的拓扑结构。

Sequential序列模型

序列模型各层之间是依次顺序的线性关系(多个网络层的线性堆叠),模型结构通过一个列表来制定,或者逐层添加网络结构。

通过将网络层实例的列表传递给 Sequential 的构造器,来创建一个 Sequential 模型。

# 导入类
from keras.models import Sequential
from keras.layers import Dense, Activation
# 构建Sequential模型
# Model是keras最核心的数据结构
model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])

也可以简单地使用 .add() 方法将各层添加到模型中

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))

指定输入数据的尺寸 在第一层,模型需要知道它所期望的输入尺寸。

而在后面的层中,模型可以自动地推断尺寸。

  • 方式1:传递一个input_shape参数给第一层。它是一个表示尺寸的元组(一个由整数或None组成的元组,其中None表示可能为任何正整数)。在input_shape中不包含数据的batch大小。
  • 方式2:某些2D层,如Dense,支持通过参数input_dim指定输入尺寸;某些3D时序层支持input_dim和input_length参数。
  • 方式3:如果你需要为你的输入制定一个固定大小的batch(对stateful RNNs很有用),可以传递一个batch_size参数给一个层。如果你同时将batch_size=32和input_shape=(6,8)传递给一个层,那么每一批输入的尺寸就为(32,6,8)。

因此,如下代码是等价的:

model.add(Dense(32, input_shape=(784,))
model.add(Dense(32, input_dim=784))

模型编译

在训练模型之前,通过 compile 方法配置学习过程,接收的参数:

  • 优化器optimizer:可以是现有优化器的字符串标识符(如rmspropadagrad),也可以是Optimizer类的示例,见optimizers
  • 损失函数loss:模型试图最小化的目标函数。他可以使现有损失函数的字符串标识符(如categorical_crossentropymse),也可以是一个目标函数,见losses
  • 评估标准metrics:对于任何分类问题,都希望将其设置为metrics = ['accuracy']。他可以使现有的字符串标识符,也可以是自定义的评估标准函数。
# 分类问题
model.compile(
    optimizer='rmsprop',
    loss='categorical_crossentropy',
    metrics=['accuracy']
)
# 二分类问题
model.compile(
    optimizer='rmsprop',
    loss='binary_crossentropy',
    metrics=['accuracy']
)
# 均方误差回归问题
model.compile(
    optimizer='rmsprop',
    loss='mse'
)
# 自定义评估标准函数
import keras.backend as K
def mean_pred(y_true, y_pred):
    return K.mean(y_pred)
model.compile(
    optimizer='rmsprop',
    loss='binary_crossentropy',
    metrics=['accuracy', mean_pred]
)

模型训练

在输入数据和标签的Numpy矩阵上进行训练。为了训练这一个模型,通常会使用 fit 函数,见文档

# 对于具有2个类的单输入模型(二进制分类)
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
             loss='binary_crossentropy',
             metrics=['accuracy'])
# 生成虚拟数据
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))
# 训练模型,以32个样本为一个batch进行迭代
model.fit(data, labels, epochs=10, batch_size=32)
Epoch 1/10
1000/1000 [==============================] - 0s 105us/step - loss: 0.7028 - accuracy: 0.4980
Epoch 2/10
1000/1000 [==============================] - 0s 32us/step - loss: 0.6932 - accuracy: 0.5380
Epoch 3/10
1000/1000 [==============================] - 0s 34us/step - loss: 0.6862 - accuracy: 0.5510
Epoch 4/10
1000/1000 [==============================] - 0s 34us/step - loss: 0.6842 - accuracy: 0.5580
Epoch 5/10
1000/1000 [==============================] - 0s 31us/step - loss: 0.6834 - accuracy: 0.5570
Epoch 6/10
1000/1000 [==============================] - 0s 34us/step - loss: 0.6799 - accuracy: 0.5720
Epoch 7/10
1000/1000 [==============================] - 0s 34us/step - loss: 0.6760 - accuracy: 0.5860
Epoch 8/10
1000/1000 [==============================] - 0s 37us/step - loss: 0.6742 - accuracy: 0.5920
Epoch 9/10
1000/1000 [==============================] - 0s 35us/step - loss: 0.6702 - accuracy: 0.5810
Epoch 10/10
1000/1000 [==============================] - 0s 36us/step - loss: 0.6686 - accuracy: 0.6050
<keras.callbacks.callbacks.History at 0x1e1c574b888>

Model通用模型

通用模型可以设计非常复杂、任意拓扑结构的神经网络,例如有向无环网络、共享层网络等。

相比于序列模型只能依次线性逐层添加,通用模型能够比较灵活地构造网络结构,设定各层级的关系。

from keras.layers import Input, Dense
from keras.models import Model
# 定义输入层,确定输入维度
input = input(shape = (784, ))
# 2个隐含层,每个都有64个神经元,使用relu激活函数,且由上一层作为参数
x = Dense(64, activation='relu')(input)
x = Dense(64, activation='relu')(x)
# 输出层
y = Dense(10, activation='softmax')(x)
# 定义模型,指定输入输出
model = Model(input=input, output=y)
# 编译模型,指定优化器,损失函数,度量
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
# 模型拟合,即训练
model.fit(data, labels)

到此这篇关于Keras深度学习模型Sequential和Model详解的文章就介绍到这了,更多相关Keras深度学习模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python控制台显示时钟的示例

    python控制台显示时钟的示例

    这篇文章主要介绍了python控制台显示时钟的示例,需要的朋友可以参考下
    2014-02-02
  • python破解zip加密文件的方法

    python破解zip加密文件的方法

    这篇文章主要介绍了python破解zip加密文件的方法,本文图文并茂给大家介绍的非常详细,需要的朋友可以参考下
    2018-05-05
  • Python Web开发模板引擎优缺点总结

    Python Web开发模板引擎优缺点总结

    这篇文章主要介绍了Python Web开发模板引擎优缺点总结,需要的朋友可以参考下
    2014-05-05
  • python验证公网ip与内网ip的实现示例

    python验证公网ip与内网ip的实现示例

    本文主要介绍了python验证公网ip与内网ip的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Python global全局变量函数详解

    Python global全局变量函数详解

    本文详解了global全局变量函数的用法,还有global的作用。global全局变量在一个脚本中全部作用域都可以访问,用法很方便,希望本文对大家有所帮助
    2018-09-09
  • PyQt5 matplotlib画图不刷新的解决方案

    PyQt5 matplotlib画图不刷新的解决方案

    这篇文章主要介绍了PyQt5 matplotlib画图不刷新的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python实现遍历目录的两张方法总结

    Python实现遍历目录的两张方法总结

    我们有时想直接查看文件夹里的所有文件,但使用正常的方法太麻烦了,于是本文开发出了两个python程序,可以遍历目录,有需要的小伙伴可以参考下
    2024-02-02
  • Python ldap实现登录实例代码

    Python ldap实现登录实例代码

    今天给大家分享python idap实现登录的实例代码,代码简单易懂,需要的朋友一起看看吧
    2016-09-09
  • 浅析Python中的套接字编程

    浅析Python中的套接字编程

    不可否认,互联网已成为“存在之魂”,其活动以“连接”或“网络”为特征。使用套接字的最关键的基础之一,使这些网络成为可能。本文涵盖了有关使用Python进行套接字编程的所有领域。套接字可以帮助您建立这些连接,而Python无疑可以简化连接
    2021-06-06
  • python高级内置函数用法实例

    python高级内置函数用法实例

    在本篇文章里小编给大家整理的是一篇关于python高级内置函数用法实例内容,有兴趣的朋友们可以学参考下。
    2021-09-09

最新评论