Tensorflow错误连接字符和单词嵌入



我想将字符嵌入(使用CNN生成(与单词嵌入(使用Glove向量(连接起来但是由于字符嵌入的形状与单词嵌入的形状不同,因此得到错误。

如何修复错误或连接这些错误?

self.character_embedding_weights = tf.get_variable(
"character_embedding_weights",
shape=[dataset.alphabet_size, parameters['character_embedding_dimension']],
initializer=initializer)
embedded_characters = tf.nn.embedding_lookup(self.character_embedding_weights,
self.input_token_character_indices, name='embedded_characters')
if self.verbose:
print("embedded_characters: {0}".format(embedded_characters))
utils_tf.variable_summaries(self.character_embedding_weights)
s = tf.shape(embedded_characters)
char_embeddings = tf.reshape(embedded_characters, shape=[-1,25,20])
# Conv #1
conv1 = tf.layers.conv1d(
inputs=char_embeddings,
filters=30,
kernel_size=3,
padding="valid",
activation=tf.nn.relu)
# Conv #2
conv2 = tf.layers.conv1d(
inputs=conv1,
filters=30,
kernel_size=3,
padding="valid",
activation=tf.nn.relu)
pool2 = tf.layers.max_pooling1d(inputs=conv2, pool_size=2, strides=2)
# # Dense Layer
character_embed_output = tf.layers.dense(inputs=pool2, units=32, activation=tf.nn.relu)

在这里,我将连接令牌和字符嵌入。

with tf.variable_scope("concatenate_token_and_character_vectors"):
if self.verbose: 
print('embedded_tokens: {0}'.format(embedded_tokens))
token_lstm_input = tf.concat([character_embed_output, embedded_tokens], 
axis=1, name='token_lstm_input')

获取此错误

ValueError: Shape must be rank 3 but is rank 2 for'concatenate_token_and_character_vectors/token_lstm_input' (op: 'ConcatV2') with input shapes:[?,10,32], [?,100], [].**

我正在处理这个回购https://github.com/Franck-Dernoncourt/NeuroNER它使用LSTM进行字符级嵌入,我想使用CNN。

链接,它使用LSTM进行字符级嵌入,我有我的代码使用CNN,如上所述。

如果需要任何其他信息或代码,请进行注释

最后,我解决了这个问题,但将字符嵌入扁平化,就可以很容易地将其与Word嵌入连接起来。通过添加这一行,它起了作用。

character_embed_output = tf.layers.Flatten()(character_embed_output)

最新更新