word2vec的成本函数

时间:2016-07-20 10:28:20

标签: python tensorflow word2vec

我目前正通过word2vec对pretrain进行文本分类。但在喂养Convolution neural network之前,我必须编写成本函数。

这是我的代码:

W = tf.Variable(tf.constant(0.0, shape=[vocabulary_size, embedding_size]),
            trainable=False, name="W")

embedding_placeholder = tf.placeholder(tf.float32, [vocabulary_size, embedding_size])
embedding_init = W.assign(embedding_placeholder)

sess = tf.Session()

sess.run(embedding_init, feed_dict={embedding_placeholder: final_embeddings})

embedded_chars = tf.nn.embedding_lookup(W, data)
embedded_chars_expanded = tf.expand_dims(embedded_chars, -1)

word2vec的代码是word2vec_basic.py

当我输入凸函数时:

filter_shape = [filter_size, embedding_size, 1, num_filters]
W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W")
b = tf.Variable(tf.constant(0.1, shape=[num_filters]), name="b")
conv = tf.nn.conv2d(
        embedding_init,
        W,
        strides=[1, 1, 1, 1],
        padding="VALID",
        name="conv")

它给了我一个跟随错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-29-9c12d490e7ab> in <module>()
     11             strides=[1, 1, 1, 1],
     12             padding="VALID",
---> 13             name="conv")
ValueError: Shape (50000, 128) must have rank 4

我怀疑这是我的张量大小是错的,但我不确定我是否正确。

1 个答案:

答案 0 :(得分:1)

你得到的错误是因为tf.nn.conv2d的输入向量需要一个形状的张量:

[batch, in_height, in_width, in_channels]

你在这里的形状是(50000,128)。您可能希望使用embedded_chars_expanded作为输入。