Tensorflow的tf.contrib.layers.embed_sequence和tf.nn.embedding_lookup之间的区别?

时间:2018-11-05 11:58:05

标签: python tensorflow deep-learning

我目前正在研究CNN,以使用嵌入层,2个CNN层以及最后一个softmax输出层将各个类[0-14]中的句子分类。我一直获得100%的训练准确度和90%的测试准确度,并且很确定我的网络出了点问题。因此,我对问题进行了故障排除,发现是导致问题的原因是嵌入层,即更改初始化方式导致了更准确的结果-约89%的培训准确度〜34-49%的测试准确度。这使我思考两种方法之间的差异,因为这两种方法都会产生[-1,MAX_DOCUMENT_LENGTH,EMBEDDING_SIZE,1]的输出张量。

以下演示了代码:

工作代码:

with tf.name_scope("embedding"):
        init_embeddings = tf.random_uniform([n_words, EMBEDDING_SIZE])
        embeddings = tf.get_variable("embeddings", initializer=init_embeddings)
        x_emb = tf.nn.embedding_lookup(embeddings, x)
        x_emb = tf.expand_dims(x_emb, -1)

无效的代码:

x_emb = tf.reshape(tf.contrib.layers.embed_sequence(
  x, vocab_size=n_words, embed_dim=EMBEDDING_SIZE), [-1, MAX_DOCUMENT_LENGTH, EMBEDDING_SIZE, 1])

0 个答案:

没有答案