2017-06-06 15 views
0

機械学習とTensorflowには新しく、データで単純な2次元分類を行いたいが、それは線形に分離できない。テンソルによる非線形分類

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

これが特定のモデルの選択肢であるかどうかわからない場合は、最初の3つの線形レイヤーまたはtf-learnがデフォルトで置く(私はtf-learnについてはあまり知らない)が、非線形性を有する助けて。 – Akash

答えて

1

非直線性のためにネットワークでアクティベーション機能が必要です。活性化関数は、ニューラルネットワークが非線形関数にフィットする方法です。デフォルトではTflearnは線形起動を使用していますが、これを「Sigmoid」に変更して結果が改善するかどうかを確認できます。

関連する問題