张量流的非线性分类

时间:2017-06-06 13:44:54

标签: python machine-learning tensorflow tflearn

我是机器学习和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的例子,所以我并不完全明白每一行的作用。

1 个答案:

答案 0 :(得分:1)

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