如何解决重塑 Python 列表以匹配输入层数据预处理 - Keras - LSTM - MoCap
美好的一天,
我正在尝试使用多个 excel 文件(动作捕捉数据)作为输入来训练 LSTM。每个 excel 文件代表一个身体动作,我想使用训练集和测试集中的多个动作来训练网络。下面是单个excel文件的例子:
至于输入形状,它是 (1,2751,93),输入维度细分: 样品:1, 时间步长:2751, 特点:93
输入自变量 (x) 是人体关节及其位置,依赖变量 (y) 是每个动作的标签。
提前致谢!
编辑:添加详细代码
# Multiple Sheets
import os
import glob
motionName = []
for ds in glob.glob("*.csv"):
head,tail = os.path.split(str(ds))
motionName.append(tail)
print('Motion Name: ',tail)
import pandas as pd
num_rows = 300
samples = 0
datasets = []
activityIndex = []
list_num_features = [[]]
for i,activity in enumerate(motionName):
data = pd.read_csv('{}'.format(motionName[i]),nrows = num_rows,header=None,skiprows=1)
list_num_features.append([])
datasets.append(data)
#datasets[i].append(data)
for j in range(0,len(data.columns)):
list_num_features[i].append(data.columns[j])
activityIndex.append('{}'.format(motionName[i]))
samples += 1
print('activityIndex : {} '.format(activityIndex))
for i in range(0,len(datasets)-1):
print('{}'.format(motionName[i]))
print(datasets[i].head())
输出:
因此,调用 'df.head()' 时获得的预期输出类似于此输出:
我想要做的是能够在需要时分别获取/打印每条记录(行)。在使用以下示例代码加载单个数据帧时,我能够做到这一点,但在尝试将多个数据帧加载到列表中然后尝试使用循环为每个数据帧实现相同的步骤时失败了。
# Single Sheet
import pandas as pd
dataset = pd.read_csv('motion.csv')
index = dataset.index
print(len(index))
num_rows = len(index)
dataset.head()
编辑:问题已澄清!
简单地说,我现在拥有的是以下内容:
- 8 个数据框存储在一个列表中(列表形状 (8,))
- 每个数据框形状为 (300,93)
我想要做的是将这个列表塑造成 (8,300,93) 例如,以便它匹配神经网络的输入层。
由于我不断收到以下错误:
ValueError: cannot reshape array of size 8 into shape (8,93)
如果可能的话,我要求澄清,因为我最后的情况有点模糊,为什么我会遇到这个错误。
提前致谢!
解决方法
编写此函数来处理预处理以克服重塑问题。此外,该函数使用 Scikit-Learn 'LabelEncadoer()' 对标签 (y) 进行编码。
## Data Preprocessing
from sklearn.preprocessing import LabelEncoder
def preprocess_df(df,start,quantity,numRows,df_name):
x = []
features = []
y = []
label_encoder = LabelEncoder()
for i in range(start,quantity):
data = pd.read_csv('{}'.format(df[i]),nrows=numRows,skiprows=1)
y.append(df[i])
x.append(data)
if i == start:
for j in range(0,len(data.columns)):
features.append(data.columns[j])
if df_name == 'test':
i = i - start
print('({}/{}) x[{}]: {}'.format(i+1,(quantity - start),i,x[i].shape))
else:
print('({}/{}) x[{}]: {}'.format(i+1,x[i].shape))
print('{} set (x) shape: {},{} set (y) shape: {}'.format(df_name,np.array(x).shape,df_name,np.array(y).shape))
y = np.array(label_encoder.fit_transform(y))
return np.array(x),y,np.array(features)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。