首页 > 解决方案 > 用于神经网络的正确数据形状的 3D 张量

问题描述

我从神经网络开始,我的数据格式有一些问题。我有一个pandas DataFrame1304列,每个数据点都是一个595项目数组。

      |      Col 1      |    Col 2        |    Col 3        |    Col 4        |
Row 1 | [x1, ..., x595] | [x1, ..., x595] | [x1, ..., x595] | [x1, ..., x595] |
Row 2 | [x1, ..., x595] | [x1, ..., x595] | [x1, ..., x595] | [x1, ..., x595] |
Row 3 | [x1, ..., x595] | [x1, ..., x595] | [x1, ..., x595] | [x1, ..., x595] |

我使用train_test_split创建了X_trainX_testy_trainy_test。但是,当我检查X_train的形状时,它返回 (52,4) 并且我无法为我的 NN 创建模型,因为它不接受这种形状。这是错误:

“ValueError:检查输入时出错:预期的 dense_4_input 具有 3 个维度,但得到了形状为 (52, 4) 的数组”

我相信这是因为它应该是(52,4,595),对吧?所以,我有点困惑,我怎样才能正确指定这个input_format或者可能为适当的数据格式重塑我的数据?

我正在使用pandas,keras和.tensorflowjupyter notebook

标签: pandasdataframeneural-networkkerasjupyter-notebook

解决方案


您必须将数据重塑为 3d numpy 数组。

假设我们有一个数据框,其中每个单元格都是您描述的 numpy 数组

import pandas as pd
import numpy as np

data=pd.DataFrame(np.zeros((130,4))).astype('object')
for i in range(130):
    for k in range(4):
        #print(i,k)
        data.iloc[i,k]=np.zeros(595)

然后我们可以将我们的数据框重塑为一个 3d numpy 数组:

dataar=data.values
dataar=np.stack((np.vstack(dataar[:,0]),np.vstack(dataar[:,1]),np.vstack(dataar[:,2]),np.vstack(dataar[:,3])))
dataar=dataar.reshape(130,4,595)
dataar.shape
# (130, 4, 595)

推荐阅读