Tensorflow 错误连接 Char 和 Word 嵌入
Tensorflow Error Concatenating Char and Word embedding
我想将 Char Embeddings(使用 CNN 生成)与我的 Word Embedding(使用 Glove 向量)连接起来
但是由于 Char Embeddings 的形状与 Word Embeddings 不同而出现错误。
如何修复错误或连接这些错误?
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], [].**
我正在使用这个 repo https://github.com/Franck-Dernoncourt/NeuroNER 它使用 LSTM 进行字符级嵌入,我想为此使用 CNN。
Link 使用 LSTM 进行字符级嵌入,我的代码使用 CNN,如上所述。
如果需要任何其他信息或代码,请发表评论。
最后,我解决了问题,但将 char 嵌入展平,然后它可以很容易地与 Word 嵌入连接。
通过添加这一行,它起作用了。
character_embed_output = tf.layers.Flatten()(character_embed_output)
我想将 Char Embeddings(使用 CNN 生成)与我的 Word Embedding(使用 Glove 向量)连接起来 但是由于 Char Embeddings 的形状与 Word Embeddings 不同而出现错误。
如何修复错误或连接这些错误?
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], [].**
我正在使用这个 repo https://github.com/Franck-Dernoncourt/NeuroNER 它使用 LSTM 进行字符级嵌入,我想为此使用 CNN。
Link 使用 LSTM 进行字符级嵌入,我的代码使用 CNN,如上所述。
如果需要任何其他信息或代码,请发表评论。
最后,我解决了问题,但将 char 嵌入展平,然后它可以很容易地与 Word 嵌入连接。 通过添加这一行,它起作用了。
character_embed_output = tf.layers.Flatten()(character_embed_output)