Я новичок в python, поэтому я следовал учебнику для чат-бота (который, судя по количеству ошибок, с которыми мне приходилось сталкиваться, и тому, как много других людей боролось с этим на этом сайте, не был ' т величайший.) Он использовал tflearn и (после большого количества устранения неполадок) поначалу работал отлично, но я хотел обновить тензорный поток и все до самых последних версий, поэтому с некоторой дополнительной помощью я переключил его на керасы. После намного большего устранения неполадок это работало, но были предупреждения между входом и выходом. Мне удалось избавиться от одного из предупреждений, задав многословие, но другое не удастся go.
2020-03-23 09: 43: 55.050983: W tenorflow / core / common_runtime / base_collective_executor. cc: 217] BaseCollectiveExecutor :: StartAbort Вне диапазона: конец последовательности [[{{node IteratorGetNext} }]]
мой код
import nltk
from nltk.stem.lancaster import LancasterStemmer
stemmer = LancasterStemmer()
import numpy
import tensorflow
tensorflow.compat.v1.logging.set_verbosity(tensorflow.compat.v1.logging.ERROR)
import tensorflow.keras
import random
import json
import pickle
with open("C:\\Users\\School\\Documents\\python\\AI\\VIVA.json") as file:
data = json.load(file)
words = []
labels = []
docs_x = []
docs_y = []
for intent in data["intents"]:
for pattern in intent["patterns"]:
wrds = nltk.word_tokenize(pattern)
words.extend(wrds)
docs_x.append(wrds)
docs_y.append(intent["tag"])
if intent["tag"] not in labels:
labels.append(intent["tag"])
words = [stemmer.stem(w.lower()) for w in words if w != "?"]
words = sorted(list(set(words)))
labels = sorted(labels)
training = []
output = []
out_empty = [0 for _ in range(len(labels))]
for x, doc in enumerate(docs_x):
bag = []
wrds = [stemmer.stem(w) for w in doc]
for w in words:
if w in wrds:
bag.append(1)
else:
bag.append(0)
output_row = out_empty[:]
output_row[labels.index(docs_y[x])] = 1
training.append(bag)
output.append(output_row)
training = numpy.array(training)
output = numpy.array(output)
model = tensorflow.keras.Sequential([
tensorflow.keras.layers.Dense(8, input_shape=(len(training[0]),)),
tensorflow.keras.layers.Dense(8),
tensorflow.keras.layers.Dense(len(output[0]), activation="softmax"),
])
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(training, output, epochs=150, batch_size=None)
def bag_of_words(s, words):
bag = [0 for _ in range(len(words))]
s_words = nltk.word_tokenize(s)
s_words = [stemmer.stem(word.lower()) for word in s_words]
for se in s_words:
for i, w in enumerate(words):
if w == se:
bag[i] = 1
return numpy.array(bag)
def chat():
print("Ready! Type quit to leave.")
while True:
inp = input(">>>")
if inp.lower() == "quit":
break
results = model.predict([[bag_of_words(inp, words)]])
results_index = numpy.argmax(results)
tag = labels[results_index]
for tg in data["intents"]:
if tg['tag'] == tag:
responses = tg['responses']
print(random.choice(responses))
chat()
json словарь в этом формате
{"intents": [
{"tag": "greeting",
"patterns": ["hi", "hey", "is anyone there?", "hello", "good day", "whats up", "sup", "Viv", "VIVA"],
"responses": ["Hello!", "Hi!", "Hey!"],
"context_set": ""
}
]
}
Я знаю, что есть много ответов на эту ошибку в здесь, но ни одно из решений не работает с тем, что я делаю. Я перепробовал все, что видел, но поскольку я не использую tf.data или что-то еще, ничего не работает. Извините, если я сделал что-то не так с форматированием или чем-то другим, я просто создал этот аккаунт, чтобы задать этот вопрос, потому что я действительно отчаянный ученик, и это отнимает много времени, когда я действительно должен заниматься на уроках.