Ошибка значения: установка элемента массива с последовательностью. В Keras model.fit

#python #tensorflow #keras #lstm #named-entity-recognition

#python #тензорный поток #keras #lstm #распознавание именованных объектов

Вопрос:

Я получаю «ошибка значения: установка элемента массива с последовательностью» в keras model.fit

 model.fit(X_tr, np.array(y_tr), batch_size=32, epochs=5, validation_split=0.1, verbose=1)



X_tr
Out[22]:
array([[4256, 1244, 4475, ..., 8766, 8766, 8766],
       [5443, 3401, 4709, ..., 8766, 8766, 8766],
       [3829,  543,  681, ..., 8766, 8766, 8766],
       ...,
       [2185, 7510, 8004, ..., 8766, 8766, 8766],
       [7562, 5842, 4742, ..., 8766, 8766, 8766],
       [2449, 6217, 2310, ..., 8766, 8766, 8766]], dtype=int32)

X_tr.shape
(2699, 75)

np.array(y_tr)
Out[37]:
array([array([[0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    0.],
   [0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
    0.],
   ...,
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
    0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,
    0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
    0.]], dtype=float32)], dtype=object)

np.array(y_tr).shape
(2699,)
 

Я в замешательстве, кто-нибудь может мне помочь? Заранее спасибо!

На случай, если вам нужен код: https://github.com/sunsuntianyi/question/blob/master/LSTM.ipynb

Ответ №1:

Ошибка определенно возникает из-за того, что вы передаете массив объектов в качестве прогнозирующей переменной. y_tr Насколько я могу судить по вашему фрагменту, он должен иметь форму (2699,17). Возможно, некоторые из ваших строк y_tr не имеют длины 17 или, возможно, вы специально использовали массив объектов для генерации данных. Если последнее, вы можете попытаться преобразовать его обратно следующим образом:

 y_tr = np.asarray([np.asarray(row, dtype=float) for row in y_tr], dtype=float)
 

float Замените любым типом, который соответствует вашим потребностям. Это должно выдавать ошибку, если строки также имеют разный размер.

Комментарии:

1. Большое вам спасибо! В итоге это было вызвано неправильным размером y_tr. Действительно ценю ваш быстрый ответ. Это мне очень помогло.