簡體   English   中英

keras中多標簽圖像的一種熱編碼

[英]One hot encoding of multi label images in keras

我正在使用PASCAL VOC 2012數據集進行圖像分類。 一些圖像具有多個標簽,其中一些圖像具有單個標簽,如下所示。

    0  2007_000027.jpg               {'person'}
    1  2007_000032.jpg  {'aeroplane', 'person'}
    2  2007_000033.jpg            {'aeroplane'}
    3  2007_000039.jpg            {'tvmonitor'}
    4  2007_000042.jpg                {'train'}

我想對這些標簽進行一次熱編碼以訓練模型。 但是,我不能使用keras.utils.to_categorical,因為這些標簽不是整數,而pandas.get_dummies並沒有給我預期的結果。 get_dummies提供了以下不同的類別,即,將標簽的每種唯一組合作為一個類別。

 {'aeroplane', 'bus', 'car'}  {'aeroplane', 'bus'}  {'tvmonitor', 'sofa'}  {'tvmonitor'} ...

對這些標簽進行一次熱編碼的最佳方法是什么,因為我們沒有為每個圖像指定特定數量的標簽。

如果第二列中有set ,則可以使用MultiLabelBinarizer

print (df)
                 a                        b
0  2007_000027.jpg               {'person'}
1  2007_000032.jpg  {'aeroplane', 'person'}
2  2007_000033.jpg            {'aeroplane'}
3  2007_000039.jpg            {'tvmonitor'}
4  2007_000042.jpg                {'train'}

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(df['b']),columns=mlb.classes_)
print (df)
   aeroplane  person  train  tvmonitor
0          0       1      0          0
1          1       1      0          0
2          1       0      0          0
3          0       0      0          1
4          0       0      1          0

或將Series.str.joinSeries.str.get_dummies Series.str.join使用,但是在大型DataFrame中,它應該比較慢:

df = df['b'].str.join('|').str.get_dummies()
print (df)

   aeroplane  person  train  tvmonitor
0          0       1      0          0
1          1       1      0          0
2          1       0      0          0
3          0       0      0          1
4          0       0      1          0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM