我是机器学习和Tensorflow的新手,想要对数据做一个简单的二维分类,不能进行线性分离。
在左侧,您可以看到模型的训练数据。 右侧显示了训练模型所预测的内容。
到目前为止,我对我的模型过度拟合,因此每个可能的输入都被输入到模型中。 我的预期结果将是非常高的准确性,因为模型已经“知道”每个答案。 不幸的是,我使用的深度神经网络只能通过线性分频器分离,这不适合我的数据。
这就是我训练模型的方法:
def testDNN(data):
"""
* data is a list of tuples (x, y, b),
* where (x, y) is the input vector and b is the expected output
"""
# Build neural network
net = tflearn.input_data(shape=[None, 2])
net = tflearn.fully_connected(net, 100)
net = tflearn.fully_connected(net, 100)
net = tflearn.fully_connected(net, 100)
net = tflearn.fully_connected(net, 2, activation='softmax')
net = tflearn.regression(net)
# Define model
model = tflearn.DNN(net)
# check if we already have a trained model
# Start training (apply gradient descent algorithm)
model.fit(
[(x,y) for (x,y,b) in data],
[([1, 0] if b else [0, 1]) for (x,y,b) in data],
n_epoch=2, show_metric=True)
return lambda x,y: model.predict([[x, y]])[0][0]
大部分内容都来自于tflearn的例子,所以我并不完全明白每一行的作用。
答案 0 :(得分:1)
您的网络中需要激活功能才能实现非线性。激活函数是神经网络适合非线性函数的方式。默认情况下,Tflearn使用线性激活,您可以将其更改为“sigmoid”,并查看结果是否有所改善。