2017-05-05 115 views
3

我曾經手動做,但我現在使用flow_from_directory用我自己的數據來訓練我的網絡。我只有一個問題。當我做model.predict()時,我怎麼知道我的預測索引0是標籤類別狗,索引1是類別貓?Keras flow_from_directory類索引

我使用的代碼如下。

train_datagen = ImageDataGenerator(
    rescale=1./255, 
    shear_range=0.2, 
    zoom_range=0.2, 
    horizontal_flip=True) 

test_datagen = ImageDataGenerator(rescale=1./255) 

train_generator = train_datagen.flow_from_directory(
     train_images_path, 
     target_size=(64, 64), 
     batch_size=batch_size) 


validation_generator = test_datagen.flow_from_directory(
     validate_images_path, 
     target_size=(64, 64), 
     batch_size=batch_size) 
early_stopping = keras.callbacks.EarlyStopping(monitor='val_acc', min_delta=0, patience=3, verbose=1, mode='auto') 
history = model.fit_generator(
     train_generator, 
     steps_per_epoch=1700, 
     epochs=epochs, 
     verbose=1, 
     callbacks=[early_stopping], 
     validation_data=validation_generator, 
     validation_steps=196 
) 

我想知道的是對圖像vs地面真相標籤。

謝謝

+0

Flow_from目錄是您剛纔通過目錄一種方便的方法,它會產生正確的代表性,以keras抽象你喜歡得到原始像素numpy的陣列內的過程,產生標籤等 –

+0

不知道爲什麼downvote。也許誰downvoted可以向我解釋這一點。 –

回答

3

你可以有索引由具有class_indices屬性的生成器生成的每個類的類。

print(validation_generator.class_indices) 

簡單...

+0

非常酷!在我的情況下,它看起來像文件夾名稱按字母順序排列。 – kuku

2

它很簡單。當你預處理你的數據時,只需用一些特定的整數替換類標籤(你可以稱它爲id)。因此,當您根據模型的輸出計算損失或準確性時,只需使用整數標籤(id)將預測與實際情況進行比較即可。

如果您需要標籤文本,可以從id(整數)中取回。

+0

我認爲你誤解了。如果你手動操作,將圖像轉換爲numpy數組等等。這是你說的方式。如果你只是將目錄傳遞給flow_from_directory,它是不同的。我的猜測是你從未使用過flow_from_directory。 –

1

當您收集數據時,您可以定義該數據。沒有規則。但一個簡單的方法來檢查是:

  • 看看你的第一個訓練圖像是,看看它自己:是貓還是狗?
  • 然後看到訓練Y(結果/類/期望的輸出),它是[0,1]還是[1,0]?

這將回答你的問題。

對於從發電機獲得一個樣品,你可以看到這樣一個問題:How to get one value from a generator in Python?

Keras documentation定義,發電機輸出是一個元組(輸入目標)

+0

嗨。感謝您的答案,但這不是flow_from_directory的工作方式。我猜你以前從未使用過它?!?! –

+0

或者也許有辦法從flow_from_directory生成器獲取X和Y值? –

+0

我明白了。也許[這個問題](http://stackoverflow.com/questions/2419770/how-to-get-one-value-from-a-generator-in-python)有幫助嗎? (更新了答案)。 –