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