我正在尝试使用TensorBoard 嵌入可视化器来表示我刚刚生成的一组 7307 个动词嵌入,但是当我选择启用 3d 标签模式时,绘制的点会消失。
这是我的代码:
def plot(tsne_matrix, labels_path):
PATH = os.getcwd()
LOG_DIR = PATH
metadata = os.path.join(LOG_DIR, labels_path)
# Setup a 2D tensor that holds the embeddings
words = tf.Variable(tsne_matrix, name = "words")
with tf.Session() as session:
# Periodically save the model variables in a checkpoint in LOG_DIR.
saver = tf.train.Saver([words])
session.run(words.initializer)
saver.save(session, os.path.join(LOG_DIR, "model.ckpt"))
config = projector.ProjectorConfig()
embedding = config.embeddings.add()
embedding.tensor_name = words.name
embedding.metadata_path = metadata
summary_writer = tf.summary.FileWriter(LOG_DIR)
projector.visualize_embeddings(summary_writer, config)
我要使用的元数据仅包含嵌入的名称(在我的例子中是动词)。它们与其他列表一起存储在字典中的列表中,因此我使用此函数将它们加载到 tsv 文件(所需格式):
# Extract list of labels:
def labels2tsv(name, path):
output = json2dict("output_parsed.json")
if name == 'verbs':
labels_list = list(output["verbs"].keys())
elif name == 'objects':
labels_list = list(output["objects"].keys())
with open(path, 'w') as f:
wr = csv.writer(f, delimiter='\t')
wr.writerow(str(labels_list))
然后我执行的代码是:
# obtain labels
labels2tsv('verbs', 'verbs_metadata.tsv')
labels2tsv('objects', 'objects_metadata.tsv')
# plotting
tsne_verbs = np.load('verbs_tsne.npy')
plot(tsne_verbs, "verbs_metadata.tsv")
最后,我通过命令访问 TensorBoard tensorboard --logdir=LOG_DIR
。
生成的projector_config.pbtxt
文件(也在 中LOG_DIR
)具有以下内容:
embeddings {
tensor_name: "Variable:0"
metadata_path: "verbs_metadata.tsv"
}
我猜这些点消失了,因为我没有进行正确的元数据关联,但我看不到错误。它也会在 Chrome 和 Firefox 上崩溃。