第一種方法是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 完全相同,二者只是接口不同。