python - 在 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}
解决方案
推荐阅读
- python - 'def create' 的 Python 编码可以接受除 & # ' 之外的符号
- angular - 单击按钮时如何验证角度形式
- java - Postgresql 连接重置问题
- python-3.x - IBM Cloud with Watson Assistant:API 调用返回“未知错误,代码:422”
- r - 如何摆脱 R 中 geom_point 中填充较深颜色的内点?
- excel - 如何避免在 O365 中以只读模式打开 Word 文档
- javascript - JSON.parse 读取名称带有“-”
- java - Spring Boot UnsatisfiedDependencyException 创建名称为无法解析的循环引用的 bean 时出错
- mysql - 我想查询客户在特定年份完成的交易数量,但每个客户的输出应该以表格格式逐年出现
- java - 我想更改原始文件夹中的视频,但不能播放其他视频