[英]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.join
與Series.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.