from tensorflow.contrib.tensorboard.plugins import projector
import cv2
1.首先要定義embedding varibles,也就是你要可視化的數(shù)據(jù),以mnist為例,就是可視化test數(shù)據(jù)集中前2500個數(shù)據(jù)(必要):
show_num=2500
embedding_var = tf.Variable(tf.stack(mnist.test.images[:show_num]), trainable=False, name='embedding_var')
2.然后創(chuàng)建label文件,可以是csv,也可以是tsv文件,下面是我寫的一個函數(shù),same_file是創(chuàng)建文件的位置,labels就是你需要可視化數(shù)據(jù)集中的labels(可選):
def create_metadata_file(same_file, labels):
with open(file, 'w')as f:
f.write('Index' +'\t' +'Label' +'\n')
for i in range(show_num):
f.write(str(i) +'\t' +str(labels[i]) +'\n')
print('labels.tsv文件創(chuàng)建完成!')
3.也可以創(chuàng)建sprite.image_data數(shù)據(jù),下面是函數(shù),創(chuàng)建出來的圖片如sprite_image.jpg所示(可選):
def create_sprite_data(same_file, images, show_num, single_image_shape=(28,28)):
n_plots =int(np.ceil(np.sqrt(show_num)))
sprite_image = np.zeros([n_plots*single_image_shape[0], n_plots*single_image_shape[1]])
num =0
flag =0
for i in range(n_plots):
y1 = i*single_image_shape[1]
y2 = y1 + single_image_shape[1]
for j in range(n_plots):
x1 = j*single_image_shape[0]
x2 = x1 + single_image_shape[0]
sprite_image[x1:x2, y1:y2] = 1 - images[num].reshape(single_image_shape)
num +=1
if num > images.shape[0]:
flag =1
break
if flag:
break
cv2.imwrite(file, sprite_image*255)
print('sprite_image創(chuàng)建完成!')

sprite_image.jpg
4.建立config(必要):
#下面基本是projector的固定操作
config= projector.ProjectorConfig()
embedding =config.embeddings.add()
#將需要可視化的變量與embedding綁定
embedding.tensor_name = embedding_var.name
#指定embedding每個點對應(yīng)的標簽信息
#這個是可選的,沒有指定就沒有標簽信息(所以還是有必要添加的,否則最后可視化的結(jié)果只有一種顏色)
embedding.metadata_path = meta_file
#指定embedding每個點對應(yīng)的圖像
#這個文件也是可選的,沒有指定就顯示一個圓點
embedding.sprite.image_path = sprite_file
#指定sprite圖中單張圖片的大小,下面是mnist中的圖片大小
embedding.sprite.single_image_dim.extend([28,28])
projector.visualize_embeddings(tf.summary.FileWriter(same_file), config)
6.創(chuàng)建saver(必要):
saver= tf.train.Saver(tf.global_variables())
saver.save(sess, same_file)
注:上面的路徑最好放在同一文件夾下,否則可能出現(xiàn)projector可視化圖中不能顯示labels的情況。上面標了(必要)的步驟都是使用該API必須的操作,只需要記住就好了。
最后的結(jié)果可以在tensorboard下面的projector中看到。(因為我主要為了顯示最后的可視化結(jié)果,沒有將模型訓(xùn)練的很好,所以看起來這些個點聚類的并不是那么好?。?/p>

image.png