2016-08-02 13 views
1

私は公式サイトtf.contrib.learn Quickstartの例のようにtensorflowを使って文章分類器を作ろうとしますが、私自身のデータを使ってまずすべてのデータ(長さの異なる文字列)を辞書を使用し、各文を整数の配列に変換します。Tensorflow DNNClassifierは間違った予測を返す

トレーニング用の各レコードには、独自のラベルが割り当てられています。

予測は正確ではなく、一部のみであるが、入力がトレーニングベースのレコードと同じであっても、結果が間違っているという問題があります。
私のコードは次のようになります。

def launchModelData(values, labels, sample, actionClasses): 

    #Tensor for trainig data 
    v = tf.Variable(values) 
    l = tf.Variable(labels) 

    #Data Sample 
    s = tf.Variable(sample) 

    # Build 3 layer DNN with 10, 20, 10 units respectively. 
    classifier = tf.contrib.learn.DNNClassifier(hidden_units=[10, 20, 10], n_classes=actionClasses) 

    # Add an op to initialize the variables. 
    init_op = tf.initialize_all_variables() 

    # Later, when launching the model 
    with tf.Session() as sess: 
     # Run the init operation. 
     sess.run(init_op) 

     # Fit model. 
     classifier.fit(x=v.eval(), y=l.eval(), steps=200) 

     # Classify one new sample. 
     new_sample = np.array(s.eval(), dtype=int) 
     y = classifier.predict(new_sample) 
     print ('Predictions: {}'.format(str(y))) 

    return y 

値とクラスのaxample:

[0 1] 0 
[0 2] 0 
[0 4] 0 
[7 8] 1 
[7 9] 1 
[ 7 13] 1 
[14 15] 2 
[14 16] 2 
[14 18] 2 
[20 21] 3 
[26 27] 5 
[29 27] 5 
[31 32] 5 
... 

私はtensorflowする新たなんだので、私は任意のヘルプは大歓迎だろう、可能なことはあまり複雑にしてみてください。

EDIT
私の実際のトレーニングデータは、私は、私は大きなコーパスを必要とするので、多分、私は罰金試してみて、新しい編集で私の出力が表示されますし、8クラスと予測して、それを試してみてくださいthis.

です。

EDIT2

今は5層[N、2N、4N、8N、16N]ここで、n =クラスおよびステップ= 20000の組成​​物を使用し、これは損失を低減し、本当によく精度を高めるが、再び、それはちょうどいくつかのターゲット(10 aprox)を使ってより大きな量の予測が間違ったものになります。

+0

まず、ニューラルネットワークは、トレーニングデータのスナップショットを保存しません。したがって、訓練されたネットワークが訓練データの正しいラベルを出力することを期待するべきではありません。このような問題は、通常、トレーニングデータが不十分なために発生します。より大きなトレーニングセットを試しましたか?さらなる助けが必要な場合は、トレーニングセットへのリンクを共有してください。 –

+0

[data](https://drive.google.com/open?id=0B3uEZ76zDg_wNXJnT3g5c0lWWjQ)これは私のデータですが、この場合はもっと必要と思われますか?私は60サンプル(値)と8クラス(ターゲット)のような小さなセットで同じコードを試してみてください。予測が良いので、もっとクラス(ターゲット)があるときはもっとデータが必要だと思っていました。助けてくれてありがとう! –

+0

入力はわずか2単語ですか? – Aaron

答えて

0

を。終わり

これはおよそ10mlの液体フッ化水素を圧入私のパラメータであった:
-Steps = 25000+
-Layers = [N/2、N、N * 2、N * 4、N * 8]
* N =数クラス
-Corpusサイズ= 30000のサンプル
-Numberクラス= 40

ので損失は0.0945に等しい取得これをやって...と精度= 0.896が...、この変更を行うことは誰かを助けることができれば知らないけどそれは私のためになります。

0

セッションとグラフの作成を担当するtf.learnの見積もり。 input_fnで入力テンソルを取得します。すべての適合/評価/予測により、新しいセッションとグラフが作成されます。コードは次のようになります。

私はコード内のいくつかの変更をしたが、全く進展がなかったので、私はDNN分類子のパラメータを変更すると、私のコーパスのサイズを大きくし、それが動作するすべての後
# Build 3 layer DNN with 10, 20, 10 units respectively. 
my_feature = tf.contrib.layers.real_valued_column('my_feature') 
classifier = tf.contrib.learn.DNNClassifier(feature_columns=[my_feature], hidden_units=[10, 20, 10], n_classes=actionClasses) 

def _my_train_data(): 
    return {'my_feature': tf.constant(values), tf.constant(labels) 

classifier.fit(input_fn=_my_train_data, steps=200) 

# Classify one new sample. 
def _my_predict_data(): 
    return {'my_feature': tf.Constant(s) 
y = classifier.predict(input_fn=_my_predict_data) 
print ('Predictions: {}'.format(str(y))) 

return y 
+0

hmm私はあなたのコードのいくつかを使用しようとするが、次の行は私にエラーを与えるので、 'return {'my_feature':tf.constant(values)、tf.constant(labels)}' 'classifier.fit(input_fn = _my_train_data、steps = 200)'に を解凍するには1つ以上の値が必要です。ところで助けてくれてありがとう。 –

+0

'return {'my_feature':tf.constant(values)}、tf.constant(labels)'に変更しますが、次の行は私にエラーを与えます: 'テンソルを250要素で形作ることができません[125,1 ] '。 –

関連する問題