Tensorflow DNNClassifier返回错误预测

2024-04-25 10:12:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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

值和类别示例:

^{pr2}$

我是tensorflow的新手,所以我试着让它变得不那么复杂,欢迎任何帮助。在

编辑
我的实际训练数据是this.

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

编辑2

现在我使用五层[n,2n,4n,8n,16n]的组合,其中n=Classes and steps=20000,这减少了损失并提高了准确度,但同样,它只适用于少数目标(大约10个),预测错误的量更大。在


Tags: the数据sample编辑newinittftensorflow
2条回答

毕竟我对代码做了一些修改,但是没有任何进展,所以我改变了DNN分类器的参数,并增加了我的语料库的大小,这样就可以了。在

最后,这是我的参数约:
-步数=25000+
-层=[n/2,n,n*2,n*4,n*8]
*n=数字等级
-语料库大小=30000个样本
-数量等级=40

所以这样做损失等于0.0945。。。准确度=0.896…,不知道做这些改变是否能帮助别人,但对我来说确实如此。在

估计量学习负责创建会话和图形。它通过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

相关问题 更多 >