keras to_categorical 增加了额外的价值
keras to_categorical adds additional value
我有 4 个 类 需要预测,我正在使用 keras 的 to_categorical
来实现它,我希望得到一个 4 one-hot-encoded
数组,但似乎我得到了5 个值,而是为所有行
显示一个额外的 [0]
值
dict = {'word': 1, 'feature_name': 2, 'feature_value': 3, 'part_number': 4}
Y = dataset['class'].apply(lambda label: dict[label])
print(Y.unique()) #prints [1 4 2 3]
train_x, test_x, train_y, test_y = model_selection.train_test_split(X, Y, test_size=0.2, random_state=0)
train_y = to_categorical(train_y)
print(train_y[0])# prints [0. 0. 1. 0. 0.]
正在尝试构建的模型如下
model = Sequential()
model.add(Dense(10, input_dim=input_dim, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(4, activation='softmax'))
但它一直在抛出
ValueError: Error when checking target: expected dense_5 to have shape (4,) but got array with shape (5,)
可能是keras版本错误。尝试更新它,因为这对我有用:
dict = {'word': 1, 'feature_name': 2, 'feature_value': 3, 'part_number': 4}
Y = np.random.randint(4, size=10)
print(np.unique(Y)) #prints [0 1 2 3]
train_y = np_utils.to_categorical(Y, num_classes=4)
print(train_y[0]) # prints [0. 0. 1. 0.]
尝试从 0 开始你的字典,因为当 Keras 读取你的数据时以 0 作为参考。
dict = {'word': 0, 'feature_name': 1, 'feature_value': 2, 'part_number': 3}
如果不行,试试强制类的数字:
train_y = to_categorical(train_y, num_classes = 4)
您需要从 0 开始编号 类,像这样:
dict = {'word': 0, 'feature_name': 1, 'feature_value': 2, 'part_number': 3}
您可以通过 help() 命令获取函数的描述
help(np_utils.to_categorical)
:
Help on function to_categorical in module keras.utils.np_utils:
to_categorical(y, num_classes=None, dtype='float32')
Converts a class vector (integers) to binary class matrix.
E.g. for use with categorical_crossentropy.
# Arguments
y: class vector to be converted into a matrix
(integers from 0 to num_classes).
num_classes: total number of classes.
dtype: The data type expected by the input, as a string
(`float32`, `float64`, `int32`...)
# Returns
A binary matrix representation of the input. The classes axis
is placed last.
我有 4 个 类 需要预测,我正在使用 keras 的 to_categorical
来实现它,我希望得到一个 4 one-hot-encoded
数组,但似乎我得到了5 个值,而是为所有行
[0]
值
dict = {'word': 1, 'feature_name': 2, 'feature_value': 3, 'part_number': 4}
Y = dataset['class'].apply(lambda label: dict[label])
print(Y.unique()) #prints [1 4 2 3]
train_x, test_x, train_y, test_y = model_selection.train_test_split(X, Y, test_size=0.2, random_state=0)
train_y = to_categorical(train_y)
print(train_y[0])# prints [0. 0. 1. 0. 0.]
正在尝试构建的模型如下
model = Sequential()
model.add(Dense(10, input_dim=input_dim, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(4, activation='softmax'))
但它一直在抛出
ValueError: Error when checking target: expected dense_5 to have shape (4,) but got array with shape (5,)
可能是keras版本错误。尝试更新它,因为这对我有用:
dict = {'word': 1, 'feature_name': 2, 'feature_value': 3, 'part_number': 4}
Y = np.random.randint(4, size=10)
print(np.unique(Y)) #prints [0 1 2 3]
train_y = np_utils.to_categorical(Y, num_classes=4)
print(train_y[0]) # prints [0. 0. 1. 0.]
尝试从 0 开始你的字典,因为当 Keras 读取你的数据时以 0 作为参考。
dict = {'word': 0, 'feature_name': 1, 'feature_value': 2, 'part_number': 3}
如果不行,试试强制类的数字:
train_y = to_categorical(train_y, num_classes = 4)
您需要从 0 开始编号 类,像这样:
dict = {'word': 0, 'feature_name': 1, 'feature_value': 2, 'part_number': 3}
您可以通过 help() 命令获取函数的描述
help(np_utils.to_categorical)
:
Help on function to_categorical in module keras.utils.np_utils:
to_categorical(y, num_classes=None, dtype='float32')
Converts a class vector (integers) to binary class matrix.
E.g. for use with categorical_crossentropy.
# Arguments
y: class vector to be converted into a matrix
(integers from 0 to num_classes).
num_classes: total number of classes.
dtype: The data type expected by the input, as a string
(`float32`, `float64`, `int32`...)
# Returns
A binary matrix representation of the input. The classes axis
is placed last.