基于LSTM的音乐生成AI报错ValueError:需传入二维输入
解决LSTM音乐生成AI过采样时的ValueError问题
问题核心
你遇到的ValueError: Must pass 2-d input. shape=(1868, 32, 1),本质是过采样函数要求输入为2维数组,但你的network_input是LSTM需要的3维数组(样本数,序列长度,特征数)。
解决方案
过采样工具(如SMOTE)仅支持处理2维表格数据,因此需要先将3维序列数据展平为2维,过采样后再恢复3维结构适配LSTM:
展平3D输入为2D
将每个序列的时间步和特征合并为一维特征:# 把(1868, 32, 1)转为(1868, 32) network_input_flat = network_input.reshape(network_input.shape[0], -1)执行过采样
用你使用的过采样方法处理展平后的输入和输出:# 以SMOTE为例,根据实际使用的过采样类调整 from imblearn.over_sampling import SMOTE oversampler = SMOTE() networkInputShaped_flat, networkOutputShaped = oversampler.fit_resample(network_input_flat, network_output)恢复3D输入形状
将过采样后的2D数据转回LSTM需要的3维结构:# 转回(新样本数, 32, 1) networkInputShaped = networkInputShaped_flat.reshape(networkInputShaped_flat.shape[0], seqlength, 1)
额外注意事项
- 若教程中的
oversample是自定义函数,检查教程里的network_input形状是否为2维——可能教程是将序列展平后作为模型输入,而你保留了LSTM标准的3维输入结构,导致不匹配。 - 确认
network_output的形状是否符合过采样要求,通常应为1维标签数组。
内容的提问来源于stack exchange,提问作者R1B07008
相关产品推荐
相关产品推荐

