对于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中做到这一点。