Установка элемента массива с последовательностью при обучении nn в керасе - PullRequest
0 голосов
/ 25 июня 2019

Я получаю ошибку Ошибка «Установка элемента массива с последовательностью» при обучении моей нейронной сети в керасе.

Мой ввод xtrain [0] равен (1300) и входит в список. Это вектор предложения, сформированный с помощью w2v. Я попытался изменить его на массив NumPy и изменил форму, но без помощи. Я использовал выравнивающий слой после моего первого плотного слоя, но при появлении ошибки flatten требуется ввод в 3-х измерениях.

Я просмотрел почти все темы. Помоги мне !!

Набор данных с предложениями и метками. Я преобразовал каждое предложение, найдя среднее значение отдельных токенов. Один горячо закодировал этикетки. Перешли оба в метод подгонки двух слоев нейронной сети. Элементы xtrain имеют список длины (300)

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

from keras.models import Sequential 
from keras.layers import Dense 
from sklearn.preprocessing import LabelEncoder,OneHotEncoder,MinMaxScaler
from sklearn.compose import ColumnTransformer
from keras.utils.np_utils import to_categorical
from keras import optimizers
from sklearn.utils import shuffle
import spacy

nlp = spacy.load('en_core_web_lg')

data = pd.read_csv('dialog.csv',encoding='ISO-8859-1')

x = data.Dialogs #List of sentences
y = data.Label 

# To find the vectors of sentence using w2v
def meanv(coords):
    # assumes every item in coords has same length as item 0
    sumv = [0] * len(coords[0])
    for item in coords:
        for i in range(len(item)):
            sumv[i] += item[i]
    mean = [0] * len(sumv)
    for i in range(len(sumv)):
        mean[i] = float(sumv[i]) / len(coords)
    return mean

def sentvec(s):
    print(s)
    for i in range(0,len(s)):
        sent = nlp(s[i])
        x[i] = meanv([w.vector for w in sent])

sentvec(x)

# To change the list vector to array
for i in range(0,len(x)):
    x[i] = np.array(x[i])


enc = LabelEncoder()
y = enc.fit_transform(y)
y = to_categorical(y)

input_dim = len(data.columns) - 1

model = Sequential()
model.add(Dense(16, input_dim = input_dim , activation = 'relu'))
model.add(Dense(10, activation = 'relu'))
model.add(Dense(10, activation = 'relu'))
model.add(Dense(5, activation = 'softmax'))

opt = optimizers.SGD(lr=0.01, momentum=0.9)
model.compile(loss = 'categorical_crossentropy' , optimizer = opt , metrics = ['categorical_accuracy'] )


model.fit(x,y, epochs = 100, batch_size = 10)

scores = model.evaluate(test_x, test_y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

pred1 = model.predict_classes(test_x)
pred = model.predict(test_x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...