原文链接: tensorboard 可视化 projector
上一篇: TensorFlow 函数详解 一
下一篇: pycocotools 安装
好麻烦的东西。。。。。。。。
https://www.tensorflow.org/guide/embedding
不错的博客
https://blog.csdn.net/aliceyangxi1987/article/details/71079387
如果遇到一个报错,找不到cupti64_90.dll
将C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\extras\CUPTI\libx64下的dll改个名字放到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\bin中
主要步骤如下,包括生成tsv文件,精灵图文件的创建
tsv文件每行的数字代表一个分类的label
精灵图必须是正方形的。。。。不够的可以补全否则会有问题,多的也没事,也可以只写在一排,但是数目多的话会占内存。。。可以使用不同的背景,但是白色背景在使用labell区分时比较好辨认一点
黑色背景以label区分时,只会讲文字改变颜色,没有白色背景明显
在这段代码中没有没有生成图片
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
from tensorflow.contrib.tensorboard.plugins import projector
show_num = 6
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
show_images = mnist.train.images[:show_num]
show_labels = mnist.train.labels[:show_num]
embedding = tf.Variable(tf.stack(show_images), trainable=False, name='embedding')
save_dir = "./log/"
sess = tf.Session()
metadata_path = 'metadata.tsv'
with open(save_dir + metadata_path, 'w') as f:
labels = sess.run(tf.argmax(show_labels, 1))
for i in labels:
f.write(str(i) + '\n')
image_path = 'mnist_sprite.png'
projector_writer = tf.summary.FileWriter(save_dir, sess.graph)
saver = tf.train.Saver()
config = projector.ProjectorConfig()
embed = config.embeddings.add()
embed.tensor_name = embedding.name
embed.metadata_path = metadata_path
embed.sprite.image_path = image_path
embed.sprite.single_image_dim.extend([28, 28])
projector.visualize_embeddings(projector_writer, config)
sess.run(tf.global_variables_initializer())
saver.save(sess, save_dir + 'model.ckpt')
projector_writer.close()
文件结果如下,注意配置文件的路径与,创建文件的路径是不一样的
配置文件中不需要再次加上log文件夹地址
为了方便可视化数据选取平方数比较好一点,这样比较好生成精灵图
白色背景精灵图的生成
from tensorflow.examples.tutorials.mnist import input_data
import cv2 as cv
import numpy as np
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
cnt = 10
imgs = mnist.train.images[:cnt]
labels = mnist.train.labels[:cnt]
print(imgs.shape)
print(np.max(imgs))
row = np.concatenate(list(
map(lambda item: 255 * (1 - item.reshape((28, 28, 1))), imgs)
), 1)
print(row.shape)
imgs = np.concatenate([row, 255 * np.ones(((cnt - 1) * 28, cnt * 28, 1))], 0)
print(imgs.shape)
cv.imwrite('mnist_sprite.png', imgs)
简单可视化,只分label,不显示图片,用label代替图片的显示
也要注意配置文件的路径,和在程序中写入的路径不一样的
import os
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
from tensorflow.contrib.tensorboard.plugins import projector
LOG_DIR = 'logs'
metadata = 'metadata.tsv'
mnist = input_data.read_data_sets('MNIST_data')
images = tf.Variable(mnist.test.images, name='images')
with open(os.path.join(LOG_DIR, metadata), 'w') as metadata_file:
for row in mnist.test.labels:
metadata_file.write('%d\n' % row)
with tf.Session() as sess:
saver = tf.train.Saver([images])
sess.run(images.initializer)
saver.save(sess, os.path.join(LOG_DIR, 'images.ckpt'))
config = projector.ProjectorConfig()
# One can add multiple embeddings.
embedding = config.embeddings.add()
embedding.tensor_name = images.name
# Link this tensor to its metadata file (e.g. labels).
embedding.metadata_path = metadata
# Saves a config file that TensorBoard will read during startup.
projector.visualize_embeddings(tf.summary.FileWriter(LOG_DIR), config)