训练RNN/LSTM模型时出现KeyError等于length值的问题求助
问题分析与解决
核心原因
出现KeyError: 60(错误值随length参数同步变化)的本质是**TimeseriesGenerator在匹配输入序列与目标值时,无法找到对应索引的目标行**。
TimeseriesGenerator的工作逻辑是:对长度为N的输入数据X,生成N - length个训练样本。第i个样本的输入为X[i:i+length],对应的目标值是Y[i+length]。如果你的Y_train/Y_test索引不是连续整数(比如存在索引缺失、从非0值开始),或者Y的行数少于X的行数,就会出现无法找到i+length索引的KeyError。
解决方案
1. 重置目标数据集索引
确保Y_train和Y_test的索引是从0开始的连续整数,执行以下代码:
Y_train = Y_train.reset_index(drop=True) Y_test = Y_test.reset_index(drop=True)
2. 验证数据集行数匹配
确认Y_train.shape[0] == X_train_s.shape[0]、Y_test.shape[0] == X_test_s.shape[0]。如果行数不匹配,检查数据拆分流程,确保X与Y的样本一一对应。
额外注意事项
- 模型输出为3个神经元,使用
binary_crossentropy损失函数需谨慎:如果是多分类任务,建议改用categorical_crossentropy并确保目标值为独热编码格式;如果是多标签分类,binary_crossentropy可行,但需确认目标值是0/1的多列格式。 EarlyStopping监控val_accuracy,但模型编译时未指定metrics=['accuracy'],会导致训练过程无法计算验证准确率,最终触发EarlyStopping错误。建议修改编译代码:
RNN_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
内容的提问来源于stack exchange,提问作者fede72bari
相关产品推荐
相关产品推荐

