2016-06-05 22 views
14

Sto cercando imparare un po 'la sintassi Keras e giocando con il Inception v3 exampleKeras | Ottenere l'Inception v3 esempio in esecuzione

Ho una classificazione multiclasse problema giocattolo 4 di classe così ho cambiato le seguenti righe dalla esempio:

NB_CLASS = 4 # number of classes 
DIM_ORDERING = 'tf' # 'th' (channels, width, height) or 'tf' (width, height, channels) 

miei dataset giocattolo hanno le seguenti dimensioni:

  • Dimensione della matrice contenente tutte le immagini: (595, 299, 299, 3)
  • Dimensioni dell'array contenente le immagini dell'allenamento: (416, 299, 299, 3)
  • Dimensioni dell'array contenente le etichette di allenamento: (179, 4)
  • Dimensioni dell'array contenente le immagini di prova: (179 , 299, 299, 3)
  • dimensione della matrice contenente le etichette di prova: (179, 4)

allora provo per addestrare il modello con il seguente codice:

# fit the model on the batches generated by datagen.flow() 
# https://github.com/fchollet/keras/issues/1627 
# http://keras.io/models/sequential/#sequential-model-methods 
checkpointer = ModelCheckpoint(filepath="/tmp/weights.hdf5", verbose=1, save_best_only=True) 
model.fit_generator(datagen.flow(X_train, Y_train, 
       batch_size=32), 
       nb_epoch=10, 
       samples_per_epoch=32, 
       class_weight=None, #classWeights, 
       verbose=2, 
       validation_data=(X_test, Y_test), 
       callbacks=[checkpointer]) 

poi Ottengo il seguente errore:

Exception: The model expects 2 input arrays, but only received one array. Found: array with shape (179, 4)` 

Il che probabilmente si riferisce a questo come Inception vorrebbe avere la auxiliary classifiers (Szegedy et al., 2014):

model = Model(input=img_input, output=[preds, aux_preds]) 

Come faccio a dare le due etichette al modello in Keras non essere un programmatore Python avanzata sia?

+0

'ImageDataGenerator' per impostazione predefinita emette un'etichetta.È possibile estendere la classe e sovrascrivere la funzione 'flusso' per generare due uscite. Un'altra opzione è eseguire separatamente gli ampliamenti e utilizzare la funzione 'fit'. –

+2

Hai provato 'validation_data = (X_test, [Y_test, Y_test])' –

+0

Inserisci l'intero codice modello - altrimenti non è possibile trovare il tuo errore. – FlashTek

risposta

0

Vi consiglio di provare prima con this tutorial. Il codice può essere trovato here.

Si vedrà nella prima parte di esso, mostra come caricare i dati da una directory utilizzando:

.flow_from_directory(
    train_data_dir, 
    target_size=(img_width, img_height), 
    batch_size=batch_size, 
    class_mode='binary') 

Al fine di ingresso classi diverse, si dovrà mettere le immagini in una cartella per ogni classe (notare che probabilmente c'è un altro modo di farlo, passando le etichette). Si noti inoltre che nel tuo caso class_mode non può utilizzare 'binaria' (penso che si dovrebbe usare 'categorica'):

`"binary"`: binary targets (if there are only two classes), 
`"categorical"`: categorical targets, 

quindi è possibile utilizzare il modello inceptionv3 che è già in Keras:

from keras.applications import InceptionV3  
cnn = InceptionV3(...) 

si noti inoltre che avete troppo pochi esempi per formare InceptionV3, come questo modello è molto grande (controllare here la dimensione). Quello che potresti fare in questo caso è trasferimento apprendimento, utilizzando pesi pre-addestrati su InceptionV3. Vedere la sezione Utilizzo delle funzionalità di collo di bottiglia di una rete pre-addestrata: precisione del 90% in un minuto in the tutorial.

Problemi correlati