ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type list)

ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type list)

import random
import json
import pickle
import numpy as np
import nltk
from nltk.stem import WordNetLemmatizer
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Dropout
from tensorflow.keras.optimizers import SGD
nltk.download('punkt')
nltk.download('wordnet')

lemmatizer = WordNetLemmatizer()

intents = json.loads(open('intents.json', encoding='utf-8').read())

words = []
classes = []
documents = []
ignore_letters = ['?', '!', '.', ',', '(', ')', '/', "'"]

for intent in intents['intents']:
    for pattern in intent["patterns"]:
        word_list = nltk.word_tokenize(pattern)
        words.extend(word_list)
        documents.append((word_list, intent['tag']))
        if intent['tag'] not in classes:
            classes.append(intent['tag'])


words = [lemmatizer.lemmatize(word) for word in words if word not in ignore_letters]
words = sorted(set(words))
classes = sorted(set(classes))

pickle.dump(words, open('words.pkl', 'wb'))
pickle.dump(words, open('classes.pkl', 'wb'))

training = []
output_empty = [0] * len(classes)

for document in documents:
    bag = []
    word_patterns = document[0]
    word_patterns = [lemmatizer.lemmatize(word.lower()) for word in word_patterns]
    for word in words:
        if word in word_patterns:
            bag.append(1) if word in word_patterns else bag.append(0)


    output_row = list(output_empty)
    output_row[classes.index(document[1])]
    training.append([bag, output_row])

random.shuffle(training)
training = np.array(training)

train_x = list(training[:, 0])
train_y = list(training[:, 1])

model = Sequential()
model.add(Dense(256, input_shape=(len(train_x[0]),), activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(len(train_y[0]), activation='softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])

model.fit(np.array(train_x), np.array(train_y), epochs=500, batch_size=5, verbose=1)
model.save('arthur.model')
print("Done")

我一直在按照本教程制作聊天机器人:https://www.youtube.com/watch?v=1lwddP0KUEg

但是,它抛出错误:ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type list).

我对 numpy 和 Tensorflow 有点陌生,所以我不知道它们是关于什么的,哈哈。

代码错误地创建了行李清单,基本上,它是空的。请尝试以下代码:

    for word in words:
        #if word in word_patterns: comment out this line
        bag.append(1) if word in word_patterns else bag.append(0) # and fix its identation

因此您的训练列表长度为 40(len(words)),y 的长度为 3(# no of 类)。我希望会有意义。