多标签分类模型预测任何输入的相同模式输出

时间:2017-05-24 17:59:45

标签: machine-learning tensorflow neural-network deep-learning keras

根据我在线阅读的内容,我的任务是多标签分类,因为我有~40k图像,每个图像都有多个标签,每个图像可以同时声明多个标签。例如,IMAGE_1 - > [1 0 1 0 0 0 1 ... 1]是可能的。

我在最后一层使用softmax而在binary_crossentropy中使用了丢失函数。这是我的模特:

model = Sequential()
model.add(Conv2D(64, (5, 5),  strides=(1,1), activation='relu',  kernel_initializer='glorot_uniform', input_shape=(256, 256, 3)))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))

# Create the feature vector
model.add(Flatten())
model.add(Dense(1000, activation="relu", kernel_initializer="uniform"))
model.add(Dropout(0.5))
model.add(Dense(17, activation='softmax'))

然后编译

sgd = SGD(lr=0.001, momentum=0.9)
model.compile(loss="binary_crossentropy", optimizer=sgd, metrics=["accuracy"])

并且训练(注意我这里只使用了1k图像以加快测试速度,但是我得到的结果与40k图像相同):

# Save model and stop if overfit
checkpoint = ModelCheckpoint("model.h5", monitor='val_loss', verbose=0, save_best_only=True, save_weights_only=True, mode='auto', period=1)
early_stop = EarlyStopping(monitor='val_loss', min_delta=0.005, patience=3, verbose=0, mode='auto')
callbacks_list = [checkpoint, early_stop]
history = model.fit(data, labels, validation_split=0.33, epochs=20, batch_size=100, callbacks=callbacks_list, verbose=1)

最后,我预测每个输入的输出

CNN_output = model.predict(data)

我使用以下代码获得以下输出:

for h in range(len(data)):
    output_file.write("ACTUAL: train_" + str(h) + ": " + "\n" + str(labels[h]) + "\n")
    output_file.write("PREDICTION: train_" + str(h) + ": " + "\n" + str(CNN_output[h]) + "\n")

Actual Vs Predictions

可以看出,对于任何输入,预测中的模式与[0 1 0 1 0 0 0 0 ...]相同,我不知道为什么会这样!

以下是每个时代的样子: Accuracy Vs Loss

可以看出,验证精度保持不变,这是我假设的上述问题的结果。 与精度相比,F_score也非常低,这似乎也是由于上述问题所致。

非常感谢任何帮助!

此致 利奥尔

0 个答案:

没有答案