深度学习-tensorflow对花的品种进行分类

深度学习-对花的品种进行分类
这里会展示如何对花的图像进行分类 。它使用keras创建一个图像分类器 。顺序模型,并使用预处理.加载数据 。
主要的流程就是加载数据集 。识别过拟合并应用技术来减轻它,包括数据扩充和 。
基本的机器学习流程:
检查和理解数据
构建输入管道
构建模型
训练模型
测试模型
改进模型并重复此过程
导入和其他库
import matplotlib.pyplot as pltimport numpy as npimport osimport PILimport tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layersfrom tensorflow.keras.models import Sequential
下载数据
下载并浏览数据集
本教程使用了大约3700张鲜花照片的数据集 。数据集包含5个子目录,每个类一个:
import pathlibdataset_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 = pathlib.Path(data_dir)
下载之后,您现在应该有一个可用的数据集副本 。总共有3670张图片:
image_count = len(list(data_dir.glob('*/*.jpg')))print(image_count)
如果执行上面的程序后,就会得到3670
接下来我们可以看下我们下载的数据里面有什么图片,我们任意选几张来看下 。
roses = list(data_dir.glob('roses/*'))PIL.Image.open(str(roses[0]))
PIL.Image.open(str(roses[1]))
tulips = list(data_dir.glob('tulips/*'))PIL.Image.open(str(tulips[0]))
PIL.Image.open(str(tulips[1]))
负载使用keras.
使用有用的实用程序将这些图像从磁盘上加载下来 。这将把从磁盘上的图像目录到一个tf.data.只需几行代码 。如果愿意,还可以通过访问加载图像教程从头编写自己的数据加载代码 。
创建一个数据集
为加载器定义一些参数:
batch_size = 32img_height = 180img_width = 180
在开发模型时使用验证分割是一个很好的实践 。我们使用80%的图像进行训练,20%进行验证 。
train_ds = tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split=0.2,subset="training",seed=123,image_size=(img_height, img_width),batch_size=batch_size)
你可以看到跑出这样子的结果

深度学习-tensorflow对花的品种进行分类

文章插图
val_ds = tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split=0.2,subset="validation",seed=123,image_size=(img_height, img_width),batch_size=batch_size)
Found 3670 filesto 5 .
Using 734 files for .
可以在这些数据集中的属性中找到类名 。这些按字母顺序对应目录名 。
class_names = train_ds.class_namesprint(class_names)
可视化数据
以下是来自训练数据集的前9张图片 。
import matplotlib.pyplot as pltplt.figure(figsize=(10, 10))for images, labels in train_ds.take(1):for i in range(9):ax = plt.subplot(3, 3, i + 1)plt.imshow(images[i].numpy().astype("uint8"))plt.title(class_names[labels[i]])plt.axis("off")