最高 75% 的准确率!帮助!

数据挖掘 机器学习 准确性
2022-03-16 12:12:59

我正在尝试训练一个深度神经网络,以确定如果 X 的前两列中存在 1 和 0,则输出为 1,否则为 0。但我只能在模型上获得 75% 的准确度!

将 numpy 导入为 np 导入 tflearn

X = [[0, 0, 1],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 1]]

Y = [[0, 1],
    [1, 1],
    [1, 0],
    [0, 1]]

Xtest = np.array([[1, 1, 1],
                  [0, 1, 1],
                  [1, 0, 1],
                  [0, 1, 1]])

# Build neural network
net = tflearn.input_data(shape=[None, 3])
net = tflearn.fully_connected(net, 32, activation='sigmoid')
net = tflearn.fully_connected(net, 32, activation='sigmoid')
net = tflearn.fully_connected(net, 2, activation='softmax')
net = tflearn.regression(net, optimizer='adam')

# Define model
model = tflearn.DNN(net)
# Start training (apply gradient descent algorithm)
model.fit(X, Y, n_epoch=5000, batch_size=16, show_metric=True)

pred = model.predict(Xtest)
for i in range(4):
    print(pred[i][0])

输出应该是: [0, 1, 1, 1]

Training Step: 4999  | total loss: 0.50493 | time: 0.004s
| Adam | epoch: 4999 | loss: 0.50493 - acc: 0.7813 -- iter: 4/4
--
    0.01631585881114006
    0.4872587323188782
    0.9684665203094482
    0.019177177920937538
1个回答

看起来您正在将其训练为多类分类器,以表示二元选择。在这种情况下,您的Y值是错误的:

Y = [[0, 1],
    [1, 1],
    [1, 0],
    [0, 1]]

在这里,您的第二个标签不是自洽的,因此无法使用 softmax 输出层进行预测(其中所有输出的总和必须等于 1)。它可以做的最好的事情是[0.5, 0.5]匹配该标签,您实际上可以看到它在您的测试中接近该标签。

你想要这个:

Y = [[0, 1],
    [1, 0],
    [1, 0],
    [0, 1]]

几句旁白。. .

  • 您的示例输入都具有相同的第三列 (=1)。这是冗余数据,您可以删除它。

  • 您的网络比此任务所需的复杂。一个只有几个神经元的隐藏层就足够了。

  • 对于这个特定任务,您可以使用 sigmoid 激活选择单个输出神经元(并且只需要 Y 中的一列)。