【2】TensorFlow光速入门-数据预处理(得到数据集)

时间:2021-05-24 10:44:02

本文地址:https://www.cnblogs.com/tujia/p/13862351.html

系列文章:

【0】TensorFlow光速入门-序

【1】TensorFlow光速入门-tensorflow开发基本流程

【2】TensorFlow光速入门-数据预处理(得到数据集)

【3】TensorFlow光速入门-训练及评估

【4】TensorFlow光速入门-保存模型及加载模型并使用

【5】TensorFlow光速入门-图片分类完整代码

【6】TensorFlow光速入门-python模型转换为tfjs模型并使用

【7】TensorFlow光速入门-总结

一、数据来源

数据来源可以是自己业务原有数据或下载的开源数据或爬虫捉取的第三方数据,需要训练怎样的模型的准备什么样的数据。

例如:图片分类就需要自己准备不同分类的图片,按分类命名文件夹(这样方便读取)

二、导入数据(省时间可以直接跳过,看第三步就好

1)准备数据

已经下载好,分类保存好图片,我们先要导入到开发环境里,如果你图片已经准备好,那就可以跳过这一步了

这是我要做的一个表非表的二分类模型的数据:

【2】TensorFlow光速入门-数据预处理(得到数据集)

我把它打包为 wnw.zip,然后放在本地的web环境根目录下

【2】TensorFlow光速入门-数据预处理(得到数据集)

2)导入数据

打开 jupyter 的终端

【2】TensorFlow光速入门-数据预处理(得到数据集)   【2】TensorFlow光速入门-数据预处理(得到数据集)

注:也可以用 jupyter 里的界面来操作创建目录或上传文件,不过解压还是得用终端。使用其他方法上传图片也行,条条道路通罗马,只要把数据上传到可读取目录里就行

三、数据预处理

下面以图片分类为例子,看一下怎么预处理数据

注:需要说明的是,不同模型需要的输入数据是不一样的,这里主要学习数据的读取和处理方法,其他模型自己举一反三就好

1)首先先导入需要用到的包

import pathlib
import random
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

2)读取文件夹图片数据

data_path = '/tf/datasets/wnw'
all_image_paths = []
all_image_labels = []
label_names = []
data_root = pathlib.Path(data_path)
i = 0
for item in data_root.iterdir():
label_names.append(item.name)
for image in item.iterdir():
all_image_paths.append(str(image))
all_image_labels.append(i)
i = i + 1
print(label_names)
print(len(all_image_paths))
print(len(all_image_labels))

运行结果:

【2】TensorFlow光速入门-数据预处理(得到数据集)

3)图片数据集

处理图片数据成tensor(张量)数据

def load_and_preprocess_image(path):
# 文件 转 tensor
image = tf.io.read_file(path)
# 普通 tensor 转 图片tensor,channels 为颜色通道,1表示灰图
image = tf.image.decode_jpeg(image, channels=1)
# 缩放图片尺寸为 100*100
image = tf.image.resize(image, [100, 100])
# 颜色的数值范围是0-255,所以 image/255,进一步将图片tensor数据数值范围缩到 0-1
image /= 255
return image
# 图片路径列表直接转数据集
path_ds = tf.data.Dataset.from_tensor_slices(all_image_paths)
# 把路径数据转成图片tensor数据
image_ds = path_ds.map(load_and_preprocess_image, num_parallel_calls=tf.data.experimental.AUTOTUNE)

4)label 数据集

label_ds = tf.data.Dataset.from_tensor_slices(tf.cast(all_image_labels, tf.int64))

5)将图片数据集和标签数据集压缩打包一下

image_label_ds = tf.data.Dataset.zip((image_ds, label_ds))

6)打乱数据

image_count = len(all_image_paths)
ds = image_label_ds.shuffle(buffer_size=image_count)
ds = ds.repeat()
ds = ds.batch(32)
ds = ds.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
print(ds)

注:为了文章更易读,我省略了一些查看图片、数据验证的操作,详细教程可以看这里:https://tensorflow.google.cn/tutorials/load_data/images

重点 Api :

tf.io.read_file           https://tensorflow.google.cn/api_docs/python/tf/io/read_file

tf.image.decode_image             https://tensorflow.google.cn/api_docs/python/tf/io/decode_jpeg

tf.image.resize                           https://tensorflow.google.cn/api_docs/python/tf/image/resize

tf.data.Dataset.from_tensor_slices            https://tensorflow.google.cn/api_docs/python/tf/data/Dataset#from_tensor_slices

tf.data.Dataset.map              https://tensorflow.google.cn/api_docs/python/tf/data/Dataset#map

tf.data.Dataset.zip               https://tensorflow.google.cn/api_docs/python/tf/data/Dataset#zip

下一节,我们来说说,如果用这个准备好的数据集来训练及评估其准确性

【3】TensorFlow光速入门-训练及评估

本文链接:https://www.cnblogs.com/tujia/p/13862351.html


完。