Tôi mới dùng Keras và gặp rắc rối với hình dạng, đặc biệt khi nói đến RNN và LSTM.Python/Keras - Sai số kích thước: dự kiến 3, có 2 với hình dạng (119, 80)
Tôi đang chạy mã này:
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)
Các predictor_train biến là một mảng NumPy với 119 mảng bên trong, mỗi người có 80 mặt hàng khác nhau.
Tôi đang gặp lỗi này:
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).')
Cho đến nay những gì tôi phát hiện ra là một RNN nhận tensor 3D với hình dạng của (batch_size, timesteps, kích thước) và khi bạn thiết input_shape các batch_size thường bị bỏ qua, và bạn chỉ cần cung cấp một bộ (timesteps, dimension). Nhưng trong phần nào của mã nên được thay đổi (nếu có thể, hãy thêm các đề xuất thay đổi mã của bạn)?
Cần có sự chứng kiến! Tôi đã bị mắc kẹt trên đó cho một thời gian ...
EXTRA INFO
About pred_frame
loại: lớp 'pandas.core.frame.DataFrame'
hình dạng: (206,80)
Pred Pred Pred ...
Date
1999-01-01 NaN NaN NaN
1999-02-01 NaN NaN NaN
1999-03-01 NaN NaN NaN
1999-04-01 NaN NaN NaN
...
2015-11-01 288.333333 -0.044705 589.866667
2015-12-01 276.333333 -0.032157 1175.466667
2016-01-01 282.166667 0.043900 1458.966667
2016-02-01 248.833333 -0.082199 5018.966667
[206 rows x 80 columns]
About target_train
loại: lớp 'pandas.core.series.Series'
hình dạng: (119,)
dtype: float64
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
About predictor_train
loại: 'numpy.ndarray'
hình dạng: (119,80)
dtype: float64
[[ 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]]
EDIT
Nhờ @ Y300 rõ ràng vấn đề 3d bị vượt qua. Hình dạng của tôi bây giờ là (119,1,80).
model.summary() returns the following:
--------------------------------------------------------------------------------
Initial input shape: (None, None, 119)
--------------------------------------------------------------------------------
Layer (name) Output Shape Param #
--------------------------------------------------------------------------------
SimpleRNN (Unnamed) (None, 1) 121
Total params: 121
Tuy nhiên, tôi vẫn gặp sự cố định hình trong mô hình.phù hợp với dòng, như bạn có thể thấy bên dưới:
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']
Tại sao điều đó xảy ra và làm cách nào để khắc phục?
Nhờ đó @ Y300, rõ ràng là tôi đã có thể tạo ra một tensor 3d với hình dạng (119,1,80). Tuy nhiên, tôi vẫn gặp lỗi hình dạng được mô tả ở trên trong bản chỉnh sửa mà tôi đã đưa ra cho câu hỏi. Bạn có bất kỳ ý tưởng nào về lỗi hình dạng này xảy ra không? – abutremutante
Bạn đã khắc phục được sự cố của mình chưa? Từ tóm tắt mô hình 'Hình dạng đầu vào ban đầu: (Không, Không, 119)' có vẻ như nó dự kiến một vectơ đặc trưng có độ dài 119, nhưng chiều dài của bạn là 80. – y300