首页 > 解决方案 > 在 Keras 模型中使用 class_weight 会给我一个错误

问题描述

我为二进制分类问题构建了一个顺序 bi-lstm RNN。我有两个不同的类/标签(0 和 1),我的输入是一个句子(序列),序列中的每个单词都被分类为 0 或 1。模型工作正常,我得到 84% 的 val 准确度。当我想使用 class_weight 的参数拟合模型时,问题就来了。当我使用此参数时,我的模型失败并给我以下错误消息。

 tensorflow.python.framework.errors_impl.InvalidArgumentError:  indices[2] = 3 is not in [0, 2)
 [[{{node GatherV2}}]]
 [[IteratorGetNext]] [Op:__inference_train_function_115529]

我想使用类权重的原因是因为我的数据不平衡(1789 1s 为 5211 0s)。这是我的模型的外观:

vocab_size = n_words + 1
word_embedding_size = 30
sequence_length = max_len

model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim=word_embedding_size, mask_zero=False, input_length=max_len))
model.add(Bidirectional(LSTM(units=100, return_sequences=True)))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.build
print(model.summary())

history = model.fit(X_train, y_train, batch_size=32, epochs=15, validation_split=0.2, verbose=1, class_weight=class_weight)

类权重词典:

unique, counts = np.unique(y, return_counts=True)
weight_for_0 = (1/counts[0])*(counts[0]+counts[1])/2.0
weight_for_1 = (1/counts[1])*(counts[0]+counts[1])/2.0
class_weight = {0: weight_for_0, 1: weight_for_1}
print(class_weight)
{0: 0.6716561120706198, 1: 1.956400223588597}

标签: pythonmachine-learningkerasrecurrent-neural-network

解决方案


推荐阅读