tensorflow1.1/embedding可视化
2017-07-18 16:23
429 查看
环境:tensorflow1.1,python3,matplotlib2.02,tensorboard1.1
通常图像或音频系统处理的是由图片中所有单个原始像素点强度值或者音频中功率谱密度的强度值,把它们编码成丰富、高纬度的向量数据集。对于物体或语音识别这一类的任务,我们所需的全部信息已经都存储在原始数据中。然后,自然语言处理系统通常将词汇作为离散的单一符号,例如 “cat” 一词或可表示为 Id537 ,而 “dog” 一词或可表示为 Id143。这些符号编码毫无规律,无法提供不同词汇之间可能存在的关联信息。我们可以把学习向量映射到2维中以便我们观察,其中用到的技术可以参考 t-SNE 降纬技术。当我们用可视化的方式来观察这些向量,就可以很明显的获取单词之间语义信息的关系,这实际上是非常有用的。
本实验是人脸数据集中,图像经过embedding后在空间可视化
#codding:utf-8 from tensorflow.contrib.tensorboard.plugins import projector import matplotlib.pyplot as plt import tensorflow as tf import numpy as np import os import pickle #读取数据集 with open('facedataset.pickle','rb') as f: (train_data,train_labels),(test_data,test_labels) = pickle.load(f) #定义一个next_batch函数 def next_batch(a,batch_size): a = np.random.permutation(a) b = [] for i in range(batch_size): b.append(a[i]) return np.array(b) log_dir = 'facesample' name_to_visualise_variable = 'faceembedding' batch_size = 320 #os.path.join路径拼接 path_for_face_png = os.path.join(log_dir,'newface.png') path_for_face_data = os.path.join(log_dir,'newface.tsv') batch_xs = next_batch(train_data,batch_size) batch_ys = next_batch(train_labels,batch_size) #建立embedding embedding_var = tf.Variable(batch_xs,name = name_to_visualise_variable) summary_writer = tf.summary.FileWriter(log_dir) config = projector.ProjectorConfig() #加入embedding层 embedding = config.embeddings.add() embedding.tensor_name = embedding_var.name embedding.metadata_path = path_for_face_data embedding.sprite.image_path = path_for_face_png embedding.sprite.single_image_dim.extend([57,47]) #embedding可视化 projector.visualize_embeddings(summary_writer,config) sess = tf.InteractiveSession() sess.run(tf.global_variables_initializer()) saver = tf.train.Saver() saver.save(sess,os.path.join(log_dir,'model.ckpt'),1) #将图片拼成一张大图 def create_sprite_image(images): if isinstance(images, list): images = np.array(images) img_h = images.shape[1] img_w = images.shape[2] n_plots = int(np.ceil(np.sqrt(images.shape[0]))) spriteimage = np.ones((img_h * n_plots ,img_w * n_plots )) for i in range(n_plots): for j in range(n_plots): this_filter = i * n_plots + j if this_filter < images.shape[0]: this_img = images[this_filter] spriteimage[i * img_h:(i + 1) * img_h, j * img_w:(j + 1) * img_w] = this_img return spriteimage #将矩阵转为图片 def vector_to_matrix_face(face_digits): """Reshapes normal face digit (batch,28*28) to matrix (batch,28,28)""" return np.reshape(face_digits,(-1,57,47)) #将黑白转换 def invert_grayscale(face_digits): """ Makes black white, and white black """ return 1-face_digits to_visualise = batch_xs to_visualise = vector_to_matrix_face(to_visualise) to_visualise = invert_grayscale(to_visualise) sprite_image = create_sprite_image(to_visualise) plt.imsave(path_for_face_png,sprite_image,cmap='gray') plt.imshow(sprite_image,cmap='gray') with open(path_for_face_data,'w') as f: f.write("Index\tLabel\n") for index,label in enumerate(batch_ys): f.write("%d\t%d\n" % (index,label))
运行:
python3usr/lib/python3.4/site-packages/tensorflow/tensorboard/tensorboard.py –logdir=’facesample/’结果:
数据集打乱情况下可视化:PCA: 40种标签的人脸图片在空间中无序
t-SNE: 40种标签的人脸图片在空间中无序
数据集在没有打乱情况下可视化:
PCA: 40种标签的人脸图片在空间中分布明显
t-SNE: 40种标签的人脸图片在空间中分布明显
相关文章推荐
- tensorflow1.1/激活函数可视化
- tensorflow1.1/tensorboard可视化
- tensorflow1.1/optimizer可视化
- TensorFlow-7-TensorBoard Embedding可视化
- 学习TensorFlow,TensorBoard可视化网络结构和参数
- win7 + tensorflow1.1+k40c , win10+tensorflow1.4+1080ti
- TensorFlow基础教程:tensorboard训练过程可视化
- tensorflow1.1/GAN生成对抗网络
- tensorflow1.1/variational autoencoder人脸识别
- tensorflow1.1/构建双向神经网络识别mnist
- tensorflow1.1/利用rnn回归分析
- tensorflow1.1 和python3.5.3安装
- tensorflow的一些代码分析(五) tensorflow模型保存和可视化
- TensorFlow 1.1 Python API
- Faster-RCNN_TF的loss曲线可视化(tensorflow版本,Faster RCNN的loss曲线可视化)
- tensorflow实战 猫狗大战(二)tenorboard可视化使用
- tensorflow1.1/人脸识别Yale数据集
- TensorFlow基础知识6-可视化(TensorBoard)
- tensorflow中可视化tensorboard的启动
- TensorFlow在MNIST中的应用-训练过程的可视化