用于神经网络的正确数据形状的3D张量

时间:2018-08-21 07:42:23

标签: pandas dataframe neural-network keras jupyter-notebook

我从神经网络开始,我的数据格式有问题。我有一个pandas DataFrame,其中有130行,4列,每个数据点都是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_train X_test y_train y_test 。但是,当我检查 X_train 的形状时,它会返回(52,4),并且我无法为我的NN创建模型,因为它不接受此形状。这是错误:

  

“ ValueError:检查输入时出错:预期density_4_input具有   3维,但数组的形状为(52,4)“

我相信是因为它应该是(52,4,595),对吧?因此,我有些困惑,如何正确指定此 input_format ,或者可能将数据重塑为合适的数据格式?

我正在使用pandaskerastensorflowjupyter notebook

1 个答案:

答案 0 :(得分:1)

您必须将数据重塑为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)