处理标签和损失的两种方法

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

发布了32 篇原创文章 · 获赞 6 · 访问量 9306

猜你喜欢

转载自blog.csdn.net/ningmengccccc/article/details/102979325