在Tensorflow中嵌入特征向量

时间:2017-09-06 05:12:01

标签: tensorflow deep-learning

在文本处理中,embedding显示(如果我理解正确)数据库单词为向量(在降维后)。 现在,我想知道,有没有这样的方法通过CNN显示提取的功能?

例如:考虑我们有CNN,火车和测试集。我们想用火车组训练CNN,同时在张量板的嵌入部分通过CNN看到提取的特征(来自密集层)相应的类标签。

这项工作的目的是查看每批中输入数据的特征,并了解它们的相近或远近。最后,在训练模型中,我们可以找出分类器的准确性(如softmax等)。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我已经获得了Tensorflow文档的帮助。

有关如何运行TensorBoard并确保记录所有必要信息的深入信息,请参阅TensorBoard: Visualizing Learning.

要想象您的嵌入,您需要做三件事:

1)设置一个包含嵌入的2D张量。

embedding_var = tf.get_variable(....)

2)定期将模型变量保存在LOG_DIR的检查点中。

saver = tf.train.Saver()
saver.save(session, os.path.join(LOG_DIR, "model.ckpt"), step)

3)(可选)将元数据与嵌入相关联。

如果您有与嵌入相关联的任何元数据(标签,图像),您可以通过直接在LOG_DIR中存储projector_config.pbtxt或使用我们的python API来告诉TensorBoard。

例如,以下projector_config.ptxt将word_embedding张量与存储在$ LOG_DIR / metadata.tsv中的元数据相关联:

embeddings {
  tensor_name: 'word_embedding'
  metadata_path: '$LOG_DIR/metadata.tsv'
}

可以使用以下代码段以编程方式生成相同的配置:

from tensorflow.contrib.tensorboard.plugins import projector

# Create randomly initialized embedding weights which will be trained.
vocabulary_size = 10000
embedding_size = 200
embedding_var = tf.get_variable('word_embedding', [vocabulary_size, 
embedding_size])

# Format: tensorflow/tensorboard/plugins/projector/projector_config.proto
config = projector.ProjectorConfig()

# You can add multiple embeddings. Here we add only one.
embedding = config.embeddings.add()
embedding.tensor_name = embedding_var.name
# Link this tensor to its metadata file (e.g. labels).
embedding.metadata_path = os.path.join(LOG_DIR, 'metadata.tsv')

#Use the same LOG_DIR where you stored your checkpoint.
summary_writer = tf.summary.FileWriter(LOG_DIR)

# The next line writes a projector_config.pbtxt in the LOG_DIR. TensorBoard will
# read this file during startup.
projector.visualize_embeddings(summary_writer, config)