如何为TFLearn重塑输入数据?适配框架的数据形状调整方法
解决TFLearn数据形状适配问题
我懂你现在的困扰——你的train_x现在输出形状是(8,),这说明它是个一维数组,每个元素才是你需要的(1300,13)的MFCC特征矩阵,但TFLearn不管是做序列模型还是全连接模型,都需要更规整的多维数组格式。
问题根源
你用as_matrix()(现在pandas更推荐用to_numpy())提取数据时,得到的是一个包含子数组的一维numpy数组,而不是直接的三维数组。TFLearn需要的输入形状通常是(样本数, 时间步长, 特征数)(针对RNN/LSTM这类序列模型)或者(样本数, 总特征数)(针对全连接模型)。
修正步骤
- 替换已弃用的方法:先把
as_matrix()换成to_numpy(),避免pandas抛出警告。 - 堆叠成三维数组:用
numpy.stack()把一维数组里的子数组堆叠成三维结构,这样就能得到TFLearn需要的形状。
完整修正代码
import os import numpy as np import pandas as pd # 补充读取数据的步骤(你应该有这一步但没写出来) data_path = os.path.dirname(os.path.realpath(__file__)) + '/../data/data.csv' data = pd.read_csv(data_path) train = data.sample(frac=0.8, random_state=200) test = data.drop(train.index) # 转换为三维数组:(样本数, 1300, 13) train_x = np.stack(train['lowLevel.mfcc'].to_numpy()) test_x = np.stack(test['lowLevel.mfcc'].to_numpy()) print(train_x.shape) # 现在会输出 (8, 1300, 13)
额外适配方案
如果你要做的是全连接网络,不需要保留序列结构,可以把三维数组展平成二维:
# 展平为(样本数, 1300*13)即(8, 16900) train_x = train_x.reshape(train_x.shape[0], -1) test_x = test_x.reshape(test_x.shape[0], -1)
这样处理后,你的数据就完全适配TFLearn的输入要求啦。
内容的提问来源于stack exchange,提问作者Vlady Veselinov
相关产品推荐
相关产品推荐

