如何在运行时将子模块添加到keras模块?

时间:2019-04-29 06:56:31

标签: tensorflow

对于Tensorflow 2.0: 我们可以向继承自layers.Layer的Keras模块添加子模块,并在__init__中调用任何层API,它将自动将其包括在self.trainable_variables中。 但是,当我想在运行时中添加一些模块时,我不知道该如何实现。

我们可以看到在for I in range(3)上下文中创建模块的代码片段。此处创建的这些模块不会自动添加到self.trainable_variables中。

import tensorflow as tf
from    tensorflow import keras
from    tensorflow.keras import layers, Sequential



class Test(keras.Model):

    def __init__(self):
        super(Test, self).__init__()

        self.layers1 = Sequential()
        self.layers1.add(layers.Dense(4))
        self.layers1.add(layers.Dense(3))

        # the parameters here will not included in self.trainable_variables
        self.layers2 = Sequential()
        for i in range(3):
            self.layers2.add(layers.Dense(4))



    def call(self, inputs, training=None):
        x = self.layers1(inputs)
        return x


def main():

    test = Test()
    test.build(input_shape=(None, 5))
    # print(test.trainable_variables)
    for p in test.trainable_variables:
        print(p.name, p.shape)





if __name__ == '__main__':
    main()

实际上,在pytorch中,我们可以使用self.add_module自动添加模块。但是我不知道如何在tf2中做到这一点。

0 个答案:

没有答案