Keras Python 中的分类分类



我正在对 5 个类进行多类分类。我正在使用Tensorflow和Keras。我的代码是这样的:

# load dataset
dataframe = pandas.read_csv("Data5Class.csv", header=None)
dataset = dataframe.values
# split into input (X) and output (Y) variables
X = dataset[:,0:47].astype(float)
Y = dataset[:,47]
print("Load Data.....")
encoder= to_categorical(Y)
def create_larger():  
    model = Sequential()
    print("Create Dense Ip & HL 1 Model ......")
    model.add(Dense(47, input_dim=47, kernel_initializer='normal',     activation='relu'))
    print("Add Dense HL 2 Model ......")
    model.add(Dense(40, kernel_initializer='normal', activation='relu'))
    print("Add Dense output Model ......")
    model.add(Dense(5, kernel_initializer='normal', activation='sigmoid'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model
estimators = []
estimators.append(('rnn', KerasClassifier(build_fn=create_larger, epochs=60,  batch_size=10, verbose=0)))
pipeline = Pipeline(estimators)
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(pipeline, X, encoder, cv=kfold)
print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))

我作为输入的 CSV 文件包含带有标签的数据。标签就像这个0, 1, 2, 3, 4代表 5 个不同的类。

  1. 然后,由于标签已经是整数形式,我是否需要使用代码中的LabelEncoder()函数?
  2. 另外,我使用了to_categorical(Y (功能。我应该使用它还是应该将包含这些标签的 Y 变量传递给分类器进行训练?

  3. 我得到了这样的错误:支持的目标类型包括:("二进制"、"多类"(。取而代之的是"多标签指示器"。当我在代码中使用编码器变量时发生此错误 结果 = cross_val_score(管道, X, 编码器, cv=kfold(,其中编码器变量表示 to_categorical(Y( 数据。如何解决此错误?

正如 Keras 文档中提到的:

注意:使用categorical_crossentropy损失时,您的目标 应采用分类格式(例如,如果您有 10 个类,则 每个样本的目标应为一个 10 维向量,即 除与 的类对应的索引处的 1 之外的所有零 样本(。为了将整数目标转换为分类目标 目标,您可以使用 Keras 实用程序to_categorical:

from keras.utils.np_utils import to_categorical
categorical_labels = to_categorical(int_labels, num_classes=None)

因此,这意味着您需要在训练前在y上使用to_categorical()方法。但是,如果y已经是整数类型,则无需使用LabelEncoder。

相关内容

  • 没有找到相关文章

最新更新