Python 3.x Tensorflow 2:如何在keras功能API中使用密集层堆栈?

Python 3.x Tensorflow 2:如何在keras功能API中使用密集层堆栈?,python-3.x,tensorflow,machine-learning,keras,deep-learning,Python 3.x,Tensorflow,Machine Learning,Keras,Deep Learning,我正在构建一个模型,其中我想给出no_of_density_层作为参数,并期望函数在循环中创建密集层 在循环中创建密集层不是问题,我的问题是如何在Keras中的密集层堆栈中传递值 假设我想要3个致密层: def get_layers(no_of_dense_layers , dense_size): return [tf.keras.layers.Dense(dense_size[i], activation = 'elu',

我正在构建一个模型,其中我想给出no_of_density_层作为参数,并期望函数在循环中创建密集层

在循环中创建密集层不是问题,我的问题是如何在Keras中的密集层堆栈中传递值

假设我想要3个致密层:

def get_layers(no_of_dense_layers  , dense_size):
    return [tf.keras.layers.Dense(dense_size[i], activation = 'elu', 
                                      kernel_initializer=tf.keras.initializers.glorot_uniform(seed=200)) for i in range(no_of_dense_layers)]
现在,如果我想使用顺序API,我可以这样做:

perceptron = tf.keras.Sequential(get_layers(3,[1000,500,300]))
input_layer = tf.keras.Input(shape=(1024), dtype='float32', name='embedding_input')

## This layer should pass input of first denselayer >> dense_layer2 >> dense_layer3
   dense_layers = get_layers(3,[1000,500,300])


# Above layer should be equal to : 
# x = tf.keras.layers.Dense(1000)
# x = tf.keras.layers.Dense(500)
# x = tf.keras.layers.Dense(300)


# Then simply pass the output of all three dense layers to classification last layer

# classification_layer 

cls_layer  = tf.keras.layers.Dense(1, activation= 'elu')(dense_layers)
但是如果我想使用函数式API,如何实现相同的功能

大概是这样的:

perceptron = tf.keras.Sequential(get_layers(3,[1000,500,300]))
input_layer = tf.keras.Input(shape=(1024), dtype='float32', name='embedding_input')

## This layer should pass input of first denselayer >> dense_layer2 >> dense_layer3
   dense_layers = get_layers(3,[1000,500,300])


# Above layer should be equal to : 
# x = tf.keras.layers.Dense(1000)
# x = tf.keras.layers.Dense(500)
# x = tf.keras.layers.Dense(300)


# Then simply pass the output of all three dense layers to classification last layer

# classification_layer 

cls_layer  = tf.keras.layers.Dense(1, activation= 'elu')(dense_layers)
我所尝试的:

first_layer = dense_layers[0](input_layer)
for k in dense_layers[1:]:
    print(k(first_layer))
还有其他方法吗

谢谢大家!

这里有一种可能性:

def get_layers(inp, no_of_dense_layers, dense_size):
    
    for i in range(no_of_dense_layers):
    
        x = Dense(dense_size[i])(inp)
        inp = x
        
    return x

inp = Input((1024,))
x = get_layers(inp, 3, [1000,500,300])    
out = Dense(1)(x)

m = Model(inp, out)
m.summary()

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_45 (InputLayer)        [(None, 1024)]            0         
_________________________________________________________________
dense_88 (Dense)             (None, 1000)              1025000   
_________________________________________________________________
dense_89 (Dense)             (None, 500)               500500    
_________________________________________________________________
dense_90 (Dense)             (None, 300)               150300    
_________________________________________________________________
dense_91 (Dense)             (None, 1)                 301