Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为TFLearn创建验证集?_Python_Tensorflow_Neural Network_Chatbot_Tflearn - Fatal编程技术网

Python 如何为TFLearn创建验证集?

Python 如何为TFLearn创建验证集?,python,tensorflow,neural-network,chatbot,tflearn,Python,Tensorflow,Neural Network,Chatbot,Tflearn,我正在尝试为此聊天机器人教程创建验证集: 但我的数据形状有问题,这是我用来创建训练集和验证集的方法: words = [] classes = [] documents = [] ignore_words = ['?'] # loop through each sentence in our intents patterns for intent in intents['intents']: for pattern in intent['patterns']: # tok

我正在尝试为此聊天机器人教程创建验证集:

但我的数据形状有问题,这是我用来创建训练集和验证集的方法:

words = []
classes = []
documents = []
ignore_words = ['?']
# loop through each sentence in our intents patterns
for intent in intents['intents']:
    for pattern in intent['patterns']:
        # tokenize each word in the sentence
        w = nltk.word_tokenize(pattern)
        # add to our words list
        words.extend(w)
        # add to documents in our corpus
        documents.append((w, intent['tag']))
        # add to our classes list
        if intent['tag'] not in classes:
            classes.append(intent['tag'])

# stem and lower each word and remove duplicates
words = [stemmer.stem(w.lower()) for w in words if w not in ignore_words]
words = sorted(list(set(words)))

# remove duplicates
classes = sorted(list(set(classes)))


# create our training data
training = []
output = []
# create an empty array for our output
output_empty = [0] * len(classes)

# training set, bag of words for each sentence
for doc in documents:
    # initialize our bag of words
    bag = []
    # list of tokenized words for the pattern
    pattern_words = doc[0]
    # stem each word
    pattern_words = [stemmer.stem(word.lower()) for word in pattern_words]
    # create our bag of words array
    for w in words:
        bag.append(1) if w in pattern_words else bag.append(0)

    # output is a '0' for each tag and '1' for current tag
    output_row = list(output_empty)
    output_row[classes.index(doc[1])] = 1

    training.append([bag, output_row])

# shuffle our features and turn into np.array
random.shuffle(training)
training = np.array(training)

# create train and test lists
x = list(training[:,0])
y = list(training[:,1])
我用不同的数据运行了两次,得到了我的培训和验证集。问题是,我用训练集的形状启动tensorflow:

 net = tflearn.input_data(shape=[None, len(train_x[0])])
因此,当我去适应模型时:

model.fit(train_x, train_y, n_epoch=1000,snapshot_step=100, snapshot_epoch=False, validation_set=(val_x,val_y), show_metric=True)
我得到这个错误:

ValueError:无法为具有形状“(?,84)”的张量“InputData/X:0”馈送形状(23,55)的值

其中23是问题数量,55是验证集的唯一单词数量。84是训练集中唯一单词的数量

因为我的验证集与我的培训集有不同数量的问题/唯一单词,所以我无法验证我的培训


有人能帮我创建一个独立于问题数量的有效验证集吗?我不熟悉Tensorflow和Tflearn,所以任何帮助都会很好。

据我所知,这就是您所做的:您创建了一个名为
单词的词典,其中包含数据集中所有可能的单词。然后,在创建培训数据集时,您搜索了该词典中
问题
的每个单词
单词
,如果在那里,您将
1
添加到您的单词包中,否则添加
0
。这里的问题是每个问题的字数不同,因此
1和
0的字数也不同

你可以通过做相反的事情来绕过它:在训练集的问题中搜索字典中的每个单词,如果有,将
1
添加到你的单词袋中,否则添加
0
。这样,所有问题的长度都将相同(=字典长度
单词长度
)。您的培训集现在将具有维度
(培训中的问题数量,len(words)

对验证集也可以做同样的事情:在验证集的问题中搜索字典中的每个单词
words
,如果有,则将
1
添加到单词包中,否则添加
0
。同样,这样,验证集现在将具有维度
(验证中的问题数,len(words)
解决了尺寸不匹配的问题


因此,假设
单词中有90个单词,培训设置形状:
(?,90)
,验证设置形状:
(23,90)

嗯,这可能是正确的方法!我将尝试实现此方法,看看它是否有效!谢谢你的帮助!!(很抱歉反应太晚!)请告诉我结果。:)嘿!它工作得很好!问题是我没有像你说的那样使用“单词”dict来包含数据集中所有可能的单词(正在实例化两个dict,一个用于验证,另一个用于训练集),所以我所做的是创建一个包含验证和培训集中所有可能单词的dict。感谢帮助人,我真的很感谢你为帮助一个陌生人所做的努力!