亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Tensorflow的DataSet的使用詳解

 更新時(shí)間:2023年01月15日 14:29:08   作者:月司  
本文主要介紹了Tensorflow的DataSet的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Dataset類是TensorFlow非常流行的存儲(chǔ)數(shù)據(jù)的格式。常用來作為輸入輸出。data模塊主要的用途就是通過這種方法創(chuàng)建Dataset。

Dataset使用過程中的一些心得:

經(jīng)常將自變量X數(shù)據(jù)以及target數(shù)據(jù)以元組的形式包裹,如db_train=tf.data.Dataset.from_tensor_slices((x_train,y_train)),創(chuàng)建Dataset。模型的fit()方法可以自動(dòng)的解包。

Dataset能夠包括比較靈活的類型,比如db_train=tf.data.Dataset.from_tensor_slices(({"features":features_train,"biomass_start":biomass_start_trarin},y_train))。因?yàn)閿?shù)據(jù)最外部依然是最外部包裹,所以model的fit()依然可以自動(dòng)的對(duì)x以及target解包。但由于dataset保存component是以原始數(shù)據(jù)的形式保存的。所以,fit()里的inputs一般是這個(gè)樣子:

{'features': <tf.Tensor 'my_rnn/Cast_1:0' shape=(None, 5, 4) dtype=float32>, 'biomass_start': <tf.Tensor 'my_rnn/Cast:0' shape=(None, 1) dtype=float32>}

對(duì)于字典內(nèi)部部分,需要手動(dòng)的自己解包。這樣的好處是,給我們自定義模型的結(jié)構(gòu)提供的很大的遍歷,輸入一部分導(dǎo)入A網(wǎng)絡(luò),一部分導(dǎo)入不同的B網(wǎng)絡(luò)。

Dataset作為模型的輸入,需要設(shè)定batch()。而不在模型內(nèi)設(shè)定batch。更加方便。然而Dataset作為迭代器,迭代完成后再次迭代數(shù)據(jù),生成數(shù)據(jù)的前后數(shù)據(jù)是不一樣的。需要注意。

batch的drop_remainder=True參數(shù)比較重要,只有設(shè)定為True,input接下來的層還能正確的識(shí)別shape

Dataset的常用屬性

Dataset.element_spec

這個(gè)屬性可以檢測(cè)每一個(gè)元素中的component的類型。返回的是一個(gè)tf.TypeSpec對(duì)象。這個(gè)對(duì)象的結(jié)構(gòu)跟元素的結(jié)構(gòu)是一致的。

dataset1 = tf.data.Dataset.from_tensor_slices(tf.random.uniform([4, 10]))

dataset1.element_spec
#TensorSpec(shape=(10,), dtype=tf.float32, name=None)
dataset2 = tf.data.Dataset.from_tensor_slices(
? ?(tf.random.uniform([4]),
? ? tf.random.uniform([4, 100], maxval=100, dtype=tf.int32)))

dataset2.element_spec
# 標(biāo)量和向量
# (TensorSpec(shape=(), dtype=tf.float32, name=None),
#TensorSpec(shape=(100,), dtype=tf.int32, name=None))
dataset = tf.data.Dataset.from_tensor_slices(([1, 2], [3, 4], [5, 6]))
dataset.element_spec?
#(TensorSpec(shape=(), dtype=tf.int32, name=None),
# TensorSpec(shape=(), dtype=tf.int32, name=None),
# TensorSpec(shape=(), dtype=tf.int32, name=None))

# 注意這里是字典類型
dataset = tf.data.Dataset.from_tensor_slices({"a": [1, 2], "b": [3, 4]})
dataset.element_spec
#{'a': TensorSpec(shape=(), dtype=tf.int32, name=None),
# 'b': TensorSpec(shape=(), dtype=tf.int32, name=None)}

Dataset的常用方法

apply方法

對(duì)dataset進(jìn)行轉(zhuǎn)換。

dataset = tf.data.Dataset.range(100)
def dataset_fn(ds):
  return ds.filter(lambda x: x < 5)
dataset = dataset.apply(dataset_fn)
list(dataset.as_numpy_iterator())

as_numpy_iterator

dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
for element in dataset.as_numpy_iterator():
  print(element)

這個(gè)在dataset比較常用。就是將dataset變成迭代器,將所有元素都變成numy對(duì)象輸出

shuffle

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

參數(shù):

  • buffer_size:緩沖區(qū)大小
  • seed:隨機(jī)種子
  • reshuffle_each_iteration:bool. 如果為真,表示每次迭代時(shí)數(shù)據(jù)集完成后都應(yīng)該是進(jìn)行偽隨機(jī)重新洗牌的。控制每個(gè)epoch的洗牌順序是否不同。

