返回顶部
首页 > 资讯 > 精选 >TensorFlow2的CNN图像分类方法是什么
  • 138
分享到

TensorFlow2的CNN图像分类方法是什么

2023-06-02 00:06:56 138人浏览 薄情痞子
摘要

这篇文章主要讲解了“Tensorflow2的CNN图像分类方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“TensorFlow2的CNN图像分类方法是什么”吧!  1. 导包  im

这篇文章主要讲解了“Tensorflow2的CNN图像分类方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“TensorFlow2的CNN图像分类方法是什么”吧!

  1. 导包

  import matplotlib.pyplot as plt

  import numpy as np

  import pandas as pd

  import tensorflow as tf

  from sklearn.preprocessing import StandardScaler

  from sklearn.model_selection import train_test_split

  2. 图像分类 fashion_mnist

  数据处理

  # 原始数据

  (X_train_all, y_train_all),(X_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()

  # 训练集、验证集拆分

  X_train, X_valid, y_train, y_valid = train_test_split(X_train_all, y_train_all, test_size=0.25)

  # 数据标准化,你也可以用除以255的方式实现归一化

  # 注意最后reshape中的1,代表图像只有一个channel,即当前图像是灰度图

  scaler = StandardScaler()

  X_train_scaled = scaler.fit_transfORM(X_train.reshape(-1, 28 * 28)).reshape(-1, 28, 28, 1)

  X_valid_scaled = scaler.transform(X_valid.reshape(-1, 28 * 28)).reshape(-1, 28, 28, 1)

  X_test_scaled = scaler.transform(X_test.reshape(-1, 28 * 28)).reshape(-1, 28, 28, 1)

  构建CNN模型

  model = tf.keras.models.Sequential()

  # 多个卷积层

  model.add(tf.keras.layers.Conv2D(filters=32, kernel_size=[5, 5], padding="same", activation="relu", input_shape=(28, 28, 1)))

  model.add(tf.keras.layers.MaxPool2D(pool_size=[2, 2], strides=2))

  model.add(tf.keras.layers.Conv2D(filters=64, kernel_size=[5, 5], padding="same", activation="relu"))

  model.add(tf.keras.layers.MaxPool2D(pool_size=[2, 2], strides=2))

  # 将前面卷积层得出的多维数据转为一维

  # 7和前面的kernel_size、padding、MaxPool2D有关

  # Conv2D: 28*28 -> 28*28 (因为padding="same")

  # MaxPool2D: 28*28 -> 14*14

  # Conv2D: 14*14 -> 14*14 (因为padding="same")

  # MaxPool2D: 14*14 -> 7*7

  model.add(tf.keras.layers.Reshape(target_shape=(7 * 7 * 64,)))

  # 传入全连接层

  model.add(tf.keras.layers.Dense(1024, activation="relu"))

  model.add(tf.keras.layers.Dense(10, activation="softmax"))

  # compile

  model.compile(loss = "sparse_cateGorical_crossentropy",

  optimizer = "sgd",

  metrics = ["accuracy"])

  模型训练

  callbacks = [

  tf.keras.callbacks.EarlyStopping(min_delta=1e-3, patience=5)

  ]

  history = model.fit(X_train_scaled, y_train, epochs=15,

  validation_data=(X_valid_scaled, y_valid),

  callbacks = callbacks)

  Train on 50000 samples, validate on 10000 samples

  Epoch 1/15

  50000/50000 [==============================] - 17s 343us/sample - loss: 0.5707 - accuracy: 0.7965 - val_loss: 0.4631 - val_accuracy: 0.8323

  Epoch 2/15

  50000/50000 [==============================] - 13s 259us/sample - loss: 0.3728 - accuracy: 0.8669 - val_loss: 0.3573 - val_accuracy: 0.8738

  ...

  Epoch 13/15

  50000/50000 [==============================] - 12s 244us/sample - loss: 0.1625 - accuracy: 0.9407 - val_loss: 0.2489 - val_accuracy: 0.9112

  Epoch 14/15

  50000/50000 [==============================] - 12s 240us/sample - loss: 0.1522 - accuracy: 0.9451 - val_loss: 0.2584 - val_accuracy: 0.9104

  Epoch 15/15

  50000/50000 [==============================] - 12s 237us/sample - loss: 0.1424 - accuracy: 0.9500 - val_loss: 0.2521 - val_accuracy: 0.9114

  作图

  def plot_learning_curves(history):

  pd.DataFrame(history.history).plot(figsize=(8, 5))

  plt.grid(True)

  #plt.GCa().set_ylim(0, 1)

  plt.show()

  plot_learning_curves(history)

  测试集评估准确率

  model.evaluate(X_test_scaled, y_test)

  [0.269884311157465, 0.9071]

  可以看到使用CNN后,图像分类的准确率明显提升了。之前的模型是0.8747,现在是0.9071。

  3. 图像分类 Dogs vs. Cats

  3.1 原始数据

  原始数据下载

  Kaggle: https://www.kaggle.com/c/dogs-vs-cats/

  百度网盘: Https://pan.baidu.com/s/13hw4LK8ihR6-6-8mpjLKDA 提取码 dmp4

  读取一张图片,并展示

  image_string = tf.io.read_file("C:/Users/Skey/Downloads/datasets/cat_vs_dog/train/cat.28.jpg")

  image_decoded = tf.image.decode_jpeg(image_string)

  plt.imshow(image_decoded)

  3.2 利用Dataset加载图片

  由于原始图片过多,我们不能将所有图片一次加载入内存。Tensorflow为我们提供了便利的Dataset api,可以从硬盘中一批一批的加载数据,以用于训练。

  处理本地图片路径与标签

  # 训练数据的路径

  train_dir = "C:/Users/Skey/Downloads/datasets/cat_vs_dog/train/"

  train_filenames = [] # 所有图片的文件名

  train_labels = [] # 所有图片的标签

  for filename in os.listdir(train_dir):

  train_filenames.append(train_dir + filename)

  if (filename.startswith("cat")):

  train_labels.append(0) # 将cat标记为0

  else:

  train_labels.append(1) # 将dog标记为1

  # 数据随机拆分郑州人流哪家医院做的好 http://www.csyhjlyy.com/

  X_train, X_valid, y_train, y_valid = train_test_split(train_filenames, train_labels, test_size=0.2)

  定义一个解码图片的方法

  def _decode_and_resize(filename, label):

  image_string = tf.io.read_file(filename) # 读取图片

  image_decoded = tf.image.decode_jpeg(image_string) # 解码

  image_resized = tf.image.resize(image_decoded, [256, 256]) / 255.0 # 重置size,并归一化

  return image_resized, label

  定义 Dataset,用于加载图片数据

  # 训练集

  train_dataset = tf.data.Dataset.from_tensor_slices((train_filenames, train_labels))

  train_dataset = train_dataset.map(

  map_func=_decode_and_resize, # 调用前面定义的方法,解析filename,转为特征和标签

  num_parallel_calls=tf.data.experimental.AUTOTUNE)

  train_dataset = train_dataset.shuffle(buffer_size=128) # 设置缓冲区大小

  train_dataset = train_dataset.batch(32) # 每批数据的量

  train_dataset = train_dataset.prefetch(tf.data.experimental.AUTOTUNE) # 启动预加载图片,也就是说CPU会提前从磁盘加载数据,不用等上一次训练完后再加载

  # 验证集

  valid_dataset = tf.data.Dataset.from_tensor_slices((valid_filenames, valid_labels))

  valid_dataset = valid_dataset.map(

  map_func=_decode_and_resize,

  num_parallel_calls=tf.data.experimental.AUTOTUNE)

  valid_dataset = valid_dataset.batch(32)

  3.3 构建CNN模型,并训练

  构建模型与编译

  model = tf.keras.Sequential([

  # 卷积,32个filter(卷积核),每个大小为3*3,步长为1

  tf.keras.layers.Conv2D(32, 3, activation='relu', input_shape=(256, 256, 3)),

  # 池化,默认大小2*2,步长为2

  tf.keras.layers.MaxPooling2D(),

  tf.keras.layers.Conv2D(32, 5, activation='relu'),

  tf.keras.layers.MaxPooling2D(),

  tf.keras.layers.Flatten(),

  tf.keras.layers.Dense(64, activation='relu'),

  tf.keras.layers.Dense(2, activation='softmax')

  ])

  model.compile(

  optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),

  loss=tf.keras.losses.sparse_categorical_crossentropy,

  metrics=[tf.keras.metrics.sparse_categorical_accuracy]

  )

  模型总览

  model.summary()

  Model: "sequential_1"

  _________________________________________________________________

  Layer (type) Output Shape Param #

  =================================================================

  conv2d_2 (Conv2D) (None, 254, 254, 32) 896

  _________________________________________________________________

  max_pooling2d_2 (MaxPooling2 (None, 127, 127, 32) 0

  _________________________________________________________________

  conv2d_3 (Conv2D) (None, 123, 123, 32) 25632

  _________________________________________________________________

  max_pooling2d_3 (MaxPooling2 (None, 61, 61, 32) 0

  _________________________________________________________________

  flatten_1 (Flatten) (None, 119072) 0

  _________________________________________________________________

  dense_2 (Dense) (None, 64) 7620672

  _________________________________________________________________

  dense_3 (Dense) (None, 2) 130

  =================================================================

  Total params: 7,647,330

  Trainable params: 7,647,330

  Non-trainable params: 0

  开始训练

  model.fit(train_dataset, epochs=10, validation_data=valid_dataset)

  由于数据量大,此处训练时间较久

  需要注意的是此处打印的step,每个step指的是一个batch(例如32个样本一个batch)

  模型评估

  test_dataset = tf.data.Dataset.from_tensor_slices((valid_filenames, valid_labels))

  test_dataset = test_dataset.map(_decode_and_resize)

  test_dataset = test_dataset.batch(32)

  print(model.metrics_names)

  print(model.evaluate(test_dataset))

感谢各位的阅读,以上就是“TensorFlow2的CNN图像分类方法是什么”的内容了,经过本文的学习后,相信大家对TensorFlow2的CNN图像分类方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: TensorFlow2的CNN图像分类方法是什么

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

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

猜你喜欢
  • TensorFlow2的CNN图像分类方法是什么
    这篇文章主要讲解了“TensorFlow2的CNN图像分类方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“TensorFlow2的CNN图像分类方法是什么”吧!  1. 导包  im...
    99+
    2023-06-02
  • 基于PyTorch实现一个简单的CNN图像分类器
    目录一. 加载数据1. 继承Dataset类并重写关键方法2. 使用Dataloader加载数据二. 模型设计三. 训练四. 测试结语 pytorch中文网:https://www....
    99+
    2024-04-02
  • PyTorch如何实现一个简单的CNN图像分类器
    这篇文章给大家分享的是有关PyTorch如何实现一个简单的CNN图像分类器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一. 加载数据Pytorch的数据加载一般是用torch.utils.data.Datase...
    99+
    2023-06-15
  • Vision Transformer图像分类模型是什么
    本篇内容介绍了“Vision Transformer图像分类模型是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Vision ...
    99+
    2023-07-05
  • matlab图像拼接的方法是什么
    在MATLAB中,图像拼接可以通过以下几种方法实现:1. 使用imresize函数对图像进行调整大小以使其具有相同的尺寸,然后使用i...
    99+
    2023-08-31
    matlab
  • Matlab图像处理的方法是什么
    Matlab提供了各种图像处理方法,包括但不限于以下几种:1. 基本图像处理方法:包括图像读取、保存、显示、调整亮度和对比度、裁剪、...
    99+
    2023-09-14
    Matlab
  • Matplotlib保存图像的方法是什么
    Matplotlib保存图像的方法是使用savefig()函数。savefig()函数可以将当前绘图窗口中的内容保存为图像文件,支持多种常见的图像格式,如PNG、JPEG、SVG等。本教程操作系统:windows10系统、Python3.1...
    99+
    2023-11-22
    Matplotlib 图像
  • tensorflow图像处理的方法是什么
    在TensorFlow中,图像处理的方法通常包括以下步骤: 加载图像数据:使用tf.io模块中的函数来加载图像数据,常见的函数包...
    99+
    2024-03-12
    tensorflow
  • docker镜像分层的方法是什么
    Docker镜像分层是通过使用Union文件系统(UnionFS)实现的。UnionFS是一种轻量级的...
    99+
    2023-09-16
    docker
  • matlab中显示图像的方法是什么
    在MATLAB中显示图像有两种常用的方法: 使用imshow函数:使用imshow函数可以快速显示图像,语法为imshow(I)...
    99+
    2024-03-15
    matlab
  • Pytorch中的图像增广transforms类和预处理方法是什么
    这篇文章主要讲解了“Pytorch中的图像增广transforms类和预处理方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pytorch中的图像增广transforms类和预处理方...
    99+
    2023-07-05
  • python图像数据处理的方法是什么
    Python图像数据处理的方法有很多,包括但不限于以下几种:1. 使用PIL(Python Imaging Library)库:PI...
    99+
    2023-09-20
    python
  • Python类方法和类方法静态方法分别是什么
    这篇文章主要讲解了“Python类方法和类方法静态方法分别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python类方法和类方法静态方法分别是什么”吧!一、前言类方法也可以进行更细致...
    99+
    2023-06-15
  • tensorflow+k-means聚类简单实现猫狗图像分类的方法
    目录一、前言二、k-means聚类三、图像分类一、前言 本文使用的是 kaggle 猫狗大战的数据集:https://www.kaggle.com/c/dogs-vs-cats/da...
    99+
    2024-04-02
  • Java捕获当前屏幕图像的方法是什么
    这篇文章主要讲解了“Java捕获当前屏幕图像的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java捕获当前屏幕图像的方法是什么”吧!import java.awt.*; impo...
    99+
    2023-06-03
  • excel分类汇总求和的方法是什么
    在Excel中,可以使用“分类汇总求和”的方法来对数据进行分类汇总并求和。以下是一种常见的方法:1. 在一个单元格中输入分类的名称(...
    99+
    2023-10-10
    excel
  • java的类方法是什么
    java的类方法也可称静态方法,是使用static修饰的类中方法;由于类方法是属于整个类的,所以类方法的方法体中不能有与类的对象有关的内容。即类方法体有如下限制: (推荐学习:java课程)类方法中不能引用对象变量;类方...
    99+
    2017-02-07
    java入门 java
  • Python绘制分类图的方法
    前言 遥感影像分类图一般为特定数值对应一类地物,用Python绘制时,主要在颜色的映射和对应的图例生成。 plt.matplotlib.colors.ListedColormap支持...
    99+
    2024-04-02
  • Java图片批量压缩像素的实现方法是什么
    Java图片批量压缩像素的实现方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。图片压缩大法为了防止用户流量的丢失,即使在5g 即将来临的情况下,压缩算法...
    99+
    2023-06-22
  • matlab运行结果生成图像保存的方法是什么
    在Matlab中,可以使用`saveas`函数将图像保存为指定格式的文件。以下是保存图像的一般步骤:1. 创建要保存的图像,例如使用...
    99+
    2023-09-13
    matlab
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作