Keras有两种类型的模型,tf.keras.Sequential 和 函数式模型(Model)
tf.keras 可以运行任何keras兼容的代码,但要注意版本是否匹配,保存模型默认采用checkpoint format方式,也可以传递save_format='h5’来使用HDF5。
最常见的模型是层的堆叠:tf.keras.Sequential,层的线性叠加。
model = Sequential()
model.add(Dense(500,input_shape=(784,))) # 输入层,28*28=784
model.add(Activation('tanh')) # 激活函数是tanh
model.add(Dropout(0.5)) # 采用50%的dropout
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) # 优化函数,设定学习率(lr)等参数
model.compile(loss='categorical_crossentropy', optimizer=sgd, class_mode='categorical') # 使用交叉熵作为loss函数
model.fit(X_train,Y_train,batch_size=200,epochs=50,shuffle=True,verbose=0,validation_split=0.3)
model.evaluate(X_test, Y_test, batch_size=200, verbose=0)
result = model.predict(X_test,batch_size=200,verbose=0)
add(layer) 添加层
在层堆栈的顶部添加层实例
compile 模型配置
compile(
optimizer='rmsprop', # 字符串(优化器的名称)或优化器实例
loss=None, # 损失函数,如果模型有多个输出,您可以通过传递字典或损失列表来对每个输出
# 使用不同的损失,由模型最小化的损失值将是所有独立损失的总和。
metrics=None, # 在训练和测试期间,模型要评估的度量标准列表,通常将使用metrics=['accuracy']。
# 要为一个多输出模型的不同输出指定不同的度量,可以传递一个字典,例如metrics={'output_a': 'accuracy', 'output_b': ['accuracy', 'mse']}。
# 还可以传递矩阵列表(len = len(输出)),比如metrics=[[accuracy'], ['accuracy', 'mse'],或者metrics=['accuracy', ['accuracy', 'mse']]。
loss_weights=None, # 指定标量系数(Python浮点数)的可选列表或字典,以对不同模型输出的损失贡献进行加权。
sample_weight_mode=None, # 如果需要按时间步长进行样本加权(2D加权),请将其设置为“时间”。没有默认的采样权值(1D)。
weighted_metrics=None, # 在训练和测试期间,将通过sample_weight或class_weight评估和加权的度量列表。
target_tensors=None, # 默认情况下,Keras将为模型的目标创建占位符,这些占位符将在训练期间与目标数据一起提供。
# 相反,如果您想使用自己的目标张量(反过来,Keras在训练时不会期望这些目标的外部Numpy数据),可以通过target_tensors参数指定它们。
distribute=None, # 在TF 2.0中不支持
**kwargs # 任何额外的参数
)
evaluate(
x=None, # 输入值
y=None, # 目标值
batch_size=None, # 每次梯度更新的样本数
verbose=1,
sample_weight=None, # 用于加权损失函数,在这种情况下,您应该确保在compile()中指定sample_weight_mode="temporal"。
# 当x是一个数据集时,不支持此参数,而是将示例权重作为x的第三个元素传递。
steps=None, # 样品批次数
callbacks=None, # 回调
max_queue_size=10, # 生成器队列的最大大小。如果未指定,max_queue_size将默认为10。
workers=1, # 使用基于进程的线程时要向上旋转的最大进程数,如果未指定,工人将默认为1。如果为0,将在主线程上执行生成器。
use_multiprocessing=False # 请注意,由于此实现依赖于多进程,因此不应该将非picklable参数传递给生成器,因为它们不能轻松传递给子进程。
)
返回: metrics_names将为标量输出提供显示标签。
fit(
x=None,
y=None,
batch_size=None, # 每次梯度更新的样本数
epochs=1, # 训练模型的迭代数
verbose=1,
callbacks=None,
validation_split=0.0, # 将训练数据的一部分用作验证数据
validation_data=None, # 用于评估损失的数据和每个epoch结束时的任何模型度量。模型不会根据这些数据进行训练。validation_data将覆盖validation_split。
shuffle=True, # 在每个epoch之前对训练数据进行洗牌
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
)
fit 函数存在返回值,可有 history = model.fit… 中间运行的数据结果
get_layer(
name=None,
index=None
)
load_weights(
filepath,
by_name=False,
skip_mismatch=False
)
pop()
predict(
x,
batch_size=None,
verbose=0,
steps=None,
callbacks=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False
)
参考:
https://blog.csdn.net/zjw642337320/article/details/81204560
谷歌官方文档