【问题标题】:3D Tensor in a correct data shape for neural network用于神经网络的正确数据形状的 3D 张量
【发布时间】:2018-08-21 07:42:22
【问题描述】:

我从神经网络开始,但我的数据格式存在一些问题。我有一个 pandas DataFrame130 行,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_trainX_testy_trainy_test .但是,当我检查 X_train 的形状时,它返回 (52,4) 并且我无法为我的 NN 创建模型,因为它不接受这种形状。这是错误:

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

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

我正在使用pandaskerastensorflowjupyter notebook

【问题讨论】:

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


【解决方案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)

【讨论】:

  • 感谢您的回答。当我尝试重塑时,我得到:ValueError: cannot reshape array of size 520 into shape (130,4,595).
  • 如果不是所有数据点的长度都相等,解决方案是用一个值填充序列或为每个点使用最小长度。
  • 但确实如此。他们都有 595 的 len。:(
  • 您是否尝试过我上面的代码来重塑您的数据?
  • 是的,我在尝试堆叠时遇到错误(ValueError:除连接轴外的所有输入数组维度必须完全匹配)。
猜你喜欢
  • 2017-07-30
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2020-10-07
  • 2020-12-28
  • 2010-10-24
相关资源
最近更新 更多