我目前正通过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
我怀疑这是我的张量大小是错的,但我不确定我是否正确。
答案 0 :(得分:1)
你得到的错误是因为tf.nn.conv2d
的输入向量需要一个形状的张量:
[batch, in_height, in_width, in_channels]
你在这里的形状是(50000,128)。您可能希望使用embedded_chars_expanded
作为输入。