【发布时间】:2019-08-23 11:22:53
【问题描述】:
我为文本分类创建了一个 Conv1D 模型。
当在最后一个密集处使用 softmax / sigmoid 时,它产生的结果为
softmax => [0.98502016 0.0149798 ]
sigmoid => [0.03902826 0.00037046]
我只希望 sigmoid 结果的第一个索引应该至少大于 0.8。只是希望多类应该有独立的结果。我如何实现这一目标?
模型摘要:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (None, 128, 100) 600
_________________________________________________________________
conv1d (Conv1D) (None, 126, 128) 38528
_________________________________________________________________
max_pooling1d (MaxPooling1D) (None, 63, 128) 0
_________________________________________________________________
conv1d_1 (Conv1D) (None, 61, 128) 49280
_________________________________________________________________
max_pooling1d_1 (MaxPooling1 (None, 30, 128) 0
_________________________________________________________________
conv1d_2 (Conv1D) (None, 28, 128) 49280
_________________________________________________________________
max_pooling1d_2 (MaxPooling1 (None, 14, 128) 0
_________________________________________________________________
flatten (Flatten) (None, 1792) 0
_________________________________________________________________
dense (Dense) (None, 2) 3586
=================================================================
Total params: 141,274
Trainable params: 141,274
Non-trainable params: 0
_________________________________________________________________
model.add(keras.layers.Dense(num_class, activation='sigmoid'))
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop', metrics=['acc'])
【问题讨论】:
-
我有一段时间没有使用 keras,但我认为您需要使用与
sigmoid不同的损失函数,因为categorical_crossentropy用于依赖类。所以可能binary_crossentropy应该适合你。
标签: python tensorflow keras