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]]
注意:本文归作者所有,未经作者允许,不得转载