概述
顺序模型,是多个网络层的线性堆叠
继承tf.keras.Model类
官方文档:
https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/Sequential
属性
layers
添加的图层列表
层可以是:Dense类
添加的例子:
model=tf.keras.Sequential()
model.add(tf.keras.layers.Dense(1,input_shape=(1,)))
使用例子:
history=model.fit(parent_height,son_height,epochs=500)
print(model.layers[0].get_weights())
当有m个神经元,n个输入值时,返回n行m列数组
主要方法
初始化
__init__(
layers=None,
name=None
)
参数
- layers:要添加的层对象,list类型
- name:名字
add()
添加层
add(layer)
参数
- layer:层对象
summary()
显示摘要信息
compile()
编译,配置模型用于训练
详见父类的 compile()
https://www.malaoshi.top/show_1EF4BCMB2wb1.html
predict()
预测。模型训练好后,进行预测
predict(
x,
batch_size=None,
verbose=0,
steps=None,
callbacks=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False
)
参数说明:
- x:输入样本,类型:numpy数组,TensorFlow 张量等
返回值
- Numpy数组
evaluate()
对 测试数据 进行评测,返回 损失值 和 度量值
度量值:在compile()的metrics中设置
evaluate(
x=None,
y=None,
batch_size=None,
verbose=1,
sample_weight=None,
steps=None,
callbacks=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False
)
参数说明:
- x:样本特征数据
- y:与样本对应的目标数据
返回:
损失值 和 准确率
例子:
model.evaluate(test_ds)
传入测试数据集
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_freq=1,
max_queue_size=10,
workers=1,
use_multiprocessing=False,
**kwargs
)
参数说明
x:输入数据,类型:numpy数组、TensorFlow张量等
y:目标数据,类型:numpy数组、TensorFlow张量等
batch_size:整数,默认值32,每训练 batch_size 个的样本,就计算一次梯度下降,使目标函数优化一步。
epochs:训练的次数
steps_per_epoch:整数或None,一个epoch包含的步数(每一步是一个batch的数据送入),当使用如TensorFlow数据Tensor之类的输入张量进行训练时,None代表自动分割,即:
数据集样本数/batch样本数
例如:有100张图片的dataset,通过dataset.batch(50)设置批次大小为50,则steps_per_epoch值为2
注意: 在使用Dataset时,由于Dataset无法获取内部数据的数量,所以必须指定该参数validation_steps: 仅当steps_per_epoch被指定时有用,在验证集上的step总数,
验证集样本数/batch样本数
注意: 在使用Dataset时,由于Dataset无法获取内部数据的数量,所以必须指定该参数validation_data:形式为(X,y)或(X,y,sample_weights)的tuple,是指定的验证集。此参数将覆盖validation_spilt
shuffle:布尔值,表示是否在训练过程中每个epoch前随机打乱输入样本的顺序
verbose:0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录
validation_split:0~1之间的浮点数,用来指定训练集的一定比例数据作为验证集。验证集将不参与训练,在每个epoch结束后测试模型指标,如损失函数、精确度等。
注意: 先执行validation_split ,再执行 shuffle ,因此如果数据集是有序的,需要先手工打乱再指定validation_split,否则可能会出现验证集样本不均匀。
注意: 对训练集 类型 有要求,慎用callbacks:点击参见
返回值
save()
详见tf.keras.Model的save()方法:
https://www.malaoshi.top/show_1EF4BCMB2wb1.html
save_weights()
保存所有图层权重
基于自save()方法的save_format形参实现,以HDF5或TensorFlow格式保存
以HDF5格式保存时,权重文件具有:-(layer_names属性),字符串列表(模型层的有序名称)
save_weights(
filepath,
overwrite=True,
save_format=None
)
参数:
- filepath:保存文件路径。
- overwrite:是否覆盖
- save_format:“ tf”或“ h5”
load_weights()
加载权重
load_weights(
filepath
)
参数:
- filepath:加载的文件路径
to_json()
返回包含 模型 配置的JSON字符串
仅包含模型架构,但 没有权重,没有配置优化器
to_json()
返回值:
- 返回包含网络配置的JSON字符串
通过下面函数重建模型keras.models.model_from_json(json_string, custom_objects={})
案例1
在使用tf.data.Dataset读取文件,并进行训练时的一般步骤
# 打乱顺序
train_data2=train_data.shuffle(buffer_size=train_count)
# 无限重复,一般在shuffle()后调用
train_data2=train_data2.repeat()
BATCH_SIZE=32
# 改变数据形状,变成4维,第一个维度是图片数量
train_data2=train_data2.batch(BATCH_SIZE)
# 一般最后一个调用
train_data2=train_data2.prefetch(buffer_size=AUTOTUNE)
进行训练:
steps_per_epoch=train_count//BATCH_SIZE
validation_steps=test_count//BATCH_SIZE
history=model.fit(train_data2,epochs=15,steps_per_epoch=steps_per_epoch,validation_data=test_data2,validation_steps=validation_steps)
注意:
由于使用tf.data.Dateset做数据集,无法实现知道该数据集的 长度,需要在fit()方法中指定steps_per_epoch和validation_steps
感谢:
https://blog.csdn.net/Hodors/article/details/97498168
https://blog.csdn.net/hellocsz/article/details/88992039
