ValueError:用Python numpy数组中的序列设置数组元素

问题描述 投票:0回答:1

我目前正在开发一个使用 Python 构建 AI 聊天机器人的项目,但遇到了一个似乎无法解决的错误。当尝试将我的训练数据转换为 numpy 数组时,我收到以下错误:

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (29, 2) + inhomogeneous part.

这是我的代码的相关部分:

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

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

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

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

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

我的训练变量是一个列表列表,其中每个内部列表包含一袋单词和一个输出行。我使用 np.shape(training) 检查了训练列表的维度,它返回 (29,),表明它是一个一维数组。但是,当我尝试将其转换为 numpy 数组时,我遇到了上述错误。

我已经仔细检查了我的培训列表的内容,它的格式似乎正确。每个内部列表包含一个词袋(整数列表)和一个输出行(整数列表),两者在所有条目中都具有一致的长度。

我不确定为什么会遇到此错误或如何解决它。任何见解或建议将不胜感激。谢谢!

代码文件:
https://github.com/GH0STH4CKER/AI_Chatbot/blob/main/training.py https://github.com/GH0STH4CKER/AI_Chatbot/blob/main/intents.json

python arrays numpy tensorflow valueerror
1个回答
0
投票

运行代码后,“训练”列表中似乎有两种不同形状的列表,一种形状为 29x55(基本上是 29 个长度为 55 的实例),另一种形状为 29x5(29 个长度为 5 的实例)。由于形状不均匀,这会在生成 numpy 数组时产生问题。您可以将这两个列表视为单独的实例,然后解决它。

尝试在代码中进行以下更正:

training_bag = []
training_output_row = []
output_empty = [0] * len(classes)

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

      output_row = list(output_empty)
      output_row[classes.index(document[1])] = 1
      training_bag.append(bag)
      training_output_row.append(output_row)
  
training_bag = np.array(training_bag)
training_output_row = np.array(training_output_row)

from sklearn.utils import shuffle
train_x, train_y = shuffle(training_bag, training_output_row, random_state=0)
© www.soinside.com 2019 - 2024. All rights reserved.