日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tensorflow学习笔记:tf.data.Dataset,from_tensor_slices(),shuffle(),batch()的用法

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tensorflow学习笔记:tf.data.Dataset,from_tensor_slices(),shuffle(),batch()的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tf.data.Dataset.from_tensor_slices:

它的作用是切分傳入Tensor的第一個維度,生成相應的dataset。

例1:

dataset = tf.data.Dataset.from_tensor_slices(np.random.uniform(size=(5, 2)))?
傳入的數值是一個矩陣,它的形狀為(5, 2),tf.data.Dataset.from_tensor_slices就會切分它形狀上的第一個維度,最后生成的dataset中一個含有5個元素,每個元素的形狀是(2, ),即每個元素是矩陣的一行。

例2:

對于更復雜的情形,比如元素是一個python中的元組或者字典:在圖像識別中一個元素可以是{”image”:image_tensor,”label”:label_tensor}的形式。?
dataset = tf.data.Dataset.from_tensor_slices ( { “a”:np.array([1.0,2.0,3.0,4.0,5.0]), “b”:np.random.uniform(size=(5,2) ) } )?
這時,函數會分別切分”a”中的數值以及”b”中的數值,最后總dataset中的一個元素就是類似于{ “a”:1.0, “b”:[0.9,0.1] }的形式。

shuffle(buffer_size,seed=None,reshuffle_each_iteration=None )

batch很好理解,就是batch size。注意在一個epoch中最后一個batch大小可能小于等于batch size?
dataset.repeat就是俗稱epoch,但在tf中與dataset.shuffle的使用順序可能會導致個epoch的混合?
dataset.shuffle就是說維持一個buffer_size 大小的 shuffle buffer,圖中所需的每個樣本從shuffle buffer中獲取,取得一個樣本后,就從源數據集中加入一個樣本到shuffle buffer中。對于完美的洗牌,需要大于或等于數據集的完整大小的緩沖區大小。

tf.slice:?

tf.slice(input_,begin,size,name=None )

函數參數

  • input_:一個Tensor.
  • begin:一個int32或int64類型的Tensor.
  • size:一個int32或int64類型的Tensor.
  • name:操作的名稱(可選).

函數返回

tf.slice函數返回與input具有相同類型的Tensor.

此操作從由begin指定位置開始的張量input中提取一個尺寸size的切片.切片size被表示為張量形狀,其中size[i]是你想要分割的input的第i維的元素的數量.切片的起始位置(begin)表示為每個input維度的偏移量.換句話說,begin[i]是你想從中分割出來的input的“第i個維度”的偏移量.

input = [[[1, 1, 1], [2, 2, 2]],[[3, 3, 3], [4, 4, 4]],[[5, 5, 5], [6, 6, 6]]] tf.slice(input, [1, 0, 0], [1, 1, 3]) ==> [[[3, 3, 3]]] tf.slice(input, [1, 0, 0], [1, 2, 3]) ==> [[[3, 3, 3],[4, 4, 4]]] tf.slice(input, [1, 0, 0], [2, 1, 3]) ==> [[[3, 3, 3]],[[5, 5, 5]]]tf.gather(input, [0, 2]) ==> [[[1, 1, 1], [2, 2, 2]],[[5, 5, 5], [6, 6, 6]]]假設我們要從input中抽取[[[3, 3, 3]]],這個輸出在inputaxis=0的下標是1,axis=1的下標是0,axis=2的下標是0-2,所以begin=[1,0,0],size=[1,1,3]。假設我們要從input中抽取[[[3, 3, 3], [4, 4, 4]]],這個輸出在inputaxis=0的下標是1,axis=1的下標是0-1,axis=2的下標是0-2,所以begin=[1,0,0],size=[1,2,3]。假設我們要從input中抽取[[[3, 3, 3], [5, 5, 5]]],這個輸出在inputaxis=0的下標是1-2,axis=1的下標是0,axis=2的下標是0-2,所以begin=[1,0,0],size=[2,1,3]。假設我們要從input中抽取[[[1, 1, 1], [2, 2, 2]],[[5, 5, 5], [6, 6, 6]]],這個輸出在input的axis=0的下標是[0, 2],不連續,可以用tf.gather抽取。input[0]和input[2]

tf.identity

tf.sequence_mask:

tf.sequence_mask(lengths,maxlen=None,dtype=tf.dtypes.bool,name=None )

函數參數

  • lengths:整數張量,其所有值小于等于maxlen.
  • maxlen:標量整數張量,返回張量的最后維度的大小;默認值是lengths中的最大值.
  • dtype:結果張量的輸出類型.
  • name:操作的名字.

函數返回值

形狀為lengths.shape + (maxlen,)的mask張量,投射到指定的dtype.

tf.sequence_mask([1, 3, 2], 5) # [[True, False, False, False, False],# [True, True, True, False, False],# [True, True, False, False, False]]tf.sequence_mask([[1, 3],[2,0]]) # [[[True, False, False],# [True, True, True]],# [[True, True, False],# [False, False, False]]]

tf.boolean_mask:

tf.boolean_mask(tensor,mask,name='boolean_mask',axis=None )

一般情況下,0 < dim(mask) = K <= dim(tensor) 并且 mask 的形狀必須與張量形狀的第一 K 維度匹配.然后我們就有:(tensor,?mask)[i,?j1,...,jd]?=?tensor[i1,...,iK,j1,...,jd] 當(i1,...,iK) 是 mask?(row-major?order) 的第 i 個真輸入.

ARGS:

  • tensor:N -D 張量.
  • mask:K - D 布爾張量,K <= N 和 K 必須是靜態已知的.
  • name:此操作的名稱(可選).

返回:

返回(N-K + 1)維張量由條目中填充的 tensor 對應于 mask 中的 True 值.

注意:

  • ValueError:如果形狀不符合時.
#1-D 示例 tensor = [ 0 , 1 , 2 , 3 ] mask = np.array([True,False,True,False] ) boolean_mask (tensor,mask) == > [ 0 , 2 ] #2-D示例 tensor = [ [ 1 , 2 ] , [ 3 , 4 ] , [ 5 , 6 ] ] mask = np.array([True,False,True] ) boolean_mask (tensor,mask) == > [ [ 1 , 2 ] , [ 5 , 6 ] ]

?

總結

以上是生活随笔為你收集整理的tensorflow学习笔记:tf.data.Dataset,from_tensor_slices(),shuffle(),batch()的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。