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
作为输入。
我目前正在使用 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
作为输入。