Ich versuche Sequenzklassifizierung mit Keras in Python 3. Ich versuche, Sequenzen von Wörtern zu klassifizieren. In meinen Daten habe ich word_2_vec verwendet, um die Wörter in ein Array mit Form 300 zu transformieren. Meine Trainingsdaten lauten wie folgt:Keras Sequenzklassifizierung in Python
X -> Liste der Wortvektoren (alle Listen der Wortvektoren sind 50 Wortvektoren in der Länge)
Y -> Liste der korrekten Klassen, die ein Hot-codiert sind (wie folgt: [[0, 0, 1], [1, 0, 0], [1, 0, 0] ...))
Wenn ich versuche, das Modell zu initialisieren und meine Daten darauf anzupassen, bekomme ich immer Fehler. Ich bin neu in Deep Learning mit Keras. Was sollten die Schichten meines Modells sein? Auch ein bestimmter Fehler, den ich bekomme, ist, dass mein input_shape falsch ist. Was ist mein Input_shape in diesem Fall?
Code:
training_data = []
with open(INTENT_RECOGNITION_TRAINING, 'r') as json_file:
json_obj = json.load(json_file)
for data in json_obj['data']:
for query in data['queries']:
words = [START_TOKEN] + word_tokenize(query[0]) + [END_TOKEN]
if len(words) > JText.MAX_QUERY_LENGTH:
JText.MAX_QUERY_LENGTH = len(words)
training_data.append((words, data['intent']))
training_data = [(JText._pad_sequence(ws, JText.MAX_QUERY_LENGTH), intent) for (ws, intent) in training_data]
for i in range(len(training_data)):
if training_data[i][1] not in JText.INTENTS:
JText.INTENTS.append(training_data[i][1])
query_vector = []
for w in training_data[i][0]:
if w in JText.WORD2VEC.vocab:
query_vector.append(JText.WORD2VEC[w])
else:
query_vector.append(np.zeros(300))
training_data[i] = (query_vector, training_data[i][1])
random.shuffle(training_data)
X_train = [tup[0] for tup in training_data]
y_train = [tup[1] for tup in training_data]
y_labelencoder = LabelEncoder()
y_train = y_labelencoder.fit_transform(y_train).reshape(-1, 1)
y_onehotencoder = OneHotEncoder(categorical_features=[0])
y_train = y_onehotencoder.fit_transform(y_train).toarray()
recognizer = Sequential([
LSTM(100, input_shape=(JText.MAX_QUERY_LENGTH, 300)),
Dense(len(JText.INTENTS), activation='sigmoid')
])
recognizer.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
recognizer.fit(X_train, y_train, nb_epoch=100, batch_size=10)
immer diese Fehlermeldung:
Exception: Error when checking model input: expected lstm_input_1 to have 3 dimensions, but got array with shape (21, 1)
Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren MCVE-Code veröffentlicht und das Problem genau beschrieben haben. – Prune