如何使用Python将Tensorflow用于标准化数据

如何使用Python将Tensorflow用于标准化数据

在这篇文章中,我们将看到如何在Python中使用Tensorflow对数据进行标准化。

什么是数据标准化

将各种数据集的组织结构转换为单一的、标准的数据格式的过程被称为数据标准化。它涉及到数据集从各种来源收集后,在加载到目标系统之前的修改。它需要大量的时间和迭代来完成,导致极其准确、高效、耗时的整合和开发工作。

如何利用Tensorflow来实现数据的标准化

我们正在使用鲜花数据集来了解如何使用Python将Tensorflow用于标准化数据。该花卉数据集包含了几千张有正确命名的花卉图片。在其五个子目录中,每个类都有一个子目录。花卉数据集在使用’get_file’方法下载后将被加载到环境中使用。
现在,让我们试着了解如何下载花的数据集,但在下载之前,我们需要导入一些python库,为了运行下面的代码,我们使用Google Collaborate。

导入库

在第一步中,我们导入一些重要的tensorflow和python库,这些库将在进一步的过程中使用。

import matplotlib.pyplot as plt
import numpy as np
import os
import PIL
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
import pathlib as pt

下载数据集

我们正在使用一个Flower数据集,它包含五个子目录,每个类都有一个。因此,为了使用该数据集,我们需要先下载它。

dataset_url = "https://storage.googleapis.com/\
download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file('flower_photos', 
                                   origin=dataset_url, 
                                   untar=True)
data_dir = pt.Path(data_dir)

你现在应该有一份下载后的数据集的副本。总共有3670张图片。你可以通过使用下面的代码来计算数据集上的图片。

img_count = len(list(data_dir.glob('*/*.jpg')))
print(img_count)

输出:

3670

在数据集中,我们有5类花可供选择,包括玫瑰花、郁金香、雏菊、蒲公英和向日葵。

roses = list(data_dir.glob('roses/*'))
PIL.Image.open(str(roses[0]))

加载数据集

为了加载数据集,你需要为加载器定义一些参数。现在,我们需要分割数据集,默认情况下,我们使用60%的花卉数据集作为训练,40%用于测试。

batch_size = 32
img_height = 180
img_width = 180
  
train_ds = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.4,
    subset="training",
    seed=123,
    image_size=(img_height, img_width),
    batch_size=batch_size)

输出:

Found 3670 files belonging to 5 classes.
Using 2202 files for training.

将数据集标准化

RGB通道的数值在0到255之间。这对神经网络来说并不理想;一般来说,尽量保持你的输入值最小。

我们可以通过使用重新缩放层(tensorflow.keras.layer.Rescaling)将数值标准化,使其落在[0, 1]之间。

# create normalization layer
nrmzln_layer = layers.experimental.preprocessing.Rescaling(1./255)
  
print("The map function is used to apply \
this layer to the dataset. ")
nrmlztn_ds = train_ds.map(lambda x,
                          y: (nrmlztn_layer(x), y))
image_batch, labels_batch = next(iter(nrmlztn_ds))
  
first_image = image_batch[0]
  
# pixel values are in the range of [0,1].
print("minimum pixel value:", np.min(first_image),
      " maximum pixel value:", np.max(first_image))

输出:

The map function is used to apply this layer to the dataset. 

minimum pixel value: 0.0

maximum pixel value: 0.87026095

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程