有时候在处理数据的时候,必须将标签转换为张量,才能使用tensorflow的框架 方法1.将标签列表转换为整数张量
import numpy as np
def vectorize_sequences(sequences, dimension=10000):
results = np.zeros((len(sequences), dimension))
for i, sequence in enumerate(sequences):
results[i, sequence] = 1.
return results
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)
方法2.one-hot 编码。 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
one_hot_train_labels = to_one_hot(train_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)
方法3.就是将其转换为整数张量。
y_train = np.array(train_labels)
y_test = np.array(test_labels)
对于这种编码方法,唯一需要改变的是损失函数的选择。函数categorical_crossentropy,标签应该遵循分类编码。对于整数标签,你应该使用sparse_categorical_crossentropy。
model.compile(optimizer=‘rmsprop’, loss=‘sparse_categorical_crossentropy’, metrics=[‘acc’]) 这个新的损失函数在数学上与 categorical_crossentropy 完全相同,二者只是接口不同。
|