目录

基础理论

1、sigmoid激活函数

2、聚类&&分类

一、准备数据

1、创建两个数据生成器

2、创建训练数据与测试数据生成器

训练数据生成器

测试数据生成器

二、构建神经网络

三、编译、训练

四、预测(单图预测)

1、待预测图像处理

1-1、读取图像

1-2、BGR转RGB

1-3、显示图像

2、图像数据转换

3、预测

总代码


基础理论

1、sigmoid激活函数

由于是二分类,所以最后会用到sigmoid激活函数(0、1两值)

2、聚类&&分类

        聚类(Clustering):是指把相似的数据划分到一起具体划分的时候并不关心这一类的标签,目标就是把相似的数据聚合到一起,聚类是一种无监督学习(Unsupervised Learning)方法。

(聚类:不按标签把相似数据聚合到一起)

        分类(Classification):是把不同的数据划分开,其过程是通过训练数据集获得一个分类器,再通过分类器去预测未知数据,分类是一种监督学习(Supervised Learning)方法。

一、准备数据

数据下载地址:

https://storage.googleapis.com/laurencemoroney-blog.appspot.com/horse-or-human.zip \
    -O /tmp/horse-or-human.zip

# 1、准备数据
from tensorflow.keras.preprocessing.image import ImageDataGenerator

1、创建两个数据生成器

# 1-1、创建两个数据生成器
train_data_gen = ImageDataGenerator(rescale=1/255)
test_data_gen = ImageDataGenerator(rescale=1/255)

2、创建训练数据与测试数据生成器

训练数据生成器

# 训练数据生成器(指向训练数据文件夹)
train_generator = train_data_gen.flow_from_directory('D:\\Study\\AI\\OpenCV\\horse-human-data\\horse-or-human',target_size = (150,150), batch_size = 32, class_mode = 'binary'
#   目标大小                  一批的数量         二分类
)

测试数据生成器

# 测试数据生成器(指向测试数据文件夹)
test_generator = test_data_gen.flow_from_directory('D:\\Study\\AI\\OpenCV\\horse-human-data\\validation-horse-or-human',target_size = (150,150), batch_size = 32, class_mode = 'binary'
)

二、构建神经网络

# 2、构建神经网络
import tensorflow as tf
from tensorflow.keras.optimizers import RMSprop# 神经网络模型
model = tf.keras.models.Sequential([# 第一层CNNtf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(150, 150, 3)),tf.keras.layers.MaxPooling2D(2, 2),# 第二层CNNtf.keras.layers.Conv2D(32, (3,3), activation='relu'),tf.keras.layers.MaxPooling2D(2,2),# 第三层CNNtf.keras.layers.Conv2D(64, (3,3), activation='relu'),tf.keras.layers.MaxPooling2D(2,2),# 第四层CNNtf.keras.layers.Conv2D(64, (3,3), activation='relu'),tf.keras.layers.MaxPooling2D(2,2),# 第五层CNNtf.keras.layers.Conv2D(64, (3,3), activation='relu'),tf.keras.layers.MaxPooling2D(2,2),# 输入层tf.keras.layers.Flatten(),# 隐层tf.keras.layers.Dense(512, activation='relu'),# 输出层:用sigmoid激活函数二分类(只有一个神经元,结果只有0和1,分别对应人和马)tf.keras.layers.Dense(1, activation='sigmoid')
])
# 可视化
model.summary()