這個(gè)方法用來隨機(jī)打亂數(shù)據(jù)集的元素順序。數(shù)據(jù)集用buffer_size元素填充一個(gè)緩沖區(qū),然后從這個(gè)緩沖區(qū)隨機(jī)取樣元素,用新元素替換選中的元素。例如,如果您的數(shù)據(jù)集包含10,000個(gè)元素,但是buffer_size被設(shè)置為1,000,那么shuffle將首先從緩沖區(qū)中的前1,000個(gè)元素中選擇一個(gè)隨機(jī)元素。一旦一個(gè)元素被選中,它在緩沖區(qū)中的空間就會(huì)被下一個(gè)(比如第1001個(gè))元素替換,從而保持這個(gè)1,000元素緩沖區(qū)。為了實(shí)現(xiàn)完美的洗牌,需要一個(gè)大于或等于數(shù)據(jù)集完整大小的緩沖區(qū)。

dataset = tf.data.Dataset.range(3)
# 每個(gè)每個(gè)epoch重新洗牌
dataset = dataset.shuffle(3, reshuffle_each_iteration=True)
list(dataset.as_numpy_iterator())
# [1, 0, 2]
list(dataset.as_numpy_iterator())
# [1, 2, 0]
dataset = tf.data.Dataset.range(3)
# 每個(gè)每個(gè)epoch不重新洗牌
dataset = dataset.shuffle(3, reshuffle_each_iteration=False)
list(dataset.as_numpy_iterator())
# [1, 0, 2]
list(dataset.as_numpy_iterator())
# [1, 0, 2]

batch

batch(
    batch_size,
    drop_remainder=False,
    num_parallel_calls=None,
    deterministic=None,
    name=None
)

參數(shù):

  • batch_size: 批處理大小
  • drop_remainder:是否刪除最后一個(gè)短batch。==這個(gè)比較重要,只有設(shè)定為Ture,model才能正確的判斷其輸入的shape。==這也比較合理,指定為Falsel,因?yàn)檎l也不知道后面是不是有一個(gè)比較短的batch,只有第一維是None,才能提高程序的穩(wěn)定性。
  • num_parallel_calls:并行計(jì)算的數(shù)量。不指定會(huì)順序執(zhí)行。如果有 tf.data.AUTOTUNE,會(huì)自動(dòng)動(dòng)態(tài)的制定這個(gè)值。
  • deterministic:bool. 指定了num_parallel_calls,才有效。如果設(shè)置為False,則允許轉(zhuǎn)換產(chǎn)生無序元素,以犧牲確定性來換取性能。如果不指定,tf.data.Options.deterministic控制這個(gè)行為(默認(rèn)為True)
  • name: 標(biāo)識(shí)符

這個(gè)方法經(jīng)常使用,將dataset進(jìn)行批處理化。因?yàn)閿?shù)據(jù)集比較大的時(shí)候,一下子完全進(jìn)行訓(xùn)練占用大量的內(nèi)存。所以用分批處理。輸出的元素增加了一個(gè)額外的維度,就是batch維,shape是batch的size.

batch支持一個(gè)drop_remainder=True關(guān)鍵字,為真意味著,最后一個(gè)batch的size如果小于我們指定值,就會(huì)被舍棄。

之所以要?jiǎng)h掉最后一個(gè)短的batch,是因?yàn)槿绻覀兊捻?xiàng)目依賴這個(gè)batch的size,那最后一個(gè)batch不等長(zhǎng),可能會(huì)出錯(cuò)。

import tensorflow as tf
from tensorflow.python.data import Dataset

dataset = tf.data.Dataset.range(8)
dataset = dataset.batch(3)
print(list(dataset.as_numpy_iterator()))
# 通過這個(gè)看到這個(gè)elem也已經(jīng)是分批了
for elem in dataset:
? ? print(elem)

# tf.Tensor([0 1 2], shape=(3,), dtype=int64)
# tf.Tensor([3 4 5], shape=(3,), dtype=int64)
# tf.Tensor([6 7], shape=(2,), dtype=int64)

for elem in dataset.as_numpy_iterator():
? ? print(elem)

# [0 1 2]
# [3 4 5]
# [6 7]
dataset = tf.data.Dataset.range(8)
# drop_remainder舍掉最后一個(gè)長(zhǎng)度不夠的batch
dataset = dataset.batch(3, drop_remainder=True)
list(dataset.as_numpy_iterator())

一般情況下,shuffle跟batch是連續(xù)使用的,實(shí)現(xiàn)隨機(jī)讀取并批量處理數(shù)據(jù):dataset.shuffle(buffer_size).batch(batchsize)

不能對(duì)已經(jīng)batch的dataset進(jìn)行連續(xù)的batch操作,其batchsize不會(huì)改變,而是生成了新的異常數(shù)據(jù)

unbatch

unbatch(
    name=None
)

