如何根据激活结果在keras中的概率对它们进行排序?

时间:2019-07-17 13:54:40

标签: python tensorflow keras

如何从5528个标签中按降序从概率中选择100个顶部标签?

我正在尝试使用tensorflow后端解决keras中的多标签问题。我已经在keras class_mode="categorical"中使用imagedatagenerator对标签进行了hothot编码(总共5528个)。火车图像具有可变数量的图像,而测试图像最多可以具有100张图像。

对于我的多标签分类问题,我写了以下一层:

model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same',
                 input_shape=(50,50,3)))
...
...
model.add(Dropout(0.5))
model.add(Dense(5528, activation='sigmoid'))
model.compile(optimizer="adam",loss="binary_crossentropy",
metrics=accuracy"])

在这5528个标签中,我想选择概率最高的100个标签。

为此,我编写了以下函数:

import tensorflow as tf
from keras.layers import Lambda

def top_k(input, k):
  return tf.nn.top_k(input, k=k, sorted=True).indices

并添加了一层

model.add(Lambda(top_k, input_shape=(5528,), arguments={'k':100}))`

在编译之前。

当我使用.values时,它没有给我任何结果(标签),而当我使用.indices时,它给了我以下错误:

TypeError: Expected int32, got 1e-07 of type 'float' instead.

我很困惑,究竟应该使用.indices还是.values

另外,我想问一下我在Lambda中编写输入形状的方式是否正确?

0 个答案:

没有答案