Model: "sequential_3" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_15 (Conv2D) (None, 148, 148, 16) 448 _________________________________________________________________ max_pooling2d_15 (MaxPooling (None, 74, 74, 16) 0 _________________________________________________________________ conv2d_16 (Conv2D) (None, 72, 72, 32) 4640 _________________________________________________________________ max_pooling2d_16 (MaxPooling (None, 36, 36, 32) 0 _________________________________________________________________ conv2d_17 (Conv2D) (None, 34, 34, 64) 18496 _________________________________________________________________ max_pooling2d_17 (MaxPooling (None, 17, 17, 64) 0 _________________________________________________________________ conv2d_18 (Conv2D) (None, 15, 15, 64) 36928 _________________________________________________________________ max_pooling2d_18 (MaxPooling (None, 7, 7, 64) 0 _________________________________________________________________ conv2d_19 (Conv2D) (None, 5, 5, 64) 36928 _________________________________________________________________ max_pooling2d_19 (MaxPooling (None, 2, 2, 64) 0 _________________________________________________________________ flatten_3 (Flatten) (None, 256) 0 _________________________________________________________________ dense_6 (Dense) (None, 512) 131584 _________________________________________________________________ dense_7 (Dense) (None, 1) 513 ================================================================= Total params: 229,537 Trainable params: 229,537 Non-trainable params: 0 _________________________________________________________________

三、编译、训练

# 3、编译&&训练
model.compile(loss='binary_crossentropy', optimizer=RMSprop(lr=0.001), metrics=['acc'])
model.fit(train_generator, epochs=5, validation_data=test_generator)
#         训练集            迭代次数   测试集
Epoch 1/10
33/33 [==============================] - 18s 544ms/step - loss: 0.5144 - acc: 0.7420 - val_loss: 0.6703 - val_acc: 0.8438
Epoch 2/10
33/33 [==============================] - 18s 548ms/step - loss: 0.1962 - acc: 0.9299 - val_loss: 0.7632 - val_acc: 0.8594
Epoch 3/10
33/33 [==============================] - 18s 558ms/step - loss: 0.1640 - acc: 0.9445 - val_loss: 0.7594 - val_acc: 0.8594
Epoch 4/10
33/33 [==============================] - 18s 551ms/step - loss: 0.0940 - acc: 0.9640 - val_loss: 1.0639 - val_acc: 0.8398
Epoch 5/10
33/33 [==============================] - 18s 544ms/step - loss: 0.0851 - acc: 0.9747 - val_loss: 1.4272 - val_acc: 0.8633
Epoch 6/10
33/33 [==============================] - 18s 551ms/step - loss: 0.0774 - acc: 0.9698 - val_loss: 1.0516 - val_acc: 0.8516
Epoch 7/10
33/33 [==============================] - 19s 562ms/step - loss: 0.0113 - acc: 0.9981 - val_loss: 2.2403 - val_acc: 0.7734
Epoch 8/10
33/33 [==============================] - 18s 549ms/step - loss: 0.0689 - acc: 0.9786 - val_loss: 1.3702 - val_acc: 0.8672
Epoch 9/10
33/33 [==============================] - 18s 549ms/step - loss: 0.0043 - acc: 1.0000 - val_loss: 2.0496 - val_acc: 0.8594
Epoch 10/10
33/33 [==============================] - 18s 556ms/step - loss: 0.0572 - acc: 0.9873 - val_loss: 1.8541 - val_acc: 0.8633

[12]:

<tensorflow.python.keras.callbacks.History at 0x7fa1b05ddcd0>

四、预测(单图预测)

1、待预测图像处理

1-1、读取图像

import cv2
import matplotlib.pyplot as plt
import numpy as np# (1) 读取图像
# img1:马    img2:人
img1 = cv2.imread('tensorflow_datasets/validation-horse-or-human/horses/horse1-000.png')
img1 = cv2.resize(img1, (150, 150))
img2 = cv2.imread('tensorflow_datasets/validation-horse-or-human/humans/valhuman01-01.png')
img2 = cv2.resize(img2, (150, 150))

1-2、BGR转RGB

BGR转RGB(opencv的色彩空间是BGR,plt色彩空间是RGB)
# (2) BGR转RGB
# OpenCV中图片像素按照BGR方式排列;而Matpoltlib中图片按照RGB方式排序
b,g,r = cv2.split(img1)    #分离
img1 = cv2.merge([r,g,b])  #合并
b,g,r = cv2.split(img2)    #分离
img2 = cv2.merge([r,g,b])  #合并

1-3、显示图像

# (3) 显示图像
f, ax = plt.subplots(1, 2)
ax[0].imshow(img1)
ax[0].set_title("0")
ax[1].imshow(img2)
ax[1].set_title("1")
plt.show()

如果不进行BGR转RGB的操作,就会出现这样色彩错乱的情况:

 (来自冥界的人马

2、图像数据转换

这里model.predict()的预测需要更高维度的图像数据,进行一下转换。

# 图像转数据(用来做预测)
Img1 = np.expand_dims(img1, axis=0)    #转三维数据(二维转三维)
Img2 = np.expand_dims(img2, axis=0)    #转三维数据(二维转三维)

img:

Img:

3、预测

# 4、预测(分别对两个图进行预测)
for i in range(2):if i==0:# 对图像1做预测classes = model.predict(Img1, batch_size=10)print(f'{i}号图片预测结果为:', int(classes[0][0]), '马')elif i==1:# 对图像2做预测classes = model.predict(Img2, batch_size=10)print(f'{i}号图片预测结果为:', int(classes[0][0]), '人')

总代码

# 1、准备数据
from tensorflow.keras.preprocessing.image import ImageDataGenerator# 1-1、创建两个数据生成器
train_data_gen = ImageDataGenerator(rescale=1/255)
test_data_gen = ImageDataGenerator(rescale=1/255)# 1-2、创建训练数据与测试数据生成器
# 训练数据生成器(指向训练数据文件夹)
train_generator = train_data_gen.flow_from_directory('tensorflow_datasets/horse-or-human/',target_size = (150,150), batch_size = 32, class_mode = 'binary'
#   目标大小                  一批的数量         二分类
)# 测试数据生成器(指向测试数据文件夹)
test_generator = test_data_gen.flow_from_directory('tensorflow_datasets/validation-horse-or-human/',target_size = (150,150), batch_size = 32, class_mode = 'binary'
)# 2、构建神经网络
import tensorflow as tf
from tensorflow.keras.optimizers import RMSprop# 神经网络模型
model = tf.keras.models.Sequential([# 第一层CNNtf.keras.layers.Conv2D(16, (3, 3), activation='relu', input_shape=(150, 150, 3)),tf.keras.layers.MaxPooling2D(2, 2),# 第二层CNNtf.keras.layers.Conv2D(32, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),# 第三层CNNtf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),# 第四层CNNtf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),# 第五层CNNtf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),# 输入层tf.keras.layers.Flatten(),# 隐层tf.keras.layers.Dense(512, activation='relu'),# 输出层:用sigmoid激活函数二分类(只有一个神经元,结果只有0和1,分别对应人和马)tf.keras.layers.Dense(1, activation='sigmoid')
])
# 可视化
model.summary()# 3、编译&&训练
model.compile(loss='binary_crossentropy', optimizer=RMSprop(lr=0.001), metrics=['acc'])
model.fit(train_generator, epochs=10, validation_data=test_generator)
#         训练集            迭代次数   测试集# 4、预测
import cv2
import matplotlib.pyplot as plt
import numpy as np# (1) 读取图像
# img1:马    img2:人
img1 = cv2.imread('tensorflow_datasets/validation-horse-or-human/horses/horse1-000.png')
img1 = cv2.resize(img1, (150, 150))
img2 = cv2.imread('tensorflow_datasets/validation-horse-or-human/humans/valhuman01-01.png')
img2 = cv2.resize(img2, (150, 150))# (2) BGR转RGB
# OpenCV中图片像素按照BGR方式排列;而Matpoltlib中图片按照RGB方式排序
b,g,r = cv2.split(img1)    #分离
img1 = cv2.merge([r,g,b])  #合并
b,g,r = cv2.split(img2)    #分离
img2 = cv2.merge([r,g,b])  #合并# (3) 显示图像
f, ax = plt.subplots(1, 2)
ax[0].imshow(img1)
ax[1].imshow(img2)
plt.show()# 图像转数据(用来做预测)
Img1 = np.expand_dims(img1, axis=0)    #转三维数据(二维转三维)
Img2 = np.expand_dims(img2, axis=0)    #转三维数据(二维转三维)# 4、预测(分别对两个图进行预测)
for i in range(2):if i==0:# 对图像1做预测classes = model.predict(Img1, batch_size=10)print(f'{i}号图片预测结果为:', int(classes[0][0]), '马')elif i==1:# 对图像2做预测classes = model.predict(Img2, batch_size=10)print(f'{i}号图片预测结果为:', int(classes[0][0]), '人')

TensorFlow(9)(项目)人马图像分类(卷积神经网络)相关推荐

  1. 通过 Tensorflow 的基础类,构建卷积神经网络,用于花朵图片的分类

    实验目的 通过 Tensorflow 的基础类,构建卷积神经网络,用于花朵图片的分类. 实验环境 import tensorflow as tfprint(tf.__version__) output ...

  2. tensorflow lstm 预测_图卷积神经网络GCN与递归结构RNN相结合的时间序列预测

    时间序列预测任务可以按照不同的方法执行.最经典的是基于统计和自回归的方法.更准确的是基于增强和集成的算法,我们必须使用滚动周期生成大量有用的手工特性.另一方面,我们可以使用在开发过程中提供更多自由的神 ...

  3. TensorFlow 教程 --教程--2.6卷积神经网络

    注意: 本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验. 概述 对CIFAR-10 数据集的分类是机器学习中一个公开的基准测试问题,其任务是对一组32 ...

  4. 【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络

    TensorFlow直接以官方手册作为切入点,在趣味性和快速性上优势很大,但是对于学习深入理论的理解产生了巨大的阻碍. 在"深入MNIST"这一节中,遇到了卷积神经网络的构建,涉及 ...

  5. keras构建卷积神经网络_在python中使用tensorflow s keras api构建卷积神经网络的初学者指南...

    keras构建卷积神经网络 初学者的深度学习 (DEEP LEARNING FOR BEGINNERS) Welcome to Part 2 of the Neural Network series! ...

  6. tensorflow机器学习之利用CNN卷积神经网络进行面部表情识别的实例代码

    本例通过 TensorFlow 构造卷积神经网络,做表情识别的测试. 输入数据可以从http://download.csdn.net/user/shinian1987上下载FER-2013 这个数据库 ...

  7. 人工智能实践:Tensorflow笔记 Class 5:卷积神经网络

    目录 5.1 卷积计算过程 5.2 感受野 5.3 全零填充 ​5.4 TF描述卷积计算层 5.5 批标准化 5.6 池化 ​5.7 舍弃 5.8 卷积神经网络 5.9 CIFAR10数据集 5.10 ...

  8. Tensorflow入门到实战五(卷积神经网络)

    方法定义 tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=No ...

  9. Tensorflow系列 | TensorFlowNews五大经典卷积神经网络介绍

    编译 | fendouai 编辑 | 安可 [导读]:这个系列文章将会从经典的卷积神经网络历史开始,然后逐个讲解卷积神经网络结构,代码实现和优化方向.下一篇文章将会是 LeNet 卷积神经网络结构,代 ...

  10. TensorFlow 高级之二 (卷积神经网络手写字体识别)

    文章目录 一.数据集获取 二.数据感知与处理 2.1 导包 2.2 导入数据 2.3 把标签转换为one-hot格式 2.4. 数据维度 2.5. 打印部分样例图片 三.创建神经网络 3.1 定义网络 ...

最新文章

  1. Python组合数据类型之序列类型
  2. python print 不能立即打印输出 解决方法
  3. windows、linux下命令行登录oracle数据库方法,查询sga参数值sql语句
  4. 【渗透测试】初探进程伪装
  5. html5 网页宽度100,HTML5 Canvas 100%视口宽度?
  6. Java中用三种方法输出字符串_java中两个字符串连接的三种方法
  7. 矩池云上安装 NVCaffe教程
  8. 我爱刷题系列汇总(51-100)【2017.11.24-2018.01.12】
  9. mongodb之使用explain和hint性能分析和优化
  10. FFplay硬件加速
  11. 新视野大学英语视听说听力:passage12原文及答案(前四单元)
  12. 系统软件的成本构成与测算方式
  13. 华为OD 社招(Java后端)一面
  14. 顾客细分(Customer Segmentation)(转载)
  15. 如何关闭打开文件安全警告
  16. 入门php学习 -- 学生信息系统
  17. java程序性能优化(实例)
  18. win7计算机限制不能安装,win7怎么禁止安装软件_windows7禁止安装软件的方法
  19. 对不同的人说不同的话的职场口才分享
  20. crc16 ccitt的详细标准及其出处

热门文章

  1. Thread start()方法和run()方法的区别
  2. Android 使用 ADB 命令录制屏幕上的视频
  3. 多媒体音量条显示异常跳动
  4. [转载]Surging 分布式微服务框架使用入门
  5. 使用 vue filters过滤器直接显示 几分钟前 几小时前 几天前
  6. Showstopper [POJ3484] [二分] [思维]
  7. 2022-2028年中国微机电系统(MEMS)行业投资分析及前景预测报告
  8. 十五天精通WCF——第六天 你必须要了解的3种通信模式
  9. Centos安装GD库
  10. 一个较为详细的ETL系统实现方案