Machine learning 多标签分类问题

Machine learning 多标签分类问题,machine-learning,keras,neural-network,multilabel-classification,Machine Learning,Keras,Neural Network,Multilabel Classification,我遵循了本教程: 并为多标签分类编写了一些代码。我曾经在小范围内使用过一个hot编码,但我不得不转到文章中提到的选项2,因为我有6000个类,因此一个hot是不可行的。我设法训练了网络,它说99%的准确率和83%的f1分数。然而,当我尝试测试网络时,当有6000个可能的标签时,每幅图像只输出3个标签的组合。我想知道测试模型的代码是否不正确。我试过使用帖子中提到的代码,但不起作用: test_generator.reset() pred = model.predict_generator(test

我遵循了本教程: 并为多标签分类编写了一些代码。我曾经在小范围内使用过一个hot编码,但我不得不转到文章中提到的选项2,因为我有6000个类,因此一个hot是不可行的。我设法训练了网络,它说99%的准确率和83%的f1分数。然而,当我尝试测试网络时,当有6000个可能的标签时,每幅图像只输出3个标签的组合。我想知道测试模型的代码是否不正确。我试过使用帖子中提到的代码,但不起作用:

test_generator.reset()
pred = model.predict_generator(test_generator, steps=STEP_SIZE_TEST, verbose=1);
pred_bool = (pred > 0.5)
无序
类型:list()>float()

我一直在努力解决这个问题,但没有找到答案,而且我在网上找不到任何人做类似事情的例子。有没有人知道如何使用这个代码块使这个预测部分工作(我有另外两个选项,并且打印了一个或多个标签),或者为什么模型在训练这个行为时失败了

编辑:有关培训问题的更多内容,请参阅所有培训代码:

import json
input_file = open ('class_names_6000.json')
json_array = json.load(input_file)
#print(str(json_array))

args = parser.parse_args()
gpu_options = tf.GPUOptions(allow_growth=True)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
print('Loading Data...')
df = pd.read_csv('dataset_train.csv')
df["labels"]=df["labels"].apply(lambda x:x.split(","))
datagen=ImageDataGenerator(rescale=1./255.)
test_datagen=ImageDataGenerator(rescale=1./255.)
train_generator=datagen.flow_from_dataframe(
dataframe=df,
directory="",
x_col="Filepaths",
y_col="labels",
batch_size=128,
seed=42,
shuffle=True,
class_mode="categorical",
classes=json_array,
target_size=(100,100))

df = pd.read_csv('dataset_test.csv')
df["labels"]=df["labels"].apply(lambda x:x.split(","))
test_generator=test_datagen.flow_from_dataframe(
dataframe=df,
directory="",
x_col="Filepaths",
y_col="labels",
batch_size=128,
seed=42,
shuffle=True,
class_mode="categorical",
classes=json_array,
target_size=(100,100))

df = pd.read_csv('dataset_validation.csv')
df["labels"]=df["labels"].apply(lambda x:x.split(","))
valid_generator=test_datagen.flow_from_dataframe(
dataframe=df,
directory="",
x_col="Filepaths",
y_col="labels",
batch_size=128,
seed=42,
shuffle=True,
class_mode="categorical",
classes=json_array,
target_size=(100,100))
print('Data Loaded.')

f1_score_callback = ComputeF1()
model = build_model('train', numclasses=len(json_array), model_name = args.model)

ImageFile.LOAD_TRUNCATED_IMAGES = True

还有一个重要的细节,在培训时,它说准确率为99%,f1分数为84%,验证f1分数为84%。

1)请在发布后校对(您的代码格式不正确-这次为您修复)2)因为错误发生在
pred\u bool=(pred>0.5)
,这一行后面的所有代码都是无关的(从未执行过),它只会造成不必要的混乱,不应该包括在这里;与错误无关(已删除)之前的代码也是如此。请编辑您的问题,以包含
pred
predict\u生成器()的示例返回详细回溯的概率列表,请遵循以下链接:我在后面包含了代码,因为我能够使用其他方法使预测工作,但输出似乎不正确。所以,我还想知道是否有人知道为什么培训可能只输出几个课程。在看了预测之后,我怀疑这仅仅是预测的问题,很可能是训练的问题。