Python 尺寸数量错误:预期为3,形状为2(119,80)

Python 尺寸数量错误:预期为3,形状为2(119,80),python,neural-network,keras,Python,Neural Network,Keras,我是Keras的新手,在形状方面有一些问题,特别是在RNN和LSTM方面 我正在运行以下代码: model.add(SimpleRNN(init='uniform',output_dim=1,input_dim=len(pred_frame.columns))) model.compile(loss="mse", optimizer="sgd") model.fit(X=predictor_train, y=target_train, batch_size=len(pred_frame.inde

我是Keras的新手,在形状方面有一些问题,特别是在RNN和LSTM方面

我正在运行以下代码:

model.add(SimpleRNN(init='uniform',output_dim=1,input_dim=len(pred_frame.columns)))
model.compile(loss="mse", optimizer="sgd")
model.fit(X=predictor_train, y=target_train, batch_size=len(pred_frame.index),show_accuracy=True)
TypeError: ('Bad input argument to theano function with name "/Library/Python/2.7/site-packages/keras/backend/theano_backend.py:362"  at index 0(0-based)', 'Wrong number of dimensions: expected 3, got 2 with shape (119, 80).')
可变预测器_序列是一个numpy数组,有119个内部数组,每个数组有80个不同的项

我有一个错误:

model.add(SimpleRNN(init='uniform',output_dim=1,input_dim=len(pred_frame.columns)))
model.compile(loss="mse", optimizer="sgd")
model.fit(X=predictor_train, y=target_train, batch_size=len(pred_frame.index),show_accuracy=True)
TypeError: ('Bad input argument to theano function with name "/Library/Python/2.7/site-packages/keras/backend/theano_backend.py:362"  at index 0(0-based)', 'Wrong number of dimensions: expected 3, got 2 with shape (119, 80).')
到目前为止,我发现RNN接收的三维张量的形状为(batch_size,timesteps,dimension),当您设置input_shape时,通常会忽略batch_size,您应该只提供(timesteps,dimension)的元组。但是应该在代码的哪一部分进行更改(如果可能,添加您的代码更改建议)


额外信息 关于pred_帧

类型:类“pandas.core.frame.DataFrame”

形状:(206,80)

关于目标列车

类型:类别“熊猫。核心。系列。系列”

形状:(119,)

数据类型:64

Date
2004-10-01    0.003701
2005-05-01    0.001715
2005-06-01    0.002031
2005-07-01    0.002818
...
2015-05-01   -0.007597
2015-06-01   -0.007597
2015-07-01   -0.007597
2015-08-01   -0.007597
[[  0.00000000e+00  -1.00000000e+00   1.03550000e-02 ...,   8.42105263e-01
    6.50000000e+01  -3.98148148e-01]
 [ -1.13600000e-02  -1.07482052e+00  -9.25333333e-03 ...,   4.45783133e-01
    8.30000000e+01  -1.94915254e-01]
 [  4.71300000e-02  -5.14876761e+00   1.63166667e-03 ...,   4.45783133e-01
    8.50000000e+01  -1.94915254e-01]
 ..., 
 [  4.73500000e-02  -1.81092653e+00  -8.54000000e-03 ...,   1.39772727e+00
    2.77000000e+02  -3.43601896e-01]
 [ -6.46000000e-03  -1.13643083e+00   1.06100000e-02 ...,   2.22551929e-01
    2.77000000e+02  -3.43601896e-01]
 [  3.14200000e-02  -5.86377709e+00   1.50850000e-02 ...,   2.22551929e-01
    2.82000000e+02  -2.76699029e-01]]
关于预测器训练

键入:“numpy.ndarray”

形状:(119,80)

数据类型:64

Date
2004-10-01    0.003701
2005-05-01    0.001715
2005-06-01    0.002031
2005-07-01    0.002818
...
2015-05-01   -0.007597
2015-06-01   -0.007597
2015-07-01   -0.007597
2015-08-01   -0.007597
[[  0.00000000e+00  -1.00000000e+00   1.03550000e-02 ...,   8.42105263e-01
    6.50000000e+01  -3.98148148e-01]
 [ -1.13600000e-02  -1.07482052e+00  -9.25333333e-03 ...,   4.45783133e-01
    8.30000000e+01  -1.94915254e-01]
 [  4.71300000e-02  -5.14876761e+00   1.63166667e-03 ...,   4.45783133e-01
    8.50000000e+01  -1.94915254e-01]
 ..., 
 [  4.73500000e-02  -1.81092653e+00  -8.54000000e-03 ...,   1.39772727e+00
    2.77000000e+02  -3.43601896e-01]
 [ -6.46000000e-03  -1.13643083e+00   1.06100000e-02 ...,   2.22551929e-01
    2.77000000e+02  -3.43601896e-01]
 [  3.14200000e-02  -5.86377709e+00   1.50850000e-02 ...,   2.22551929e-01
    2.82000000e+02  -2.76699029e-01]]
编辑 感谢@y300,显然3d问题已经解决了。我现在的形状是(119,1,80)

但是,我仍然在model.fit行中遇到一个成形问题,如您在下面所看到的:

File "/Library/Python/2.7/site-packages/theano/tensor/blas.py", line 1612, in perform
z[0] = numpy.asarray(numpy.dot(x, y))
ValueError: ('shapes (119,80) and (119,1) not aligned: 80 (dim 1) != 119 (dim 0)', (119, 80), (119, 1))
Apply node that caused the error: Dot22(Alloc.0, <TensorType(float32, matrix)>)
Inputs types: [TensorType(float32, matrix), TensorType(float32, matrix)]
Inputs shapes: [(119, 80), (119, 1)]
Inputs strides: [(320, 4), (4, 4)]
Inputs values: ['not shown', 'not shown']
文件“/Library/Python/2.7/site packages/theano/tensor/blas.py”,第1612行,执行
z[0]=numpy.asarray(numpy.dot(x,y))
ValueError:('shapes(119,80)和(119,1)未对齐:80(尺寸1)!=119(尺寸0)'(119,80),(119,1))
导致错误的应用节点:Dot22(Alloc.0,)
输入类型:[TensorType(浮点32,矩阵),TensorType(浮点32,矩阵)]
输入形状:[(119,80),(119,1)]
输入跨步:[(320,4),(4,4)]
输入值:[“未显示”、“未显示”]

为什么会发生这种情况?我如何修复它?

您可以通过执行以下操作来检查模型的外观

model.summary()
在这种情况下,应该如下所示(实际值可能不同):

如您所见,输入是三维张量,而不是二维张量。因此,您需要重新调整阵列以符合keras的期望。特别是,输入X_序列应具有尺寸(num_samples,1,input_dim)。以下是一些随机生成的x/y数据的工作示例:

model.add(keras.layers.SimpleRNN(init='uniform',output_dim=1,input_dim=100))
model.compile(loss="mse", optimizer="sgd")
X_train = np.random.rand(300,1,100)
y_train = np.random.rand(300)
model.fit(X=X_train, y=y_train, batch_size=32,show_accuracy=True)

感谢@y300,显然我能够创建一个形状为(119,1,80)的3d张量。然而,在我对这个问题所做的编辑中,我仍然得到了上面描述的一个形状错误。你知道这个形状错误发生在哪里吗?你解决问题了吗?从模型摘要
初始输入形状:(None,None,119)
它似乎期望长度为119的特征向量,但您的长度为80。