我正在尝试在 python 3 中使用 TFLearn 编写神经网络,但我遇到了与标签相关的问题。神经网络的输入是长度为 11 的一维向量。对应于这些输入的标签也是长度为 11 的一维向量。但是,它们的值不是 0 和 1。通常在大多数示例中,标签由 [1,0 ] 或 [0,1] 就像分类猫和狗的图像时一样。但是,我的情况更独特,我需要使用看起来像 [4,9,11,2,1,6,4,6,10,1,0] 的标签向量。有许多不同的标签类型,而不仅仅是典型示例中的 2 种,而且我无法根据由 0 和 1 组成的向量重新编码我的标签。我的问题是,当以显示的形式使用标签时,它似乎不起作用。基本上,我想知道为什么会这样,以及如何让 TFLearn 正确处理这个问题。当我训练神经网络时,我的准确率通常约为 78%。但是,当我尝试使用 .predict() 函数时,它会输出一个包含所有小于 1 的值的向量。例如,它可能会输出 [0.3747585,0.0034589,0.06857,0.00384,0.001133,0.04858,0.00045737,0.0068587,0.00100102, 0.00066543,0.033322]。
我的标签向量中的值始终是 0 到 11 之间的整数。所以我期待一个输出也有这个范围内的值,但它输出的值在 0 到 1 之间。我该如何解决这个问题?到目前为止,我已经尝试将标签中的每个值除以 11,这样 [4,9,11,2,1,6,4,6,10,1,0] 将变为 [4/11,9/11, 11/11,2/11,1/11,6/11,4/11,6/11,10/11,1/11,0/11]。但是,这似乎也不起作用。我仍然得到大约 78% 的准确度结果和 0 到 1 的输出向量,但它的行为类似于过度拟合。我不确定我是否以编程方式做错了,使用了错误的程序,或者它是否真的过度拟合。下面是我使用的 TFLearn 代码。
#NN starts
net = tflearn.input_data(shape=[None, len(input[0])])
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, len(labels[0]), activation='softmax')
net = tflearn.regression(net)
# Define model
model = tflearn.DNN(net)
# Start training (apply gradient descent algorithm)
model.fit(input, labels, n_epoch=10, batch_size=16, show_metric=True)
#Predict
pred = model.predict(testvector)
print('output = ', pred)`