web-dev-qa-db-fra.com

Keras: fonction de couche Lambda avec plusieurs paramètres

J'essaie d'écrire une couche Lambda dans Keras qui appelle une fonction connection, qui exécute une boucle for i in range(0,k)k est alimenté en entrée à la fonction, connection(x,k). Maintenant, lorsque j'essaie d'appeler la fonction dans l'API fonctionnelle, j'ai essayé d'utiliser:

k = 5
y = Lambda(connection)(x)

Aussi,

y = Lambda(connection)(x,k)

Mais aucune de ces approches n'a fonctionné. Comment puis-je saisir la valeur de k sans l'attribuer comme paramètre global?

12
Prabaha

Utilisez simplement

y = Lambda(connection)((x,k)) 

puis var [0], var [1] dans la méthode de connexion

12
Andrey Nikishaev

Trouvé la solution au problème dans cette demande d'extraction GitHub . En utilisant

y = Lambda(connection, arguments={'k':k})(x)

travaillé!

8
Prabaha
Tmodel = Sequential()
x = layers.Input(shape=[1,])   # Lambda on single input
out1 = layers.Lambda(lambda x: x ** 2)(x)

y = layers.Input(shape=[1,])   # Lambda on multiple inputs
z = layers.Input(shape=[1,])
def conn(IP):
    return IP[0]+IP[1]
out2 = layers.Lambda(conn)([y,z])

Tmodel = tf.keras.Model(inputs=[x,y,z], outputs=[out1,out2],name='Tmodel')  # Define Model
Tmodel.summary()

# output
O1,O2 = Tmodel([2,15,10])
print(O1)   # tf.Tensor(4, shape=(), dtype=int32)
print(O2)   # tf.Tensor(25, shape=(), dtype=int32)
0
Debabrata Pal