在 Keras 中,我将执行以下操作来动态创建模型的层:
for i in range(number_dense_layers):
model.add(layers.Dense(units=units, input_dim=input_dim,
kernel_initializer='normal', activation='relu'))
但是,对于 Tensorflow,我有以下内容:
class generic_vns_function(tf.keras.Model):
def __init__(self, num_layers, num_class=10):
super().__init__()
# Convolutional layers and MaxPools
self.conv1 = tf.keras.layers.Conv2D(64, 3, activation="relu")
self.conv2 = tf.keras.layers.Conv2D(64, 3, activation="relu")
我想做这样的事情:
for i in range(num_layers):
self.add(tf.keras.layers.Conv2D(64, 3, activation="relu"))
但我不确定如何动态创建该层,因为
add
函数在这种情况下无法像在 Keras 中那样工作。
您可以先追加,然后再堆叠。
这是一个粗略的例子:
import tensorflow as tf
class generic_vns_function(tf.keras.Model):
def __init__(self, num_layers, num_class=10):
super().__init__()
self.convolutions = []
...
for i in range(num_layers):
self.convolutions.append(tf.keras.layers.Conv2D(64, 3, activation="relu"))
def call(self, inputs):
...
for layer in self.convolutions:
x = layer(x)
...
return x
看起来需要以下内容:
for i in range(num_layers):
self.layers.append(tf.keras.layers.Conv2D(64, 3, activation="relu"))
我们将特定图层附加到模型图层属性中。
受 Frightera 启发,如果你想要具有不同功能的动态层数,请尝试 dict。 dict是python 3.6之后订购的。
我更喜欢列表理解,而不是使用 for 循环来定义多个层:
import tensorflow as tf
class generic_vns_function(tf.keras.Model):
def __init__(self, num_layers, num_class=10):
super().__init__()
...
self.convolutions = [tf.keras.layers.Conv2D(64, 3, activation="relu") for _ in range(num_layers)]
def call(self, inputs):
...
for layer in self.convolutions:
x = layer(x)
...
return x