2017-02-07 2 views
2

J'essaie de comprendre les CNN grâce à des exercices dans Keras (backend de theano). Je ne peux pas adapter le modèle ci-dessous (Erreur: AttributeError: l'objet 'Convolution2D' n'a pas d'attribut 'get_shape'). Cet ensemble de données est constitué d'images (28 * 28) issues des données MNIST concaténées ensemble pour un maximum de cinq images. La forme d'entrée doit donc être 1, 28, 140 (grayscale = 1, height = 28, width = 28 * 5)Keras pour la reconnaissance à plusieurs chiffres

Le but est de prédire la séquence des nombres. Je vous remercie!!

batch_size = 128 
nb_classes = 10 
nb_epoch = 2 

img_rows =28 
img_cols=140 
img_channels = 1 

model_input=(img_channels, img_rows, img_cols) 

x = Convolution2D(32, 3, 3, border_mode='same')(model_input) 
x = Activation('relu')(x) 
x = Convolution2D(32, 3, 3)(x) 
x = Activation('relu')(x) 
x = MaxPooling2D(pool_size=(2, 2))(x) 
x = Dropout(0.25)(x) 
conv_out = Flatten()(x) 

x1 = Dense(nb_classes, activation='softmax')(conv_out) 
x2 = Dense(nb_classes, activation='softmax')(conv_out) 
x3 = Dense(nb_classes, activation='softmax')(conv_out) 
x4 = Dense(nb_classes, activation='softmax')(conv_out) 
x5 = Dense(nb_classes, activation='softmax')(conv_out) 

lst = [x1, x2, x3, x4, x5] 

model = Sequential(input=model_input, output=lst) 

model.compile(loss='categorical_crossentropy', 
optimizer='adam', 
metrics=['accuracy']) 

model.fit(dataset, data_labels, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1) 

Répondre

4

Le problème est dans la couche d'entrée. Faites le changement suivant:

model_input=Input(shape=(img_channels, img_rows, img_cols)) 

à condition que votre image_dim_ordering est th. Importez la couche Input de keras.layers.

Je remarque également qu'il existe plusieurs sorties. Vous devez donc utiliser le modèle Function au lieu de Sequential. Il suffit de changer pour:

model = Model(input=model_input, output=lst) 

importation Model de keras.models.

+0

Merci pour votre réponse. J'obtiens toujours que l'objet tensoriel n'est pas itérable. –

+0

Est l'erreur à 'model.fit()'. Si oui, ma supposition sera que 'data_labels' devrait être une liste de tableaux numpy de longueur 5. Chacun des tableaux numpy devrait de dimension' dataset.shape [0] x nb_classes' – indraforyou

+0

Salut l'erreur est dans la couche d'activation. Voici un lien vers le code complet: https://gist.github.com/jdills26/ca69e59ef19d4993636f6b50a7cbe514 Merci pour toute aide! Voici la source de données: http://yann.lecun.com/exdb/mnist/index.html –