2016-08-02 65 views
1

我嘗試使用tensorflow在官方網站tf.contrib.learn Quickstart的例子,但用自己的數據做一個句子分類,首先我我的所有數據(這是不同長度的字符串)轉換爲IDS通過字典的使用等等,用整數數組來轉換每個句子。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所以我儘量讓它不太複雜的可能,任何幫助將受到歡迎。

編輯
我的實際訓練數據this.

我嘗試用8類和預測是很好,所以也許我需要一個更大的文集,我會盡量表現出我的輸出在一個新的編輯。

EDIT2

現在我用五層[N,2N,4N,8N,16N],其中n =類和步驟= 20000的組合物,這降低了損耗和提高精度確實很好,但再次它只是與一些目標(10 aprox)與更大的數額預測變得錯誤的工作。

+0

首先,神經網絡_DO not_存儲訓練數據的快照。所以你不應該指望訓練有素的網絡甚至會輸出正確的訓練數據標籤。這些問題通常是由於培訓數據不足造成的。你有沒有嘗試使用更大的訓練集?如果您需要進一步幫助,請與您的訓練集共享一個鏈接。 –

+0

[數據](https://drive.google.com/open?id=0B3uEZ76zDg_wNXJnT3g5c0lWWjQ)這是我的數據,你覺得我需要更多的這種情況?我嘗試使用相同的代碼,例如60個樣本(值)和8個類別(目標)。預測是好的,所以我在想,也許我需要更多的數據時,有更多的類(目標)。謝謝您的幫助! –

+0

輸入只是兩個字? – Aaron

回答

0

畢竟我做的代碼中的一些變化,但沒有任何進展可言,所以我改變了DNN分類的參數,並增加我的陰莖的大小和它的工作原理。

在結束,這是我的參數aprox的:
-Steps = 25000+
-layers = [N/2,N,N * 2,N * 4,N * 8]
* =數班
-Corpus大小= 30000個樣品
-Number類= 40

所以這樣的損失變得等於0.0945 ...和準確度= 0.896 ...,不知道如果這樣的變化可能幫助別人,但它爲我做。

0

估計在負責創建會話和圖形tf.learn。它通過input_fn獲得輸入張量。每個適合/評估/預測將創建一個新的會話和圖表。代碼應類似於以下內容:

# 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

嗯我不明白在所有行'返回{'my_feature':tf.constant(值),tf.constant(標籤)}'因爲我嘗試使用你的一些代碼,但下一行給我一個錯誤:需要超過1個值才能在'classifier.fit(input_fn = _my_train_data,steps = 200)'中解壓 '。順便謝謝你的幫助。 –

+0

我把它改成'return {'my_feature':tf.constant(values)},tf.constant(labels)',但下一行給了我一個錯誤:'不能用250個元素重塑一個張量來形成[125,1 ]'。 –