web-dev-qa-db-fra.com

Quelqu'un a une API sur le keras.layers.Input

Désolé, en tant que débutant, je veux poser une question simple. Pourquoi je ne trouve aucune information sur l'entrée, c'est-à-dire keras.layers.Input dans la documentation: https://keras.io/

17
L.Iridium

Cette documentation est vraiment difficile à consulter lorsque vous n'êtes pas habitué à Keras.

Mais il existe deux approches pour construire des modèles de keras:

  • Le modèle Sequential 
  • L'API fonctionnelle Model

La couche Input n'est pas utilisée avec le modèle Sequential, mais uniquement avec Model

Il n’ya probablement pas de documentation claire, car la couche Input ne fait absolument rien à part définir la forme des données d’entrée dans votre modèle. (En fait, cela crée un "tenseur" que vous pouvez utiliser comme entrée dans d'autres couches). 

Imaginez que vous créez un modèle prenant des lots avec des données MNIST, qui ont des images de 28 x 28 pixels. Votre forme en entrée est alors (28,28) (voir *). 

Lors de la création de votre modèle, vous utilisez Input uniquement pour définir ce qui suit:

#inp will be a tensor with shape (?, 28, 28)
inp = Input((28,28))

Les couches suivantes utiliseront ensuite cette entrée:

x = SomeKerasLayer(blablabla)(inp)     
x = SomeOtherLayer(blablabla)(x)    
output = TheLastLayer(balblabla)(x)

Et lorsque vous créez le modèle, vous définissez le chemin que suivront les données, qui dans ce cas va de l'entrée à la sortie:

model = Model(inp,output)

Avec l'API Model, il est également possible de créer des ramifications, des entrées multiples et des sorties multiples, des branches, etc. 

Si vous avez plusieurs entrées, vous devez créer plusieurs couches Input.

Voir ici des exemples plus avancés avec des couches réelles: https://keras.io/getting-started/functional-api-guide/


* - Ce n'est pas une règle. Selon la manière dont vous formatez vos données d'entrée, cette forme peut changer. Certains modèles préfèrent ne pas se soucier des informations 2D et utiliser une image aplatie de forme (784,). Les modèles qui utilisent des couches convolutives façonnent souvent les données d'entrée en (28,28,1), une image avec un canal. (En général, les images ont 3 canaux, RVB).


Arguments à la Input

Le code de la méthode Input est défini ici (22 décembre - 2017)

Arguments possibles:

  • shape: définit la forme d'un échantillon unique, avec une taille de lot variable (comme indiqué ci-dessus) 
  • batch_shape: définit explicitement la taille du lot dans la forme passée 
  • tensor: au lieu de transmettre une forme en entrée au modèle, transmettez un tenseur existant, vous pouvez par exemple transmettre un tenseur rempli de valeurs, telles que K.variable()
  • Autres arguments: name, dtype et sparse.
37
Daniel Möller

La plupart des choses ont été résumées par la réponse ci-dessus. Mais comme mentionné dans le commentaire, je pense que le tf.contrib.keras contient des documents sur keras. This link contient la documentation pour le même.

Comme indiqué dans la réponse acceptée, Input peut être utilisé avec model pour désigner le tenseur. En fait, il retourne un tenseur. D'après ce que je comprends, il ressemble un peu à tf.placeholder car il nous permet de définir le modèle uniquement en fonction de l'objet Input et de l'ajuster ultérieurement. Voici l'exemple des docs tensorflow.

# this is a logistic regression in Keras
x = Input(shape=(32,))
y = Dense(16, activation='softmax')(x)
model = Model(x, y)

On peut voir ici comment l'utilisation de Input est quelque peu similaire à celle de tf.placeholder

1
Ameet Deshpande