Я получаю ошибку
Ошибка «Установка элемента массива с последовательностью» при обучении моей нейронной сети в керасе.
Мой ввод 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)