Встраиваемый проектор TensorFlow для визуализации изображений скрытого пространства не работает? - PullRequest
1 голос
/ 28 февраля 2020

Может кто-нибудь помочь мне с тем, почему не работает встраиваемый проектор Tensorflow? Я тренирую автоэнкодер и сейчас пытаюсь визуализировать скрытое пространство. Я следовал этому очень полезному учебнику: https://github.com/anujshah1003/Tensorboard-own-image-data-image-features-embedding-visualization

Я перепроверил свою работу и не могу найти никаких ошибок. Проектор запускается и останавливается на этом экране, как показано на прилагаемом изображении. Он просто говорит, что точки и размеры загружаются, но в действительности точки не загружаются. Изображение, которое я использую, и код, который я имею, ниже. Любые указатели очень ценятся. Большое спасибо! Я использую Tensorflow 1.9.0 с Keras 2.1.6 и Python 2.7. Я использовал Tensorboard 1.9.0, но был понижен до 1.5.1, хотя он ничего не делал.

image_list = load_crops(num_positive,num_negative,h5_file,only_positives)
LOG_DIR = os.getcwd() + '/embedding-logs'


#now get the feature vectors by creating the encoder and running images through
embedding = encoder.predict(image_list)
features = tf.Variable(embedding, name='features')


#obtain the labels and name them
n_classes = 2
num_of_samples = embedding.shape[0]
num_of_samples_each_class = num_of_samples/n_classes

y = np.ones((num_of_samples,), dtype = 'int64')
y[:num_of_samples_each_class] = 0 
y[num_of_samples_each_class:num_of_samples_each_class*2] = 1  
names = ['CD3+','FOXP3+']

#generate metadata file that says which features belong to which label
#metadata allows to assign labels to each point in embedded space.  label will be the name and the number we assign
metadata_file = open(os.path.join(LOG_DIR, 'metadata_2_classes.tsv'), 'a+')
metadata_file.write('Class\tName\n')

k=num_of_samples_each_class 
j=0
for i in range(num_of_samples):
    c = names[y[i]]
    if i%k==0:
        j=j+1
    metadata_file.write('{}\t{}\n'.format(j,c))
metadata_file.close()


#we have to generate sprite image if we want to see the images in the visualization
sprite = images_to_sprite(image_list)
cv2.imwrite(os.path.join(LOG_DIR, 'sprite_2_classes.png'), sprite)

#run session
with tf.Session() as sess:
    img_data = image_list

    saver = tf.train.Saver([features])
    sess.run(features.initializer)
    saver.save(sess, os.path.join(LOG_DIR, 'images_2_classes.ckpt'))

    config = projector.ProjectorConfig()
    embedding = config.embeddings.add()
    embedding.tensor_name = features.name
    # Link this tensor to its metadata file (e.g. labels).
    embedding.metadata_path = os.path.join(LOG_DIR, 'metadata_2_classes.tsv')
    # Comment out if you don't want sprites
    embedding.sprite.image_path = os.path.join(LOG_DIR, 'sprite_2_classes.png')
    embedding.sprite.single_image_dim.extend([img_data.shape[1], img_data.shape[1]])
    # Saves a config file that TensorBoard will read during startup.
    projector.visualize_embeddings(tf.summary.FileWriter(LOG_DIR), config)

Что появляется на Tensorboard

1 Ответ

0 голосов
/ 03 марта 2020

Я понял это. Вы должны применить np.squeeze на выходе кодера. Выход кодера заключается в том, что встраиваемый проектор должен быть массивом точек). Он не может построить с этим дополнительным, поэтому, когда он удален, он работает.

...