深入理解Tensorflow中的masking和padding
TensorFlow是一個(gè)采用數(shù)據(jù)流圖(data flow graphs),用于數(shù)值計(jì)算的開源軟件庫(kù)。節(jié)點(diǎn)(Nodes)在圖中表示數(shù)學(xué)操作,圖中的線(edges)則表示在節(jié)點(diǎn)間相互聯(lián)系的多維數(shù)據(jù)數(shù)組,即張量(tensor)。它靈活的架構(gòu)讓你可以在多種平臺(tái)上展開計(jì)算,例如臺(tái)式計(jì)算機(jī)中的一個(gè)或多個(gè)CPU(或GPU),服務(wù)器,移動(dòng)設(shè)備等等。TensorFlow 最初由Google大腦小組(隸屬于Google機(jī)器智能研究機(jī)構(gòu))的研究員和工程師們開發(fā)出來,用于機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)方面的研究,但這個(gè)系統(tǒng)的通用性使其也可廣泛用于其他計(jì)算領(lǐng)域。
聲明:
需要讀者對(duì)tensorflow和深度學(xué)習(xí)有一定了解
tf.boolean_mask
實(shí)現(xiàn)類似numpy數(shù)組的mask操作
Python的numpy array可以使用boolean類型的數(shù)組作為索引,獲得numpy array中對(duì)應(yīng)boolean值為True的項(xiàng)。示例如下:
# numpy array中的boolean mask import numpy as np target_arr = np.arange(5) print "numpy array before being masked:" print target_arr mask_arr = [True, False, True, False, False] masked_arr = target_arr[mask_arr] print "numpy array after being masked:" print masked_arr
運(yùn)行結(jié)果如下:
numpy array before being masked: [0 1 2 3 4] numpy array after being masked: [0 2]
tf.boolean_maks對(duì)目標(biāo)tensor實(shí)現(xiàn)同上述numpy array一樣的mask操作,該函數(shù)的參數(shù)也比較簡(jiǎn)單,如下所示:
tf.boolean_mask( tensor, # target tensor mask, # mask tensor axis=None, name='boolean_mask' )
下面,我們來嘗試一下tf.boolean_mask函數(shù),示例如下:
import tensorflow as tf # tensorflow中的boolean mask target_tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) mask_tensor = tf.constant([True, False, True]) masked_tensor = tf.boolean_mask(target_tensor, mask_tensor, axis=0) sess = tf.InteractiveSession() print masked_tensor.eval()
mask tensor中的第0和第2個(gè)元素是True,mask axis是第0維,也就是我們只選擇了target tensor的第0行和第1行。
[[1 2] [5 6]]
如果把mask tensor也換成2維的tensor會(huì)怎樣呢?
mask_tensor2 = tf.constant([[True, False], [False, False], [True, False]]) masked_tensor2 = tf.boolean_mask(target_tensor, mask_tensor, axis=0) print masked_tensor2.eval()
[[1 2] [5 6]]
我們發(fā)現(xiàn),結(jié)果不是[[1], [5]]。tf.boolean_mask不做元素維度的mask,tersorflow中有tf.ragged.boolean_mask實(shí)現(xiàn)元素維度的mask。
tf.ragged.boolean_mask tf.ragged.boolean_mask( data, mask, name=None )
tensorflow中的sparse向量和sparse mask tensorflow中的sparse tensor由三部分組成,分別是indices、values、dense_shape。對(duì)于稀疏張量SparseTensor(indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4]),轉(zhuǎn)化成dense tensor的值為:
[[1, 0, 0, 0] [0, 0, 2, 0] [0, 0, 0, 0]]
使用tf.sparse.mask可以對(duì)sparse tensor執(zhí)行mask操作。
tf.sparse.mask( a, mask_indices, name=None )
上文定義的sparse tensor有1和2兩個(gè)值,對(duì)應(yīng)的indices為[[0, 0], [1, 2]],執(zhí)行tf.sparsse.mask(a, [[1, 2]])后,稀疏向量轉(zhuǎn)化成dense的值為:
[[1, 0, 0, 0] [0, 0, 0, 0] [0, 0, 0, 0]]
由于tf.sparse中的大多數(shù)函數(shù)都只在tensorflow2.0版本中有,所以沒有實(shí)例演示。
padded_batch
tf.Dataset中的padded_batch函數(shù),根據(jù)輸入序列中的最大長(zhǎng)度,自動(dòng)的pad一個(gè)batch的序列。
padded_batch( batch_size, padded_shapes, padding_values=None, drop_remainder=False )
這個(gè)函數(shù)與tf.Dataset中的batch函數(shù)對(duì)應(yīng),都是基于dataset構(gòu)造batch,但是batch函數(shù)需要dataset中的所有樣本形狀相同,而padded_batch可以將不同形狀的樣本在構(gòu)造batch時(shí)padding成一樣的形狀。
elements = [[1, 2], [3, 4, 5], [6, 7], [8]] A = tf.data.Dataset.from_generator(lambda: iter(elements), tf.int32) B = A.padded_batch(2, padded_shapes=[None]) B_iter = B.make_one_shot_iterator() print B_iter.get_next().eval()
[[1 2 0] [3 4 5]]
總結(jié)
到此這篇關(guān)于深入理解Tensorflow中的masking和padding的文章就介紹到這了,更多相關(guān)Tensorflow中的masking和padding內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
超級(jí)好用的4個(gè)Python命令行可視化庫(kù)
通常大家都是在自己的電腦上跑程序,直接是可以可視化相應(yīng)的結(jié)果.如果是在服務(wù)器上的話,使用終端,是不太方便查看結(jié)果. 今天,小F就給大家介紹4個(gè)可以在命令行中使用的Python庫(kù). 分別是Bashplotlib、tqdm、PrettyTable、Colorama,需要的朋友可以參考下2021-06-06django ORM之values和annotate使用詳解
這篇文章主要介紹了django ORM之values和annotate使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python如何實(shí)現(xiàn)MySQL實(shí)例初始化詳解
這篇文章主要給大家介紹了關(guān)于Python如何實(shí)現(xiàn)MySQL實(shí)例初始化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11python3學(xué)習(xí)筆記之多進(jìn)程分布式小例子
本篇文章主要介紹了python3學(xué)習(xí)筆記之多進(jìn)程分布式小例子,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02Python異常處理:try、except、else、finally的全面解析
在Python中,異常是程序在運(yùn)行時(shí)發(fā)生的錯(cuò)誤,當(dāng)Python解釋器遇到一個(gè)它不能處理的錯(cuò)誤時(shí),它會(huì)拋出一個(gè)異常,異常處理的主要目的是在程序遇到錯(cuò)誤時(shí),提供一種方法來處理這些錯(cuò)誤,而不是簡(jiǎn)單地讓程序崩潰,本文介紹了Python異常處理:try、except、else、finally的全面解析2024-07-07使用Mixin設(shè)計(jì)模式進(jìn)行Python編程的方法講解
Mixin模式也可以看作是一種組合模式,綜合多個(gè)類的功能來產(chǎn)生一個(gè)類而不通過繼承來實(shí)現(xiàn),下面就來整理一下使用Mixin設(shè)計(jì)模式進(jìn)行Python編程的方法講解:2016-06-06Python實(shí)現(xiàn)自定義函數(shù)的5種常見形式分析
這篇文章主要介紹了Python實(shí)現(xiàn)自定義函數(shù)的5種常見形式,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python自定義函數(shù)相關(guān)的參數(shù)、默認(rèn)值、隱函數(shù)等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-06-06