我做了一个非常简单的xor
预测DNN。它如下。为什么在不更改代码时,tesorflow会改变预测?
p = tf.contrib.layers.sparse_column_with_keys(column_name="p", keys=["0","1"])
q = tf.contrib.layers.sparse_column_with_keys(column_name="q", keys=["0","1"])
p_emb = tf.contrib.layers.embedding_column(sparse_id_column=p, dimension=1)
q_emb = tf.contrib.layers.embedding_column(sparse_id_column=q, dimension=1)
input_fn = tf.contrib.learn.io.numpy_input_fn({
"p": np.array(["0","0","1","1"]),
"q": np.array(["0","1","0","1"])},
np.array([0,1,1,0]),
batch_size=4,
num_epochs=1000)
estimator = tf.contrib.learn.DNNClassifier(
feature_columns=[p_emb, q_emb],
hidden_units=[3],
optimizer=tf.train.GradientDescentOptimizer(
learning_rate=0.05
))
estimator.fit(input_fn=input_fn, steps=5000)
print(list(estimator.predict({
"p": np.array(["0","0","1","1"]),
"q": np.array(["0","1","0","1"])})))
有时(多条均线)它正确地预测[0,1,1,0]
但有时它预测非常错误的。
这可能是因为它首先做出的选择,它使得权重进入一个不正确的训练方向,但我怎么能几乎可以肯定(95%以上)预测值将是正确的吗?
adagrad呢? – Garmekain
因此,当你知道答案足够好时,解决方案可能是在某个点输出权重? – Garmekain
你也会遇到与adagram和其他优化器类似的问题。你可以在这里阅读关于不同优化器的行为http://sebastianruder.com/optimizing-gradient-descent/ –