tf.keras 用生成器读取图片数据+预处理

0. 需求

  • 当训练的数据非常多时,是不希望分配过多的内存将数据存入,否则其他占用内存的数据处理步骤就没法进行了。我们最好是以小批量地方式读入数据,然后预处理,然后送到网络,之后释放内存,以此循环。

1. 方法的简要说明

  • tf.keras中有一个高度封装的图片预处理类:ImageDataGenerator
  • ImageDataGenerator类还实现了一个非常方便的自动读取训练集文件夹的方法:flow_from_directory()
  • 我们实例化一个ImageDataGenerator类后,设置预处理的参数;然后对实例调用flow_from_directory()方法。对该方法传递一个路径参数,路径为数据集所在目录。其中训练集和测试集要分成两个文件夹,并且每一个label对应的图片存放在以label命名的文件夹中。
  • 调用flow_from_directory()方法之后,会返回一个生成器。
  • 生成器可以用next()函数来在每次迭代中提取(X,y),或者也可以直接传递给实例化的模型类的fit()方法

(使用前建议shift+tab查看函数|类的说明文档)

2. 案例: 斯坦福120个狗品种分类

(忽略训练结果,只是示例数据读取和预处理)

<代码及运行结果>

https://nbviewer.jupyter.org/github/JoJoJohnSnow/JPnotes/blob/master/notes/%E7%94%A8%E7%94%9F%E6%88%90%E5%99%A8%E8%AF%BB%E5%8F%96%E5%9B%BE%E7%89%87%E6%95%B0%E6%8D%AE%E5%92%8C%E9%A2%84%E5%A4%84%E7%90%86.ipynb

(不要介意图片中的狗看起来像个地精)

原文地址:https://www.cnblogs.com/mx0813/p/12670878.html

时间: 2024-11-02 14:11:33

tf.keras 用生成器读取图片数据+预处理的相关文章

iOS读取图片数据的两种方法:UIImageJPEG和UIImagePNG

UIImageJPEGRepresentation函数有两个参数:引用的图片和压缩系数. UIImagePNGRepresentation(UIImage * image)函数只有一个引用图片参数. UIImagePNGRepresentation(UIImage * image)要比UIImageJPEGPresentation(UIImage * image, 1.0)返回的图片数据量大很多,如果对图片清晰度要求不高,可以通过设置UIImageJPEGReprentation的第二个参数,大

不设置readable,读取图片数据

直接加载非Readable的Texture,是不能访问其像素数据的: // 加载 var tex = AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath); var data = tex.GetPixels(); 上面的代码汇报如下错误: the texture memory can not be accessed from scripts. You can make the texture readable in the Texture Im

读取图片的几种方式

读取图片的方式有以下几种: 1 . 从沙盒中获取图片  : 1>通过imageNamed:去加载,加载沙盒中.app包中的图片文件 第一次加载图片时,会去沙盒中读取此文件,然后系统会将此图片缓存到内存中 方便以后读取,以后再读取时,会从缓存中寻找(加快加载速度) 如果图片经常使用,可以采用此种方式       2>通过filePath手动读取图片: 每一次都要重新从沙盒中读取 如果图片特别大,而且图片不会经常使用,可以采用此种方式,节约内存 代码演示如下 : //1.imageNamed UI

将图片数据转化为TFRecord格式与读取

将图片数据转化为TFRecord格式与读取 一.问题情景描述 目录下有一个叫做"Original"的文件夹,文件夹里有十个子文件,分别命名为1,2···一直到10(为了做10轮取平均),这10个子文件夹里还有四个子文件夹,分别命名为"train0","train1","test0","test1".其中含义如其命名所示.这四个子文件夹里一共有若干张JPG格式图像数据.现欲将这份图像数据转化为TFRecord

Mapnik读取PostGIS数据渲染图片

__author__ = 'Administrator' # encoding: utf-8 import sys import datetime import mapnik m = mapnik.Map(256,256,"+proj=latlong +datum=WGS84") #m.background = mapnik.Color('steelblue') # set background colour to 'steelblue'. s = mapnik.Style() r =

机器学习之数据预处理,Pandas读取excel数据

Python读写excel的工具库很多,比如最耳熟能详的xlrd.xlwt,xlutils,openpyxl等.其中xlrd和xlwt库通常配合使用,一个用于读,一个用于写excel.xlutils结合xlrd可以达到修改excel文件目的.openpyxl可以对excel文件同时进行读写操作. 而说到数据预处理,pandas就体现除了它的强大之处,并且它还支持可读写多种文档格式,其中就包括对excel的读写.本文重点就是介绍pandas对excel数据集的预处理. 机器学习常用的模型对数据输入

『TensorFlow』TFR数据预处理探究以及框架搭建

TFRecord文件书写效率对比(单线程和多线程对比) 准备工作, # Author : Hellcat # Time : 18-1-15 ''' import os os.environ["CUDA_VISIBLE_DEVICES"]="-1" ''' import os import glob import numpy as np import tensorflow as tf import matplotlib.pyplot as plt np.set_pri

【tf.keras】在 cifar 上训练 AlexNet,数据集过大导致 OOM

cifar-10 每张图片的大小为 32×32,而 AlexNet 要求图片的输入是 224×224(也有说 227×227 的,这是 224×224 的图片进行大小为 2 的 zero padding 的结果),所以一种做法是将 cifar-10 数据集的图片 resize 到 224×224. 此时遇到的问题是,cifar-10 resize 到 224×224 时,32G 内存都将无法完全加载所有数据,在归一化那一步(即每个像素点除以 255)就将发生 OOM(out of memory)

总结一下用caffe跑图片数据的研究流程

最近在用caffe玩一些数据集,这些数据集是从淘宝爬下来的图片.主要是想研究一下对女性衣服的分类. 下面是一些具体的操作流程,这里总结一下. 1 爬取数据.写爬虫从淘宝爬取自己需要的数据. 2 数据预处理.将图片从jpg,png格式转为leveldb格式.因为caffe的输入层datalayer是从leveldb读取的.这一步自己基于caffe写了个工具实现转换. 转换命令例子: ./convert_imagedata.bin /home/linger/imdata/skirt_train/ /