Преобразование тензоров в приемлемый для tensorflow вид

Задача: составить простенькую модель под сентимент-анализ. Пайплайн пройден, данные представлены в виде вложенных списков. Проблемы начинаются при попытке натренировать модель.

history = model.fit(X, Y, batch_size=32, epochs=50)

Поскольку keras не может делать из вложенных списков тензоры, преобразуем все в список с массивами numpy, а затем и внешний список конвертируем также.

for i in range(0, len(data)):
    data[i] = numpy.asarray(data[i])

X = numpy.asarray(data)

На что получаем: ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray).

Указание типа приводит к аналогичной ошибке

X = numpy.asarray(data, dtype=numpy.ndarray)

Ладно, тогда пробуем через рваные тензоры

X = tensorflow.ragged.constant(data)

На что получаем

ValueError: Dimensions 32 and 35 are not compatible

Вопрос: В чем, собственно, проблема? Длина каждого вложенного массива не превышает 11, всего массивов 32. Откуда взялось число 35 непонятно совершенно. Самое большое слово длиной 41, других слов больше 30 просто нет.

Модель:

model = Sequential()
model.add(gensim_to_keras_embedding(word2vec_model))
model.add(LSTM(128, return_sequences=True))
model.add(LSTM(64))
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer=Adam(0.001))

Summary описывает ее следующим образом:

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 embedding (Embedding)       (None, None, 300)         11849400  
                                                                 
 lstm (LSTM)                 (None, None, 128)         219648    
                                                                 
 lstm_1 (LSTM)               (None, 64)                49408     
                                                                 
 dense (Dense)               (None, 2)                 130       
                                                                 
=================================================================
Total params: 12,118,586
Trainable params: 269,186
Non-trainable params: 11,849,400
_________________________________________________________________

Буду благодарен за любую помощь.


Ответы (0 шт):