如何在Tensorflow中创建动态数量的层?

问题描述 投票:0回答:4

在 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 中那样工作。

tensorflow keras
4个回答
1
投票

您可以先追加,然后再堆叠。

这是一个粗略的例子:

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

1
投票

看起来需要以下内容:

for i in range(num_layers):
    self.layers.append(tf.keras.layers.Conv2D(64, 3, activation="relu"))

我们将特定图层附加到模型图层属性中。


0
投票

受 Frightera 启发,如果你想要具有不同功能的动态层数,请尝试 dict。 dict是python 3.6之后订购的。


0
投票

我更喜欢列表理解,而不是使用 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
© www.soinside.com 2019 - 2024. All rights reserved.