網站首頁 編程語言 正文
tensorflow2數據讀取P2: tf.data.Dataset.from_generator通過自定義的python生成器構造Dataset
作者:象象家的小蜜桃 更新時間: 2022-10-29 編程語言上一篇文章:tensorflow2數據讀取P1: numpy array中,提到model.fit支持輸入5類數據。分別是numpy array, tensor, 字典(值為numpy array或tensor), tf.data創建的Dataset, 生成器類型。
其中tensor, 字典與numpy array區別不是很大。在必須使用這2中數據類型時,做一些類型轉換即可。這篇文章想要說說tf.data創建的Dataset類型作為輸入。學會這種方法,可以處理數據量很大的任務。因為,一些方法創建的Dataset類型,類似一個生成器,可以一點一點地讀取數據。而不是一次性將所有的數據都讀取到內存中。在數據量很大的任務中,一次性將所有數據都讀入內存是不太可能的。
這里主要講解以下3中創建Dataset的方法
- tf.data.Dataset.from_generator通過自定義的python生成器構造Dataset
- tf.data.Dataset.from_generator通過preprocessing.image.ImageDataGenerator構造Dataset, 此方法比較適合圖像任務
- tf.data.TFRecordDataset創建Dataset
tf.data.Dataset.from_generator通過自定義的python生成器構造Dataset
python生成器可以簡單理解成,一種用yield關鍵字返回值的一種函數。生成器有點像擠牙膏,你調用它一次,它的任務就往前推進一點。這就很適合處理大量數據時,每次只讀取需要的那部分數據的情景。
假設有一批圖片數據,我們可以自定義一個生成器,yield圖片路徑,然后再讀取圖片
import os
import tensorflow as tf
import glob
# 自定義一個讀取路徑的生成器
def filepath_generator(inroot,filetype):
inroot = inroot.decode('utf-8') # 這里用decode是因為這個生成器的參數傳入tf.data.Dataset.from_generator之后,字符串會變成bytes類型
filetype = filetype.decode('utf-8')
inroot = os.path.join(inroot,'*.'+filetype)
filelist = glob.glob(inroot)
for filepath in range(len(filelist)):
yield filelist[filepath]
然后使用tf.data.Dataset.from_generator構建dataset
···
inroot = r’imgs’
filetype = ‘jpeg’
dataset = tf.data.Dataset.from_generator(filepath_generator,(tf.string),args=[inroot,filetype])
···
tf.data.Dataset.from_generator函數接收4個參數,分別是generator(生成器),output_types(生成器輸出的數據類型),output_shapes(生成器輸出的數據形狀,可選參數),args(調用生成器需要的參數)
注意
送入的generator(生成器)必須是可調用的,例如這個例子里面,傳入filepath_generator函數名,這個就是可調用的。但是,如果生成一個mygenerator = filepath_generator(inroot,filetype), 再將mygenerator傳入tf.data.Dataset.from_generator(mygenerator, (tf.string)), 就會報generator必須是可調用的錯誤。
原文鏈接:https://blog.csdn.net/qq_19069557/article/details/127561671
- 上一篇:STDC分割網絡:onnx推理
- 下一篇:Spring的純注解配置詳解
相關推薦
- 2022-05-13 Shell腳本命令結果保存到變量,保留換行符
- 2022-09-24 ASP.NET?MVC創建XML文件并實現元素增刪改_實用技巧
- 2022-10-24 解析Golang中引用類型是否進行引用傳遞_Golang
- 2022-10-25 基于windows10下使用bat腳本設置自定義開機啟動項
- 2022-11-07 react-native?實現漸變色背景過程_React
- 2022-10-09 ASP.NET泛型四之使用Lazy<T>實現延遲加載_實用技巧
- 2022-07-23 SQL?Server中T-SQL標識符介紹與無排序生成序號的方法_MsSql
- 2022-08-16 在WPF中使用Interaction.Triggers_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支