Tensorflow DNNClassifier返回错误预测

时间:2016-08-02 15:53:43

标签: python machine-learning nlp tensorflow deep-learning

我尝试使用tensorflow创建一个句子分类器,如官方网站tf.contrib.learn Quickstart的示例,但是使用我自己的数据,首先我通过使用将所有数据(不同长度的字符串)转换为ID字典,所以转换整数数组中的每个句子。

每个培训记录都有自己的分配标签。

问题是预测不准确,只有一些,但其他人即使输入等于训练基数的记录,结果也是错误的。 我的代码看起来像这样:

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

值和类例:

[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  
... 

我是张力流的新手,所以我尽量让它变得不那么复杂,欢迎任何帮助。

修改
我的实际培训数据是this.

我尝试了8个班级并且预测很好,所以也许我需要一个更大的语料库,我会尝试在新的编辑中显示我的输出。

EDIT2

现在我使用五层[n,2n,4n,8n,16n]的组合,其中n = Classes和步数= 20000,这减少了损失并且确实提高了准确性但是再次它只适用于一些目标(10 aprox)预测错误的数量更大。

1 个答案:

答案 0 :(得分: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