2017-06-06 46 views
0

我是新来的机器学习和Tensorflow,并希望做一个简单的二维分类与数据,不能线性分离。张量流的非线性分类

Current Result 在左侧,您可以看到模型的训练数据。 右侧显示训练模型预测的内容。

截至目前,我过度配合我的模型,所以每一个可能的输入都被输入到模型中。 我的预期结果将是非常高的准确性,因为模型已经“知道”每个答案。 不幸的是,我所使用的深度神经网络只能通过线性分频器进行分离,这不符合我的数据。

这是我训练我的型号:

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

试试增加n_epoch? – frankyjuang

+0

增加n_epoch并不会改变精度,大约是50%。像硬币翻转会。 – RincewindWizzard

+0

不确定这是否是一个特定的模型选择,您不希望在您的初始三个线性图层之后出现非线性,或者默认情况下tf-learn放置(我对tf-learn知之甚少),但应具有非线性帮帮我。 – Akash

回答

1

您需要网络中的非线性激活功能。激活函数是神经网络拟合非线性函数的方式。 Tflearn默认使用线性激活,您可以将其更改为“sigmoid”并查看结果是否改善。