将库从TensorFlow 1样式移植到TensorFlow 2样式编码

背景:

我已经编写了一个使用TensorFlow设计光学镜片的工作库。它是用基于TF 1图形的样式编写的,我对此非常满意。我现在正在寻求向库中添加新功能,因此认为是将其移植到TF 2样式代码的好时机,但是我对TF的设计理念如何变化感到困惑。

我已经阅读了许多有关如何以新的TF2样式编写模型的信息,这些信息对我来说很有意义。我可以看到为什么人们喜欢在编写模型时渴望执行。我同意急于执行将真正帮助使用我的图书馆的人们解决光学问题。但是在这种新范例中,编写库本身似乎更加困难。

当前的工作方式:我提供了一堆类,每个类都负责构建光学系统各部分的工作。库的用户创建了其中一些类别的一些实例,并将它们连接成两层,以定义光学系统。每个类都构造一个小图,并为该图片段的输入和输出提供清晰的接口。这些类可以接受成为常量的python构造,成为执行期间可以调整的参数的tf.placeholder或可以成为优化程序目标的tf.Variable作为输入。我实现了自己的界面,该界面使用户方便地处理占位符。这些类可能也可能不包括tf.random操作,以创建对某些特定的随机分布进行采样的光源,这有时可以帮助优化器找到一个好的解决方案,而有时却不能。

此过程的输出随后被馈送到库中的主要代码段:光线跟踪器。这是一段很大的代码;它构建了一个在前馈阶段具有〜1000 ops的图形。该代码的输出是一些张量,这些张量定义了光如何通过光学系统移动。可以将来自光学系统的光输出与所需的光输出进行比较以定义损耗,并且可以将该损耗馈送到优化器。如果根据tf.Variables建立光学系统,则可以针对这些变量进行优化,以便可以优化光学组件的形状以生成所需的输出光分布。而且所有这些实际上都有效。该工具可以设计出确实能起到凉爽作用的怪异镜片。

具体问题:

那么,人们期望如何在热切的模式下用TF写一个库?像是,Keras是怎么写的呢?鉴于我已经有一个可以使用的代码库,并且我很容易编写TF1样式的代码,我是否还要转而使用急切模式?看来我必须重写类的工作方式,因为每次参数更改时我都需要手动更新它们。如果我坚持使用TF1样式图构建,是否仍然可以利用TF2的能力来理解python控制结构,还是我必须坚持使用tf.cond进行操作?是否可以在TF1中编写库?样式,但允许库的用户急切地使用TF2样式? TF1风格会在TF的未来发展中完全放弃吗?

光学系统的构建阶段非常轻便,我不担心它在急切模式下的性能,但是光线跟踪器本身非常庞大。 python解释器构建跟踪器图需要花费几秒钟,但是一旦构建了该图,它就可以每秒运行多个训练步骤。在急切模式下的每个训练步骤中,都会定义用于定义前向传递的python代码吗?

haijun110120 回答:将库从TensorFlow 1样式移植到TensorFlow 2样式编码

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3156119.html

大家都在问