處理標籤和損失的兩種方法

第一種方法是one-hot 編碼是分類數據廣泛使用的一種格式,也叫分類編碼(categorical encoding)。

def to_one_hot(labels, dimension=46):
    results = np.zeros((len(labels), dimension))
    for i, label in enumerate(labels):
        results[i, label] = 1.
    return results
​
# Our vectorized training labels(將訓練標籤向量化)
one_hot_train_labels = to_one_hot(train_labels)
# Our vectorized test labels(將測試標籤向量化)
one_hot_test_labels = to_one_hot(test_labels)

也可以使用內置庫直接進行轉化

from keras.utils.np_utils import to_categorical
​
one_hot_train_labels = to_categorical(train_labels)
one_hot_test_labels = to_categorical(test_labels)

另一種編碼標籤的方法,就是將其轉換爲整數張量,如下所示。

y_train = np.array(train_labels)
y_test = np.array(test_labels)

對於這種編碼方法,唯一需要改變的是損失函數的選擇。對於代碼清單 3-21 使用的損失 函數 categorical_crossentropy,標籤應該遵循分類編碼。對於整數標籤,你應該使用 sparse_categorical_crossentropy。

model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['acc'])

這個新的損失函數在數學上與 categorical_crossentropy 完全相同,二者只是接口不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章