這里是將Batchdataset這樣的dataset分割為一個(gè)個(gè)元素,元素的格式跟定義時(shí)的格式是一樣的。而且,這里固定的是對(duì)第1個(gè)維度進(jìn)行split操作,且生成shape[0]個(gè)元素。

reduce方法

reduce(
    initial_state, reduce_func, name=None
)

將輸入數(shù)據(jù)集簡(jiǎn)化為一個(gè)元素。 reduce_func作用于dataset中每一個(gè)元素,輸出其dataset的聚合信息。

參數(shù)initial_state代表進(jìn)行reduce之前的初始狀態(tài)。reduce_func要接收old_state, input_element兩個(gè)參數(shù),然后生成新的狀態(tài)newstate。old_state和new_state的結(jié)構(gòu)要一致。

dataset = tf.data.Dataset.from_tensor_slices([8, 3, 0, 8, 2, 1])
print(dataset.reduce(0, lambda state, value: state + value).numpy())
# 22

dataset不支持tf.split屬性,也不能直接把dataset給切分為訓(xùn)練集和測(cè)試集。

到此這篇關(guān)于Tensorflow的DataSet的使用詳解的文章就介紹到這了,更多相關(guān)Tensorflow DataSet內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 如何利用pandas 和 matplotlib繪制柱狀圖

    Python 如何利用pandas 和 matplotlib繪制柱狀圖

    Python 中的 pandas 和 matplotlib 庫提供了豐富的功能,可以幫助你輕松地繪制各種類型的圖表,本文將介紹如何使用這兩個(gè)庫,繪制一個(gè)店鋪銷售數(shù)量的柱狀圖,并添加各種元素,如數(shù)據(jù)標(biāo)簽、圖例、網(wǎng)格線等,感興趣的朋友一起看看吧
    2023-10-10
  • 基于Python實(shí)現(xiàn)人臉識(shí)別相似度對(duì)比功能

    基于Python實(shí)現(xiàn)人臉識(shí)別相似度對(duì)比功能

    人臉識(shí)別技術(shù)是一種通過計(jì)算機(jī)對(duì)人臉圖像進(jìn)行分析和處理,從而實(shí)現(xiàn)自動(dòng)識(shí)別和辨認(rèn)人臉的技術(shù),隨著計(jì)算機(jī)視覺和模式識(shí)別領(lǐng)域的快速發(fā)展,人臉識(shí)別技術(shù)取得了長(zhǎng)足的進(jìn)步,本文給大家介紹了基于Python實(shí)現(xiàn)人臉識(shí)別相似度對(duì)比功能,感興趣的朋友可以參考下
    2024-01-01
  • 在pycharm中使用pipenv創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程

    在pycharm中使用pipenv創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程

    這篇文章主要介紹了在pycharm中使用pipenv來創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python網(wǎng)絡(luò)編程實(shí)例簡(jiǎn)析

    python網(wǎng)絡(luò)編程實(shí)例簡(jiǎn)析

    這篇文章主要介紹了python網(wǎng)絡(luò)編程,有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • 淺談pytorch torch.backends.cudnn設(shè)置作用

    淺談pytorch torch.backends.cudnn設(shè)置作用

    今天小編就為大家分享一篇淺談pytorch torch.backends.cudnn設(shè)置作用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Pytorch實(shí)現(xiàn)各種2d卷積示例

    Pytorch實(shí)現(xiàn)各種2d卷積示例

    今天小編就為大家分享一篇Pytorch實(shí)現(xiàn)各種2d卷積示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python實(shí)現(xiàn)Excel表格轉(zhuǎn)HTML

    Python實(shí)現(xiàn)Excel表格轉(zhuǎn)HTML

    Excel工作簿是常用的表格格式,廣泛用于組織、分析及展示數(shù)據(jù),這篇文章主要為大家詳細(xì)介紹了如何使用Python將Excel工作簿或工作表轉(zhuǎn)換為HTML文件,需要的可以參考下
    2024-03-03
  • 解決Pytorch訓(xùn)練過程中l(wèi)oss不下降的問題

    解決Pytorch訓(xùn)練過程中l(wèi)oss不下降的問題

    今天小編就為大家分享一篇解決Pytorch訓(xùn)練過程中l(wèi)oss不下降的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python+requests+unittest API接口測(cè)試實(shí)例(詳解)

    python+requests+unittest API接口測(cè)試實(shí)例(詳解)

    下面小編就為大家?guī)硪黄猵ython+requests+unittest API接口測(cè)試實(shí)例(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • pyqt5 鍵盤監(jiān)聽按下enter 就登陸的實(shí)例

    pyqt5 鍵盤監(jiān)聽按下enter 就登陸的實(shí)例

    今天小編就為大家分享一篇pyqt5 鍵盤監(jiān)聽按下enter 就登陸的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06

最新評(píng)論