¿Cómo concatenar dos capas en keras?
Tengo un ejemplo de una red neuronal con dos capas. La primera capa toma dos argumentos y tiene una salida. La segunda debe tomar un argumento como resultado de la primera capa y un argumento adicional. Debería tener el siguiente aspecto:
x1 x2 x3
\ / /
y1 /
\ /
y2
Así que, yo había creado un modelo con dos capas y trató de combinarlos, pero devuelve un error: La primera capa en un modelo secuencial debe obtener un "input_shape" o "batch_input_shape" argumento.
en la línea result.add(merged)
.
Modelo:
first = Sequential()
first.add(Dense(1, input_shape=(2,), activation='sigmoid'))
second = Sequential()
second.add(Dense(1, input_shape=(1,), activation='sigmoid'))
result = Sequential()
merged = Concatenate([first, second])
ada_grad = Adagrad(lr=0.1, epsilon=1e-08, decay=0.0)
result.add(merged)
result.compile(optimizer=ada_grad, loss=_loss_tensor, metrics=['accuracy'])
79
3
El error se debe a que
resultado
definido comoSecuencial()
es sólo un contenedor para el modelo y no se ha definido una entrada para él.lenguaje-todo: lang-python -->
Teniendo en cuenta lo que estás tratando de construir establece
resultado
para tomar la tercera entradax3
.Sin embargo, mi forma preferida de construir un modelo que tenga este tipo de estructura de entrada sería utilizar la api funcional.
Aquí hay una implementación de sus requisitos para empezar:
Para responder a la pregunta en los comentarios:
La concatenación funciona así:
es decir, las filas se acaban de unir.
x1
se introduce en la primera,x2
se introduce en la segunda yx3
se introduce en la tercera.Puedes experimentar con
model.summary()
(fíjate en el tamaño de la capa concatenate_XX (Concatenate))Usted puede ver el cuaderno aquí para el detalle: https://nbviewer.jupyter.org/github/anhhh11/DeepLearning/blob/master/Concanate_two_layer_keras.ipynb
Añadiendo a la respuesta anterior para que ayude a los que usan
tensorflow 2.0
.``python
importar tensorflow como tf
algunos datos
c1 = tf.constant([[1, 1, 1], [2, 2, 2]], dtype=tf.float32) c2 = tf.constant([[2, 2, 2], [3, 3, 3]], dtype=tf.float32) c3 = tf.constant([[3, 3, 3], [4, 4, 4]], dtype=tf.float32)
hornear capas x1, x2, x3
x1 = tf.keras.layers.Dense(10)(c1) x2 = tf.keras.layers.Dense(10)(c2) x3 = tf.keras.layers.Dense(10)(c3)
capa fusionada y1
y1 = tf.keras.layers.Concatenate(axis=1)([x1, x2])
capa combinada y2
y2 = tf.keras.layers.Concatenate(axis=1)([y1, x3])
imprimir información
print("-"30) print("x1", x1.shape, "x2", x2.shape, "x3", x3.shape) print("y1", y1.shape) print("y2", y2.shape) print("-"30)