TensorFlow函數(shù):tf.sparse_to_dense

2020-10-31 14:53 更新

tf.sparse_to_dense函數(shù)

sparse_to_dense ( 
    sparse_indices , 
    output_shape , 
    sparse_values , 
    default_value = 0 , 
    validate_indices = True , 
    name = None 
)

定義在:tensorflow/python/ops/sparse_ops.py.

請(qǐng)參閱指南:稀疏張量>轉(zhuǎn)變

將稀疏表示形式轉(zhuǎn)換為稠密張量.

構(gòu)建一個(gè) dense 形狀 output_shape 的數(shù)組,如下述所示:

# If sparse_indices is scalar
dense[i] = (i == sparse_indices ? sparse_values : default_value)

# If sparse_indices is a vector, then for each i
dense[sparse_indices[i]] = sparse_values[i]

# If sparse_indices is an n by d matrix, then for each i in [0, n)
dense[sparse_indices[i][0], ..., sparse_indices[i][d-1]] = sparse_values[i]

所有其他值的 dense 都設(shè)置為 default_value.如果 sparse_values 是標(biāo)量,則所有稀疏索引都設(shè)置為該單個(gè)值.

索引應(yīng)按字典順序排序,索引不得有任何重復(fù).如果 validate_indices 為 True,則在執(zhí)行期間檢查這些屬性.

函數(shù)參數(shù):

  • sparse_indices:表示類型為 int32 或 int64 的 0-d、1-d 或 2- d Tensor;sparse_indices[i] 包含完整索引,這是 sparse_values[i] 將放置的位置.
  • output_shape:與 sparse_indices 具有相同類型的 1-D Tensor;密集輸出張量的形狀.
  • sparse_values:0-D 或1-D Tensor;對(duì)應(yīng)于每行的 sparse_indices 值,或者將用于所有稀疏索引的標(biāo)量值.
  • default_value:與 sparse_values 具有相同類型的 0-D Tensor;為未在 sparse_indices 中指定的索引設(shè)置值;默認(rèn)為零.
  • validate_indices:一個(gè)布爾值;如果為 True,則檢查索引以確保按照詞典順序排序并且沒有重復(fù).
  • name:操作的名稱(可選).

函數(shù)返回值:

tf.sparse_to_dense函數(shù)返回形狀為 output_shape 的密集 Tensor,它與 sparse_values 具有相同的類型.

介紹幾個(gè)方法的用法:

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

除去name參數(shù)用以指定該操作的 name,與方法有關(guān)的一共四個(gè)參數(shù) :

第一個(gè)參數(shù) sparse_indices:稀疏矩陣中那些個(gè)別元素對(duì)應(yīng)的索引值。

  有三種情況:
  sparse_indices 是個(gè)數(shù),那么它只能指定一維矩陣的某一個(gè)元素
  sparse_indices 是個(gè)向量,那么它可以指定一維矩陣的多個(gè)元素
  sparse_indices 是個(gè)矩陣,那么它可以指定二維矩陣的多個(gè)元素
第二個(gè)參數(shù) output_shape:輸出的稀疏矩陣的 shape
第三個(gè)參數(shù) sparse_values:個(gè)別元素的值。
  分為兩種情況:
  sparse_values 是個(gè)數(shù):所有索引指定的位置都用這個(gè)數(shù)
  sparse_values 是個(gè)向量:輸出矩陣的某一行向量里某一行對(duì)應(yīng)的數(shù)(所以這里向量的長(zhǎng)度應(yīng)該和輸出矩陣的行數(shù)對(duì)應(yīng),不然報(bào)錯(cuò))
第四個(gè)參數(shù) default_value:未指定元素的默認(rèn)值,一般如果是稀疏矩陣的話就是0了舉一個(gè)例子:
在 mnist 里面有一個(gè)把數(shù)字標(biāo)簽轉(zhuǎn)化成 onehot 標(biāo)簽的操作,所謂 onehot 標(biāo)簽就是:
如果標(biāo)簽是6那么對(duì)應(yīng) onehot 就是[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
如果標(biāo)簽是1那么對(duì)應(yīng) onehot 就是[ 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
如果標(biāo)簽是0那么對(duì)應(yīng) onehot 就是[ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
就是把標(biāo)簽變?yōu)檫m用于神經(jīng)網(wǎng)絡(luò)輸出的形式。
BATCHSIZE=6
?label=tf.expand_dims(tf.constant([0,2,3,6,7,9]),1)

假設(shè)一個(gè) batch 有6個(gè)樣本,每個(gè)樣本的 label 是0,2,3,6,7,9

index=tf.expand_dims(tf.range(0, BATCHSIZE),1)生成一個(gè)index表明一個(gè)batch里面每個(gè)樣本對(duì)應(yīng)的序號(hào)

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

最后把他們兩個(gè)矩陣進(jìn)行連接,連接以后的矩陣是這樣的

[[0 0][1 2]

[2 3]

[3 6]

[4 7]

[5 9]]

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

最后一步,調(diào)用 tf.sparse_to_dense 輸出一個(gè) onehot 標(biāo)簽的矩陣,輸出的 shape 就是行數(shù)為 BATCHSIZE,列數(shù)為10的矩陣,指定元素值為1.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)
?#use a vector
concated2=tf.constant([1,3,4])
#onehot_labels2 = tf.sparse_to_dense(concated2, tf.pack([BATCHSIZE,10]), 1.0, 0.0)#cant use ,because output_shape is not a vector
?onehot_labels2 = tf.sparse_to_dense(concated2, tf.pack([10]), 1.0, 0.0)#can use
#use a scalar
?concated3=tf.constant(5)
onehot_labels3 = tf.sparse_to_dense(concated3, tf.pack([10]), 1.0, 0.0)
with tf.Session() as sess:
result1=sess.run(onehot_labels)
result2 = sess.run(onehot_labels2)
result3 = sess.run(onehot_labels3)
print ("This is result1:")
print (result1)
print ("This is result2:")
?print (result2)
print ("This is result3:")
?print (result3)

輸出結(jié)果:

 This is result1: 
[[ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [ 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
 [ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] 
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
 [ 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]] 
This is result2:
 [ 0. 1. 0. 1. 1. 0. 0. 0. 0. 0.]
 This is result3: 
[ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] 


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)