文章是个人学习Tensorflow2.0的过程中,个人认为需要记下并需要重点学习的,不做任何商业使用,希望个人学习记录的同时,能够给他人带来帮助。
-
回调
-
回调的功能
- 在培训期间的不同时间点进行验证(超出内置的每个时期验证)
- 定期检查模型或超过某个精度的阈值
- 在训练似乎平稳时改变模型的学习率
- 在训练似乎平稳时对顶层进行微调
- 在训练结束或超出某个性能阈值时发生电子邮件或即时消息通知等等
-
可使用的内置回调
- ModelCheckpoint:定期保存模型
- EarlyStopping:当训练不再改进验证指标时停止训练
- TensorBoard:定期编写可在TensorBoard中显示的模型日志
- CSVLogger:将丢失和指标数据流式传输到CSV文件
- 等等
-
回调的使用
此处简单的列举两个回调的例子,具体参数设置见下方代码
callbacks = keras.callbacks.EarlyStopping( # 是否有提升关注的指标 monitor='loss', # 不再提升的阈值 min_delta=1e-2, # 2个epoch没有提升就停止 patience=2, verbose=1) check_callbacks = keras.callbacks.ModelCheckpoint( # 保存路径及名称 filepath='model_{epoch}.h5', # 保存最优 save_best_only=True, monitor='loss', verbose=1 )
-
-
动态调整学习率
```python initial_learning_rate = 0.1 lr_schedule = keras.optimizers.schedules.ExponentialDecay( initial_learning_rate, decay_steps=10000, decay_rate=0.96, staircase=True ) # 此优化方法采用RMSprop,您可以随意更换合适的 optimizer = keras.optimizers.RMSprop(learning_rate=lr_schedule) ```
-
模型保存与加载
子类模型的结构无法保存和序列化,只能保持参数
-
保存全模型
对整个模型进行保存,保存的内容包括:
- 该模型的架构
- 模型的权重
- 模型的训练配置
- 优化器及其状态
# 保存模型 model.save("model.h5") # 加载模型 new_model = tf.keras.models.load_model("model.h5")
-
保存为SavedModel文件
# 保存模型 tf.keras.experimental.export_saved_model(model, "save_model") # 加载模型 new_model = tf.keras.experimental.load_from_saved_model("save_model")
-
仅保存网络结构(不包含训练好的参数)
# 模型结构导出,有两种方式,一种是config,一种是json config = model.get_config() with open('model_config', 'w') as config_file: config_file.write(config) json = model.to_json() with open('model_json.json', 'w') as json_file: json_file.write(json) # 模型结构加载,有两种方式,一种是config,一种是json config_model = tf.keras.Model.from_config(config) json_model = tf.keras.Model.model_from_json(json)
-
仅保存网络参数
# 导出网络参数 weights = model.get_weights() # 保存网络参数 model.save_weights('weight_tf_savedmodel') model.save_weights('weight_tf_savedmodel_h5', save_format='h5') # 加载设置网络参数 model.set_weights(weights)
-
-
tf.function
装饰器使用
tf.function
装饰器注释函数时,可以像调用任何其他函数一样调用它,它将被编译成图。这意味着可以获得更快执行,更换地在GPU或TPU上运行或导出。@tf.function def simple_layer(x, y): return tf.nn.relu(tf.matmul(x, y)) x = tf.random.uniform((3, 3)) y = tf.random.uniform((3, 3)) simple_layer(x, y) <tf.Tensor: id=23, shape=(3, 3), dtype=float32, numpy= array([[0.9118548 , 0.6416799 , 1.079305 ], [0.22249877, 0.47654846, 0.38788092], [0.5215728 , 0.619033 , 0.79503316]], dtype=float32)>
tf.function
注释具有传递性,当带有此注释的函数调用其它函数时,其它函数也将以图形模式运行。 -
参考学习网站
转载:https://blog.csdn.net/u014487025/article/details/102485736
查看评论