HierarchicalAttentionNetwork代码运行IndexError下标越界问题求解
报错根因
你遇到的越界错误核心是标签数组完全为空,触发点在索引操作labels = np.asarray(labels)[indices.astype(int)]:
- 收集标签的循环里错误使用了
np.append(labels, input_data.sentiment[idx]),np.append不是in-place操作,不会修改原labels列表,会返回新的数组但你没有接收,导致labels从头到尾都是空列表 - 后续将
labels转为numpy数组时,数组长度为0,用长度和数据集一致的indices索引空数组时,自然触发越界报错,6319只是随机打乱后的第一个索引值
修复方案
1. 修复标签收集逻辑(必改)
把循环内的标签添加代码,从np.append(labels, input_data.sentiment[idx])改为Python列表原生的append操作:
labels.append(input_data.sentiment[idx])
2. 简化标签转换逻辑(必改)
删除冗余的判断逻辑,直接统一转换标签格式,替换原来的标签转换代码:
# 删除原来的if np.any判断,直接用这行 labels = np_utils.to_categorical(np.array(labels))
3. 适配高版本Keras的自定义层(可选,避免后续训练问题)
如果你的TensorFlow/Keras版本大于2.0,需要把HierarchicalAttentionNetwork类build方法中的可训练权重声明修改为:
# 把原来的self.trainable_weights改为self._trainable_weights self._trainable_weights = [self.W, self.b, self.u]
修复后打印labels.shape应该和data.shape[0]一致,即可正常运行。
内容的提问来源于stack exchange,提问作者huy
相关产品推荐
相关产品推荐

