代码之家  ›  专栏  ›  技术社区  ›  I. A Ziang Yan

用Tensorflow可视化多重嵌入

  •  0
  • I. A Ziang Yan  · 技术社区  · 7 年前

    我想基于多个张量变量可视化我的数据,即基于不同的嵌入变量。换句话说,我需要做的是:

    我需要将100维向量(图像特征/嵌入)存储到5个不同的变量中。然后我需要基于5个不同的变量可视化我的数据。也就是说,我需要基于前20个特征可视化我的数据,然后基于后20个特征等等。。。

    https://www.tensorflow.org/get_started/embedding_viz ,他们说我们可以添加多个嵌入。这就是我要找的。

    如何在tensorflow中执行此操作?

    2 回复  |  直到 7 年前
        1
  •  0
  •   I. A Ziang Yan    7 年前

    所以它不起作用的原因是因为我试图将100维嵌入分解成100个不同的变量。但这并不奏效。所以当我将嵌入划分为5个不同的部分,也就是说,将它们划分为5个不同的变量时,它就成功了。以下是我的代码:

    import numpy as np
    import tensorflow as tf
    from tensorflow.contrib.tensorboard.plugins import projector
    
    LOG_DIR = \
        'C:/Users/user/PycharmProjects/VariationalAutoEncoder/' \
        'Tensorflow-DeconvNet-Segmentation/Embeddings/features_images.ckpt'
    
    feature_vectors = np.loadtxt('features.txt')
    feature_vectors = feature_vectors[:5329]
    
    print("feature_vectors_shape:",feature_vectors.shape)
    
    sub_features = []
    for i in range(20):
        features = tf.Variable(feature_vectors[:, 5 * i: 5 * (i + 1)], name=('features' + str(i)))
        sub_features.append(features)
    
    with tf.Session() as sess:
    
        saver = tf.train.Saver()
        sess.run(tf.global_variables_initializer())
        saver.save(sess, LOG_DIR)
    
        config = projector.ProjectorConfig()
        for i in range(20):
            embedding = config.embeddings.add()
            embedding.tensor_name = sub_features[i].name
    
            embedding.sprite.image_path = \
                'C:/Users/user/PycharmProjects/VariationalAutoEncoder/Tensorflow-DeconvNet-Segmentation/master.jpg'
            embedding.sprite.single_image_dim.extend([112, 112])
    
        # Saves a config file that TensorBoard will read during startup.
        projector.visualize_embeddings(tf.summary.FileWriter(LOG_DIR), config)
    
        2
  •  0
  •   Daniel Vela    2 年前

    下面是一个应该运行的示例,显示了两种不同的嵌入。请注意,您需要转到“投影仪”选项卡。有时它不会自动打开。

    log_dir='./logs'
    embeddings=np.random.randint(1,100,(400,6))
    labels=[1,2,3,4]*100
    
    
    with open(f'{log_dir}/metadata.tsv', "w") as file: 
        for label in labels:
            file.write(f'{label}\n')
    
    with open(f'{log_dir}/metadata2.tsv', "w") as file: 
        for label in labels:
            file.write(f'{label}\n')
    
    
    
    
    os.makedirs(log_dir,exist_ok=True)
    
    
    embeddings1=tf.Variable(embeddings,name='var1')
    embeddings2=tf.Variable(embeddings,name='var2')
    
    checkpoint=tf.train.Checkpoint(var1=embeddings1,var2=embeddings2)
    checkpoint.save(log_dir+'/var.ckpt')
    
    
    
    
    config=projector.ProjectorConfig()
    emb1=config.embeddings.add()
    emb1.tensor_name='var1'+'/.ATTRIBUTES/VARIABLE_VALUE'
    emb1.metadata_path='metadata.tsv'
    
    emb2=config.embeddings.add()
    emb2.tensor_name='var2'+'/.ATTRIBUTES/VARIABLE_VALUE'
    emb2.metadata_path='metadata2.tsv'
    
    projector.visualize_embeddings(log_dir, config)
    
    %load_ext tensorboard
    %tensorboard --logdir ./logs/