我正在使用Tensorflow 1.14和tf.keras
API来构建许多(> 10)的differnet神经网络。 (我也对使用Tensorflow 2回答这个问题感兴趣)。我想知道如何组织我的项目。
我使用tf.keras.estimator.model_to_estimator
和Tensorboard将keras模型转换为估计量以进行可视化。我有时也使用model.summary()
。我的每个模型都有许多(> 20)超参数,并以三种输入数据中的一种作为输入。有时,我会使用超参数优化,以便在尝试下一组超参数之前,我经常手动删除模型并使用tf.keras.backend.clear_session()
。
当前,我正在使用将超参数作为参数并返回相应的已编译keras模型以转换为估计量的函数。我使用三种不同的“ Main_Datatype.py”脚本来训练三种不同输入数据类型的模型。所有数据都是从.tfrecord文件加载的,每种数据类型都有一个输入函数,所有将该类型的数据作为输入的估算器都使用该函数。我在Main脚本之间切换模型(即返回模型的函数)。我还有一些构建模块,这些构建模块是多个模型的一部分,为此我使用辅助函数将其返回,并使用Keras功能API将最终结果拼凑在一起。
不同模型之间的细微不兼容开始使我感到困惑,我决定使用类来组织项目。我打算为每个模型创建一个类,以跟踪超参数并正确命名每个模型及其模型目录。但是,我想知道Tensorflow中是否存在建立或推荐的方法。
问题:我应该继承tf.keras.Model
的子类,而不是使用函数来构建封装它们的模型或python类吗?子类化keras.Model是否会破坏(或需要大量工作才能启用)我与keras估计器和张量板一起使用的任何功能?我已经看到人们在使用自定义Model类时遇到了许多问题,并且有些不情愿仅仅为了发现它不适合我而投入工作。您还有其他建议来更好地组织我的项目吗?
非常感谢您。
答案 0 :(得分:2)
仅在绝对需要时才子类化。我个人更喜欢遵循以下执行顺序。如果使用前两个选项无法实现所设计模型的复杂性,那么剩下的唯一选择就是子类化。
答案 1 :(得分:1)