Настройка модели Keras с помощью pandas dataframe - PullRequest
0 голосов
/ 29 июня 2018

Я впервые использую python и Keras для машинного обучения, я привык к MATLAB. В основном у меня есть паркет, который содержит метки в виде одного столбца и текст в качестве другого столбца. Я беру текст и векторизую его, используя вложение GloVe, так что после всего этого у меня остается 2 столбца: векторизация, которая имеет ndarray с 4000 числами в каждом массиве numpy; и столбец метки. Затем я пытаюсь использовать этот векторизованный столбец в качестве входных данных для моей модели, но именно здесь я сталкиваюсь с проблемами.

pd_df.head(1) #pd_df is my dataframe

вывод:

    vectorized  label
0   [-0.10767000168561935, 0.11052999645471573, 0....   0

Затем я разделяю свои данные и преобразую в ndarrays:

from sklearn.model_selection import train_test_split

train, test = train_test_split(pd_df, test_size=0.3)

trainLabels = train.as_matrix(columns=['label'])
train = train.as_matrix(columns=['vectorized'])

testLabels = test.as_matrix(columns=['label'])
test = test.as_matrix(columns=['vectorized'])

Затем я проверяю форму моих данных:

train.shape
(410750, 1)

Это - то, где мое отсутствие знания о numpy входит, потому что этот размер не имеет смысла для меня. Похоже, что это должно быть (410750, 4000), потому что каждый элемент представляет собой массив из 4000 элементов.

После этого я настроил свою модель:

from keras.layers import Input, Dense
from keras.models import Model
from keras.optimizers import SGD
from keras.losses import binary_crossentropy
from keras.metrics import binary_accuracy

inputs = Input(shape=(4000,))

x = Dense(units=2000, activation='relu')(inputs)
x = Dense(units=500, activation='relu')(x)
output = Dense(units=2, activation='softmax')(x)

model = Model(inputs=inputs, outputs=output)
model.compile(optimizer=SGD(), loss=binary_crossentropy, metrics=['accuracy'])
model.fit(train, 
          trainLabels, 
          epochs=50,
          batch_size=50)

Тогда я продолжаю получать ошибку:

ValueError: Error when checking input: expected input_13 to have shape (4000,) but got array with shape (1,)

Как я уже говорил, я новичок в машинном обучении в мире питонов, поэтому любая помощь будет потрясающей.

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Чтобы это исправить, мне пришлось распаковать массив массивов. Я выбрал для этого способ:

xTrain = np.zeros((train.shape[0], 4000))

i = 0
for vector in train: # train is my numpy array of arrays
    xTrain[i] = vector[0]
    i += 1
0 голосов
/ 29 июня 2018

Ваши тренировочные данные имеют только 1 измерение, в то время как вы указываете 4000 измерений в качестве входных данных. Кроме того, вы должны использовать слой внедрения, если работаете с предварительно обученными вложениями слов, такими как GloVe. Проверьте этот блог Keras: https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...