深度学习:从数据处理到模型应用
在深度学习领域,自定义训练循环、数据加载与预处理以及各类神经网络模型的应用都有着独特的技巧和挑战。以下将详细介绍相关知识。
自定义训练循环与Keras组件
在某些情况下,编写自定义训练循环是必要的。例如,当你想为神经网络的不同部分使用不同的优化器时,就像在Wide & Deep论文中那样。同时,自定义训练循环在调试或深入理解训练原理时也非常有用。
自定义Keras组件应能转换为TF Functions,这意味着它们应尽可能遵循TF操作,并遵守相关规则。若必须在自定义组件中包含任意Python代码,有两种选择:一是将其包装在tf.py_function()操作中,但这会降低性能并限制模型的可移植性;二是在创建自定义层或模型时设置dynamic=True,或者在调用模型的compile()方法时设置run_eagerly=True。
创建动态Keras模型对调试很有用,因为它不会将任何自定义组件编译为TF Function,你可以使用任何Python调试器来调试代码。若要在模型或训练代码中包含任意Python代码,包括调用外部库,动态模型也很适用。要使模型动态,可在创建时设置dynamic=True,或者在调用compile()方法时设置run_eagerly=True。不过,使模型动态会阻止Keras使用TensorFlow的图特性,从而减慢训练和推理速度,并且无法导出计算图,这会限制模型