word2vec 的成本函数

Cost function for word2vec

我目前正在使用 word2vec 的预训练进行文本分类。但是在喂 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

我怀疑是我的张量大小不对,但我不确定我是否设置正确。

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

[batch, in_height, in_width, in_channels]

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