我正在尝试用Python3中的TFLearn编写一个神经网络,我有一个与标签相关的问题。神经网络的输入是长度为11的1维向量。与这些输入对应的标签也是长度为11的1维向量。但是,它们的值不是0和1。在大多数示例中,标签通常由1,0或0,1组成,例如在对猫和狗的图像进行分类的情况下。然而,我的情况更独特,我需要使用4,9,11,2,1,6,4,6,6,10,1,0这样的标签向量。有许多不同的标签类型,而不是典型的例子中只有2,我不能用由0和1组成的向量来重新编码我的标签。我的问题是,当使用所示形式的标签时,它似乎不起作用。基本上,我想知道这是为什么,以及如何让TFLearn正确地处理它。当我训练神经网络时,我得到了大约78%的准确率。但是,当我随后尝试.predict()函数时,它会输出一个由所有小于1的值组成的向量。
我的标签向量中的值始终是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)`发布于 2019-08-19 16:11:55
获取0到1之间的输出预测值的原因是您正在使用softmax激活功能。Softmax function为0,1范围内的每个输出节点分配一个加起来为1的概率。因此,您不会获得任何整数值作为输出。归一化(即除以11)也不起作用,因为每个输出值都是相互独立的。
您可以通过以下方式将您的问题转换为multiclass-multilabel classification问题:
输出标签的
https://stackoverflow.com/questions/57510987
复制相似问题