Как передать столбец Pandas как пакет предложений в одномерном тензоре строк? - PullRequest
2 голосов
/ 10 января 2020

Я пытаюсь передать столбец Pandas (или массив numpy) с размером (2946, 1) входному слою для встраивания текста в Keras с Tensorflow 2. Объект Pandas DataFrame - это всего лишь 1 текстовый столбец с 2946 разные наблюдения.

В соответствии с документацией к модулю Tensorflow для этих предварительно обученных вложений слов модуль:

Модуль принимает пакет предложений в 1- Тензор строк D в качестве входных данных.

Сеть и входной слой определены следующим образом:

import tensorflow_hub as hub
import tensorflow as tf
from tenorflow import keras


hub_layer = hub.KerasLayer("https://tfhub.dev/google/Wiki-words-500-with-normalization/2",
                           input_shape=[], dtype=tf.string)

model = keras.Sequential()
model.add(hub_layer)
model.add(keras.layers.Dense(16, activation='relu'))
model.add(keras.layers.Dense(1, activation='sigmoid'))


model.compile(optimizer='Adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

model.fit(X_train.values, y_train, epochs=10, validation_split=0.20)

Я получаю эту ошибку:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-36-cf8b37d02f89> in <module>()
      1 model.fit(X_train.values, y_train,
      2              epochs=10,
----> 3              validation_split=0.20)

8 frames
/tensorflow-2.1.0/python3.6/tensorflow_core/python/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
    571                            ': expected ' + names[i] + ' to have ' +
    572                            str(len(shape)) + ' dimensions, but got array '
--> 573                            'with shape ' + str(data_shape))
    574         if not check_batch_axis:
    575           data_shape = data_shape[1:]

ValueError: Error when checking input: expected keras_layer_input to have 1 dimensions, but got array with shape (2946, 1)

Как можно передать столбец pandas или массив numpy в виде пакета предложений в 1-D тензоре строк, который ожидает входной слой?

1 Ответ

1 голос
/ 10 января 2020

Попробуйте сгладить X.train.values с (2946, 1) до (2946). Если X.train.values является np.array, вы можете использовать X.train.values.ravel() или и несколько других вариантов . Если это не так, просто конвертируйте его в numpy.

...