比特币数据分析LSTM训练报错:slice index 0越界问题求助
比特币LSTM训练错误修复方案
错误原因
你的代码中循环构建训练集的切片逻辑完全错误:
x_train.append(train_data[i:60:i, 0])
当i从60开始遍历train_data时,切片起始索引i大于结束索引60,且步长设为i,这会导致每个x_train的元素都是空数组,最终x_train整体是一个维度为[0, ?, 1]的空数组。LSTM层无法处理输入的第一维度为0的情况,因此触发切片越界错误。
修正代码
将循环中的切片逻辑改为取当前i之前的60个时间步数据作为输入样本,对应i位置的数据作为标签:
data = df.set_index('Date') dataset = df.values training_data_len = math.ceil(len(dataset) * .8) scaler = MinMaxScaler(feature_range=(0,1)) scaled_data = scaler.fit_transform(dataset) train_data = scaled_data[0:training_data_len, :] x_train = [] y_train = [] # 修正切片逻辑:取i-60到i的前60条数据 for i in range(60, len(train_data)): x_train.append(train_data[i-60:i, 0]) y_train.append(train_data[i, 0]) x_train, y_train = np.array(x_train), np.array(y_train) x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1)) es_callback = keras.callbacks.EarlyStopping(monitor='val_loss', patience=3) model = Sequential() model.add(LSTM(256, return_sequences=True, input_shape=(x_train.shape[1], 1)))
补充说明
- 修正后
x_train的每个样本都是长度为60的时间序列,符合LSTM对输入格式(样本数,时间步长,特征数)的要求。 - 确保你的
df中包含足够多的数据行,至少要有60条训练数据(否则len(train_data)小于60时,循环不会执行,x_train仍会为空)。
内容的提问来源于stack exchange,提问作者Mücahit Yıldırım
相关产品推荐
相关产品推荐

