Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Keras进行多类分类?_Python_Machine Learning_Keras_Neural Network - Fatal编程技术网

Python 如何使用Keras进行多类分类?

Python 如何使用Keras进行多类分类?,python,machine-learning,keras,neural-network,Python,Machine Learning,Keras,Neural Network,我想用Keras做一个简单的分类器来分类我的数据。特征是数字数据,结果是字符串/分类数据。我预测有15个不同的类别/类别。这就是我的代码的外观: model = Sequential() model.add(Dense(16, input_dim = x_train.shape[1], activation = 'relu')) # input layer requires input_dim param model.add(Dense(16, activation = 'relu')) mod

我想用Keras做一个简单的分类器来分类我的数据。特征是数字数据,结果是字符串/分类数据。我预测有15个不同的类别/类别。这就是我的代码的外观:

model = Sequential()
model.add(Dense(16, input_dim = x_train.shape[1], activation = 'relu')) # input layer requires input_dim param
model.add(Dense(16, activation = 'relu'))
model.add(Dense(16, activation = 'relu'))
model.add(Dense(1, activation='relu'))

model.compile(loss="binary_crossentropy", optimizer= "adam", metrics=['accuracy'])

#es = EarlyStopping(monitor='loss', min_delta=0.005, patience=1, verbose=1, mode='auto')
model.fit(x_train, y_train, epochs = 100, shuffle = True, batch_size=128, verbose=2)

scores = model.evaluate(x_test, y_test)
print(model.metrics_names[0], model.metrics_names[1])
问题是我总是遇到这样的错误:

ValueError: could not convert string to float 'category1'
我做错了什么

当我用整数替换我的类名“category1”、“category2”等时,我的代码可以工作,但它总是给我0的准确度。 我尝试更改节点数、层数和激活函数,但结果总是0。好像模型认为我在做回归而不是分类


如果我的分类值不只是1或0,那么使用Keras lib进行分类的正确方法是什么?

如果你有15个类,由标签0到14表示,你可以设置最后的致密层,其中包含15个神经元和激活乙状结肠
致密(15,…)


此外,如果您没有对数据进行一次热编码,请将
sparse\u categorical\u crossentropy
设置为丢失,将
sparse\u categorical\u accurity
设置为度量。

您需要将字符串类别转换为整数,有一种方法:

y_train = tf.keras.utils.to_categorical(y_train, num_classes=num_classes)
此外,多类分类的最后一层应该是:

model.add(Dense(NUM_CLASSES, activation='softmax'))
最后,对于多类分类,正确的损失是分类交叉熵

model.compile(loss="categorical_crossentropy", optimizer= "adam", metrics=['accuracy'])

这是tensorflow提供的一个很好的示例:

您没有正确的激活,对于二进制分类,您希望在输出层使用sigmoid,而不是ReLU。那就行了。我试过了,但是。还有,同样的错误,谢谢!有没有一种方法可以提高准确性和减少val_损失?你可以玩层,添加更多神经元,增加或减少层的数量。如果您注意到在训练时精度很好,但在测试集上显著降低,您可以添加一个退出层或查看正则化。这有助于使模型更加健壮。