将值从嵌套类传播到基类

时间:2018-11-26 23:24:13

标签: python tensorflow keras

我正在研究一个基于TensorFlow的项目,目标是实现中非常抽象。

但是我在将GoogleNet添加到我的项目时遇到了问题。 与到目前为止我实现的大多数其他网络(alexnet,vggnet等)相反,GoogleNet的不同之处在于,它在网络中的两点使用“辅助”分类器。这意味着,我需要分散并记住这些“辅助”点上的数据,以供以后使用。

出现问题是因为我使用类tf.keras.Sequential的原因特别是因为它使项目更易于阅读和调试。由于这些原因,我确实更愿意继续使用此类,但是其行为基本上会阻止“辅助”分类器执行所需的操作。这是因为包装在tf.keras.Sequential中的给定层的输出将作为输入传递到下一个包装层。

由于“辅助”是我的实现中的一个类,因此这意味着我一次只能从其调用函数返回一个项目,以免破坏Sequential。并且由于它是一个不同的分类器,因此我现在返回其未更改的输入,以免打乱后面的图层。因此,它目前执行必要的计算,但是我没有存储输出的位置。

我已经考虑了一段时间,并提出了一些解决方案,这些方案涉及到重组我的代码,例如将所有内容放入一个文件,删除tf.keras.Sequential或完全忽略“辅助”,因为它可以正常工作没有它,但我无法找到一种方法来保持我的结构并执行此变量更新。

该项目的当前结构如下:

cnn.py
______________________________
from models.py import googlenet
class CNN() -> calls function googlenet() inside __init__()

    models.py
    _______________________________
    from layers.py import Auxiliary
    def googlenet() -> invokes class Auxiliary()

        layers.py
        ________________
        class Auxiliary() -> performs calculations
                          -> needs to propagate value to CNN() class
                          -> has to return unaltered input

我已经尽力尝试将“ CNN”导入“辅助”中,每一种都会导致导入错误。我试图将“ CNN”类实例本身传递给“ Auxiliary”类,但无济于事,因为我正在将该类的构造函数内部传递该类。而且,尽管从设计的角度来看这没有意义,但我尝试使“辅助”类继承自“ CNN”类。

那么,如何在不使用return语句或不创建循环依赖关系的情况下,将结果从一个类传播到另一个类,这两个类都在单独的文件中?

0 个答案:

没有答案