TensorFlow2简单入门- Keras 模型: Sequential 顺序模型和 Model 模型
发布日期:2021-07-01 04:20:50 浏览次数:2 分类:技术文章

本文共 5476 字,大约阅读时间需要 18 分钟。

文章目录

Keras 模型

Keras提供的模型,其中分为两类:

  • Sequential 顺序模型
  • Model 类模型(使用函数式 API 的 Model 类模型)

我们可以通过from tensorflow.keras import Sequential或者 from tensorflow.keras import Sequential来导入对应的模型。

Sequential 顺序模型


官方原文档:https://tensorflow.google.cn/api_docs/python/tf/keras/Sequential?hl=zh-cn


Sequential 模型结构: 层(layers)的线性堆栈。简单来说,它是一个简单的线性结构,没有多余分支,是多个网络层的堆叠。

函数原型:

tf.keras.Sequential(    layers=None, name=None)

Sequential 使用方法

一个简单示例

from tensorflow.keras import Sequentialfrom tensorflow.keras.layers import Dense, Activationmodel = Sequential([    Dense(32, input_shape=(784,)),    Activation('relu'),    Dense(10),    Activation('softmax')])
  • 其中,Dense是一个全连接层,它的激活函数默认为是linear线性函数
  • 激活函数可以通过 单独的激活层 实现,也可以通过 构建层时传递activation实现,这就是说:

上面的代码等价于

model = Sequential([    Dense(32, input_shape=(784,), activation='relu'),    Dense(10, activation='softmax')])

构建方法

除了上面写到的:

model = Sequential([    Dense(32, input_shape=(784,), activation='relu'),    Dense(10, activation='softmax')])

还可以写成:

model = Sequential()model.add(Dense(32, input_shape=(784,), activation='relu'))model.add(Dense(10, activation='softmax'))

input_shape 输入的形状

构建一个模型时,第一层需要给出期待的Input shape ,剩余的层次会自动判断。

  • input_shape是一个tuple格式的数据,可以是整数的tuple,也可以是None
  • input_shape中并没有batch dimension 批量维度
  • 2D层,例如Dense, 可以通过指定参数 input_dim (一个数字)来描述输入形状。
  • 3D层,通过参数 input_diminput_length来描述输入型状。
  • 参数input_shape 通过tuple的形式,指定输入形状。
  • 参数batch_size可以指定固定批量大小。
model = Sequential()model.add(Dense(32, input_dim=784))

等价于:

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

compile编译

在训练模型之前,我们需要通过compile来对学习过程进行配置。compile接收三个参数:

  • 优化器optimizer: 该参数可指定为已预定义的优化器名,如rmsprop(默认)、adagrad,或一个Optimizer类的对象,详情见
  • 损失函数loss: 该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如categorical_crossentropymse,也可以为一个损失函数。详情见
  • 指标列表metrics: 对分类问题,我们一般将该列表设置为metrics=['accuracy']。指标可以是一个预定义指标的名字,也可以是一个用户定制的函数.指标函数应该返回单个张量,或一个完成metric_name - > metric_value映射的字典.请参考
# 对于多分类问题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 Kdef mean_pred(y_true, y_pred):    return K.mean(y_pred)model.compile(optimizer='rmsprop',              loss='binary_crossentropy',              metrics=['accuracy', mean_pred])

训练

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 npdata = np.random.random((1000, 100))labels = np.random.randint(2, size=(1000, 1))# Train the model, iterating on the data in batches of 32 samplesmodel.fit(data, labels, epochs=10, batch_size=32)

函数原型:

fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None,validation_split=0.0, validation_data=None, shuffle=True, class_weight=None,sample_weight=None, initial_epoch=0, steps_per_epoch=None,validation_steps=None, validation_batch_size=None, validation_freq=1,max_queue_size=10, workers=1, use_multiprocessing=False)

其中常用的参数:

  • x: Numpy训练数据数组(如果模型有单个输入),或Numpy数组列表(如果模型有多个输入)。也可以是已经命名的输入图层的名称。 如果从框架原生张量(例如TensorFlow数据张量)进行馈送,则x可以是None(默认)。
  • y: 与x相似,只不过y代表的是目标标签(target label)。可以是:Numpy目标(标签)数据数组(如果模型具有单个输出)或Numpy数组列表(如果模型具有多个输出)或 输入图层的名称 或None.
  • batch_sizeIntegerNone,代表每个梯度更新的样本数,默认值为32。
  • epochsInteger,模型的训练的 时期数,每个epoch是对x,y的整个迭代。

Model 模型


官方原文档:https://tensorflow.google.cn/api_docs/python/tf/keras/Model?hl=zh-cn


Model 模型是带有函数API的,不是线性的,它是一个可以多输入、多输出的模型。

model = Model(inputs=a, outputs=b)model = Model(inputs=[a1, a2], outputs=[b1, b2, b3])
  • 通过inputs 和 outputs 构造多输入(a1,a2)和多输出(b1,b2,b3)的Model

Model 使用方法

与Sequential类似,有compile fit等方法。大致和上述的compile和fit一致。

compile 编译

函数原型:

compile(    optimizer='rmsprop', loss=None, metrics=None, loss_weights=None,    weighted_metrics=None, run_eagerly=None, steps_per_execution=None, **kwargs)
  • 优化器optimizer: 该参数可指定为已预定义的优化器名,如rmsprop(默认)、adagrad,或一个Optimizer类的对象,详情见
  • 损失函数oss: 与Sequential的compile的loss有所不同的是,Model的多个输出可以有多个loss,可以用过一个dict来声明:{'output_a':loss_func_1, 'output_b':loss_func_2}
  • 指标列表metrics: 对分类问题,我们一般将该列表设置为metrics=[‘accuracy’]。指标可以是一个预定义指标的名字,也可以是一个用户定制的函数.指标函数应该返回单个张量,或一个完成metric_name - > metric_value映射的字典.请参考

fit 训练

函数原型:

fit(    x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None,    validation_split=0.0, validation_data=None, shuffle=True, class_weight=None,    sample_weight=None, initial_epoch=0, steps_per_epoch=None,    validation_steps=None, validation_batch_size=None, validation_freq=1,    max_queue_size=10, workers=1, use_multiprocessing=False)

常用参数:

  • x:输入数据。如果模型只有一个输入,那么x的类型是numpy array,如果模型有多个输入,那么x的类型应当为list,list的元素是对应于各个输入的numpy array。如果模型的每个输入都有名字,则可以传入一个字典,将输入名与其输入数据对应起来。
  • y:标签,numpy array。如果模型有多个输出,可以传入一个numpy array的list。如果模型的输出拥有名字,则可以传入一个字典,将输出名与其标签对应起来。
  • batch_size:整数,指定进行梯度下降时每个batch包含的样本数。训练时一个batch的样本会被计算一次梯度下降,使目标函数优化一步。
  • epoch:整数,训练的轮数,训练数据将会被遍历epoch次。

Model实例

from keras.layers import Input, Densefrom 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)

转载地址:https://mtyjkh.blog.csdn.net/article/details/115690530 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:嵌入层 tf.keras.layers.Embedding() 介绍
下一篇:全连接层tf.keras.layers.Dense()介绍

发表评论

最新留言

很好
[***.229.124.182]2024年04月30日 05时13分00秒