如何从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中编写输入形状的方式是否正确?