广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Tensorflow 2.4加载处理图片的三种方式详解
  • 908
分享到

Tensorflow 2.4加载处理图片的三种方式详解

Tensorflow2.4 加载处理图片Tensorflow 加载 2022-11-21 22:11:44 908人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言数据准备使用内置函数读取并处理磁盘数据自定义方式读取和处理磁盘数据从网络上下载数据前言 本文通过使用 cpu 版本的 Tensorflow 2.4 ,介绍三种方式进行加载和预

前言

本文通过使用 cpu 版本的 Tensorflow 2.4 ,介绍三种方式进行加载和预处理图片数据。

这里我们要确保 tensorflow 在 2.4 版本以上 ,python 在 3.8 版本以上,因为版本太低有些内置函数无法使用,然后要提前安装好 pillow 和 tensorflow_datasets ,方便进行后续的数据加载和处理工作。

由于本文不对模型进行质量保证,只介绍数据的加载、处理过程,所以只将模型简单训练即可。

数据准备

首先我们先准备本文的图片数据,这里我们直接使用 tensorflow 的内置函数,从网络上面下载了一份花朵照片数据集,也可以直接用下面的链接使用迅雷下载。

数据目录里面包含 5 个子目录,每个子目录对应一个类,分别是雏菊、蒲公英、玫瑰、向日葵、郁金香,图片总共有 3670 张。

import pathlib
import numpy as np
import os
import PIL
import PIL.Image
import tensorflow as tf
import tensorflow_datasets as tfds
dataset_url = "https://storage.Googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file(origin=dataset_url, fname='flower_photos', untar=True)
data_dir = pathlib.Path(data_dir)
image_count = len(list(data_dir.glob('**'), shuffle=False)
datas = datas.shuffle(image_count, reshuffle_each_iteration=False)
val_size = int(image_count * 0.2)
train_datas = datas.skip(val_size)
val_datas = datas.take(val_size)

(3)对训练集和测试集中的每条数据都进行处理,获得最终的图片内容和对应的图片标签:

每张图片的标签,都是通过对每张图片的绝对路径中提取出来的,使用 \ 分隔符将绝对路径分割成列表,然后取倒数第二个字符串就是其类别标签,并将其转换成 one-hot 向量

每张图片的内容都是通过加载绝对路径,将加载出来的图片内容像素进行指定 height、width 的大小调整进行变化的

  def get_label(file_path):
      parts = tf.strings.split(file_path, os.path.sep)
      return tf.argmax(parts[-2] == class_names)
  def decode_img(img):
      return tf.image.resize(tf.io.decode_jpeg(img, channels=3), [height, width])
  def process_path(file_abs_path):
      label = get_label(file_abs_path)
      img = decode_img(tf.io.read_file(file_abs_path))
      return img, label
  train_datas = train_datas.map(process_path, num_parallel_calls=AUTOTUNE)
  val_datas = val_datas.map(process_path, num_parallel_calls=AUTOTUNE)

(4)将获得的测试集和训练集通过 cache() 保存于内存中,并同样使用 prefetch() 提前加载要使用的数据,使用 shuffle() 将数据进行打散,使用 batch() 每次获取 batch_size 个样本。

(5)使用训练数据训练 5 个 epoch ,并使用验证集进行指标评估 。由于 model 已经被上面的数据进行过训练,所以这里训练过程中从一开始就能看出来 val_accuracy较高。

def configure_for_perfORMance(ds):
    ds = ds.cache().prefetch(buffer_size=AUTOTUNE)
    ds = ds.shuffle(buffer_size=1000).batch(batch_size)
    return ds
train_datas = configure_for_performance(train_datas)
val_datas = configure_for_performance(val_datas)
model.fit( train_datas, validation_data=val_datas, epochs=5 )

结果输出:

Epoch 1/5
92/92 [==============================] - 11s 118ms/step - loss: 0.1068 - accuracy: 0.9680 - val_loss: 0.1332 - val_accuracy: 0.9537
Epoch 2/5
92/92 [==============================] - 10s 113ms/step - loss: 0.0893 - accuracy: 0.9721 - val_loss: 0.0996 - val_accuracy: 0.9673
...
Epoch 5/5
92/92 [==============================] - 10s 112ms/step - loss: 0.0328 - accuracy: 0.9939 - val_loss: 0.1553 - val_accuracy: 0.9550

从网络上下载数据

上面的两个方式都是从本地读取磁盘数据,除此之外我们还可以通过网络来获取数据并进行处理,tfds 中为我们准备了很多种类的数据,包括音频、文本、图片、视频、翻译等数据,通过内置函数 tfds.load 从网络上即可下载指定的数据,这里我们从网络上下载了 tf_flowers 数据,其实就是我们上面用到的磁盘中的花朵磁盘数据数据。

(train_datas, val_datas, test_datas), metadata = tfds.load(  'tf_flowers', split=['train[:70%]', 'train[70%:90%]', 'train[90%:]'], with_info=True, as_supervised=True)
train_datas = configure_for_performance(train_datas)
val_datas = configure_for_performance(val_datas)
test_datas = configure_for_performance(test_datas)

加载出来数据之后,后面处理的方式可以自行选择,和上面的两种大同小异。

以上就是Tensorflow 2.4加载处理图片的三种方式详解的详细内容,更多关于Tensorflow 加载处理图片的资料请关注编程网其它相关文章!

--结束END--

本文标题: Tensorflow 2.4加载处理图片的三种方式详解

本文链接: https://www.lsjlt.com/news/173341.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作