【发布时间】:2016-08-02 15:53:42
【问题描述】:
我尝试像官方网站tf.contrib.learn Quickstart 的示例一样使用tensorflow 制作句子分类器,但使用我自己的数据,首先我通过使用字典将我所有的数据(它们是不同长度的字符串)转换为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
...
我是 tensorflow 的新手,所以我尽量降低它的复杂性,欢迎任何帮助。
编辑
我的实际训练数据是this.
我尝试了 8 个类并且预测很好,所以也许我需要一个更大的语料库,我会尝试在新的编辑中显示我的输出。
EDIT2
现在我使用五层 [n,2n,4n,8n,16n] 的组合,其中 n = 类和步骤 = 20000,这可以很好地减少损失并提高准确度,但它再次只适用于几个目标(大约 10 个)预测错误的数量越大。
【问题讨论】:
-
首先,神经网络不存储训练数据的快照。所以你不应该期望经过训练的网络甚至会为训练数据输出正确的标签。这些问题通常是由于训练数据不足而出现的。您是否尝试过使用更大的训练集?如果您需要进一步的帮助,请分享您的训练集的链接。
-
data 这是我的数据,你认为我需要更多数据吗?我使用较小的集合尝试相同的代码,例如 60 个样本(值)和 8 个类(目标)。而且预测很好,所以我在想,当有更多的类(目标)时,我可能需要更多的数据。感谢您的帮助!
-
输入只有两个字?
-
在这种情况下是的,我改变了将句子与其他相同长度的句子进行比较的过程,所以在这个例子中我减少了,现在我可以用相同大小的数组训练模型。跨度>
标签: python machine-learning nlp tensorflow deep-learning