2017-03-22 1 views
3

J'ai un problème et en même temps une question. Je veux faire un classificateur d'images avec Keras en utilisant Theano comme Backend et un modèle Sequential.Keras entrée forme ValueError

>>> keras.__version__ 
'2.0.1' 
>>> theano.__version__ 
'0.9.0' 

Ma forme d'entrée: INPUT_SHAPE = (3, 28, 28) #depth, size, size

Venons-en à mon problème. Si je lance mon script à Windows 7 32 bits, il me donne l'erreur ci-dessous sur:

ValueError: ('The specified size contains a dimension with value <= 0', (-1024, 512)) 

Si l'exécuter avec la forme d'entrée: INPUT_SHAPE = (28, 28, 3) #size, size, depth
Il me donne cette erreur ci-dessous:

ValueError: Error when checking model input: expected conv2d_1_input to have shape (None, 48, 48, 3) but got array with shape (1000, 3, 48, 48) 

Si j'exécute le code sur OS 64 bits élémentaire, il s'exécute sans problème (INPUT_SHAPE = (3, 28, 28)).

Mon fichier keras.json pour Windows est:

{ 
    "backend": "theano", 
    "epsilon": 1e-07, 
    "floatx": "float32", 
    "image_dim_ordering": "tf" 
} 

Alors, ma question est: Est-il une si grande différence entre les différents systèmes d'exploitation ou où est mon erreur? Pour rappel, j'ai utilisé exactement le même code pour les deux systèmes.

Répondre

11

Si votre problème persiste encore essayer en utilisant: from keras import backend as K K.set_image_dim_ordering('th') Cela fonctionnerait bien si vous souhaitez utiliser backend Théano et doivent utiliser des canaux première configuration pour la commande de dimension d'image.

3

Le problème que vous rencontrez concerne l'ordre de dimension attendu.

  • commande de tensorflow (tf): Formes devraient être (size_lines, size_columns, canal )
  • Theano commande (e): Formes devraient être (canal, size_lines, size_columns)

Si vous modifiez la ligne de commande dans le fichier keras.json à « image_dim_ordering »: « e » il devrait fonctionner. (Je parie que c'est ce qui est dans votre OS élémentaire keras.json).

+1

Merci pour la réponse et désolé pour ma réponse tardive. Tu as toujours raison, mais j'ai reconnu que mon fichier .keras ne change rien. J'ai installé des keras sans aucun envs et une fois j'ai troqué anaconda. Après avoir défini le format image_data_format sur 'channels_first' dans mon code, cela fonctionne sans aucun problème. Donc c'était totalement ma faute. : D Mais merci pour votre temps. – Dragonblf

0

Pour passer à un autre backend, vous pouvez modifier le fichier de configuration situé dans:

  • Linux: $HOME/.keras/keras.json
  • Fenêtres: %USER_PROFILE%/.keras/keras.json

C'est le fichier keras.json pour theano back-end:

{ 
    "floatx": "float32", 
    "epsilon": 1e-07, 
    "backend": "theano", 
    "image_data_format": "channels_first" 
} 
Ce

est le fichier keras.json pour tensorflow back-end:

{ 
    "floatx": "float32", 
    "epsilon": 1e-07, 
    "backend": "tensorflow", 
    "image_data_format": "channels_last" 
} 

C'est ce que la documentation https://keras.io/backend/ dit au sujet de la propriété image_data_format:

image_data_format: string, soit "channels_last" ou "channels_first". Spécifie la convention de format de données que Keras suivra. (keras.backend.image_data_format() retourne.)

Pour les données 2D (par exemple d'image), "channels_last"(rows, cols, channels) suppose alors que "channels_first" suppose (channels, rows, cols).

Pour les données 3D, "channels_last" assume (conv_dim1, conv_dim2, conv_dim3, channels) en "channels_first" assume (channels, conv_dim1, conv_dim2, conv_dim3).