【发布时间】:2020-06-11 09:58:45
【问题描述】:
我有一个多标签分类问题,我使用了以下代码,但验证准确率在第一个 epoch 中跃升至 99%。我的整个输入是 1245x1024,所以每条线表示一个光谱(因此有 1245 个光谱示例)。所以一个光谱是(1x1024)。输出是我的标签。我有 245 个不同的类(这里是元素)。一张光谱包含一种或两种元素。一个预测的一个输出是 (1x245)
x = pd.read_csv('spectrum_max2proSpund245.csv')
y1 = pd.read_csv('nuclides_max2proSpund245.csv', delimiter=';')
num_features = 1024
model = Sequential()
model.add(Dense(230, kernel_initializer='normal', input_shape=(num_features,),
activation='tanh'))
model.add(Dropout(0.25))
model.add(Dense(245, kernel_initializer='normal', activation='sigmoid'))
model.summary()
X_train, X_test, y_train, y_test = train_test_split(x, y, random_state=42, test_size=0.2)
这就是我编译模型的方式
model.compile(loss='binary_crossentropy',optimizer='Adam',metrics=['accuracy'])
这就是我适合和评估的方式
model.fit(X_train, y_train, epochs=20, validation_data=(X_test, y_test), batch_size=60)
model.evaluate(X_test, y_test, batch_size=60)
模型评估和模型拟合具有相同的结果,但是当我手动查看预测时,可能只有 19% 的预测是正确的。我的代码有什么问题?
【问题讨论】:
-
如果是多类问题,则必须使用
categorical_crossentropyloss。标签也需要转换为分类格式。请参阅 Keras 中的to_categorical()函数来执行此操作。 -
@Stergios 。没有它的多标签:)。多类是当一个输入只有一个标签时。但这里有一个输入一个或两个标签/元素。我有 245 个不同的类/元素。我在 y1 上应用了 MultiLabelBinarizer。所以当我得到一个包含两个元素的输入时,我可能会得到类似 [0 0 1 0 1 ... 0] 的东西,其中包含两个 1 。我试图在此页面上构建我的神经网络analyticsvidhya.com/blog/2019/04/… 与我的神经网络不同的是输入,在此页面上是图像作为输入
-
问题在于 Keras 在多标签问题中计算精度的方式。看看这个线程(虽然不包含解决方案):stackoverflow.com/questions/50686217/…
-
感谢@Stergios,也许没错,但我不知道如何处理我的问题,就像你说的'不包含解决方案':)
标签: machine-learning keras multilabel-classification