TensorFlow是一个很坑的东西,在没有session运行的时候,所有数据都看不到结果,很难去print


而且TF还没有中文的API手册,很多东西很难体会


在这里记录一下比较难理解的几个方法的用法,以便后面用到




tf.sparse_to_dense(sparse_indices, output_shape, sparse_values, default_value, name=None)

除去name参数用以指定该操作的name,与方法有关的一共四个参数:




第一个参数sparse_indices:稀疏矩阵中那些个别元素对应的索引值。


     有三种情况:


     sparse_indices是个数,那么它只能指定一维矩阵的某一个元素


     sparse_indices是个向量,那么它可以指定一维矩阵的多个元素


     sparse_indices是个矩阵,那么它可以指定二维矩阵的多个元素


第二个参数output_shape:输出的稀疏矩阵的shape


第三个参数sparse_values:个别元素的值。


     分为两种情况:


     sparse_values是个数:所有索引指定的位置都用这个数


     sparse_values是个向量:输出矩阵的某一行向量里某一行对应的数(所以这里向量的长度应该和输出矩阵的行数对应,不然报错)


第四个参数default_value:未指定元素的默认值,一般如果是稀疏矩阵的话就是0了




举一个例子:


在mnist里面有一个把数字标签转化成onehot标签的操作,所谓onehot标签就是:


如果标签是6那么对应onehot就是[ 0.  0.  0.  0.  0.  0.  1.  0.  0.  0.]


如果标签是1那么对应onehot就是[ 0.  1.  0.  0.  0.  0.  0.  0.  0.  0.]


如果标签是0那么对应onehot就是[ 1.  0.  0.  0.  0.  0.  0.  0.  0.  0.]


就是把标签变为适用于神经网络输出的形式。






import tensorflow as tf  


import numpy  


  


  


BATCHSIZE=6  


label=tf.expand_dims(tf.constant([0,2,3,6,7,9]),1)  


index=tf.expand_dims(tf.range(0, BATCHSIZE),1)  


#use a matrix  


concated = tf.concat(1, [index, label])  


onehot_labels = tf.sparse_to_dense(concated, tf.pack([BATCHSIZE,10]), 1.0, 0.0)  


with tf.Session() as sess:  


    result1=sess.run(onehot_labels)  


 这是一个繁琐的方法,真的是很难用明白,好在pandas模块提供了一个生成one hot码的方法超级好用


pd.get_dummies()



例子如下


print(pd.get_dummies([2,1,3]).values)

[[0 1 0]

 [1 0 0]

 [0 0 1]]



注意:本文归作者所有,未经作者允许,不得转载