深度学习使用Python进行卷积神经网络的图像分类教程

好的,这次我将使用python编写如何使用卷积神经网络(CNN)进行图像分类。我希望你事先已经阅读并理解了卷积神经网络(CNN)的基本概念,这里我只讨论步骤,而不讨论卷积神经网络(CNN)中使用的术语...

我们将尝试对汽车和摩托车这两个类别进行分类。我们使用的训练数据数量是470个,用于测试/验证的数据是30个。

在我们开始之前......像这样做一个文件夹安排

Image classification

----data

--------test_image

--------train

--------test

----training.py

----test.py

示例数据集下载地址:http://www.kankanyun.com/data/data.rar

训练

第一步是导入所需的Python包:

import sys import os from keras.preprocessing.image import ImageDataGenerator from keras import optimizers from keras.models import Sequential from keras.layers import Dropout, Flatten, Dense, Activation from keras.layers.convolutional import Convolution2D, MaxPooling2D from keras import callbacks import time

导入包后,下一步是确定我们用于训练的epochs数。接下来设置训练和测试目录,Python代码如下:

DEV = Falseargvs = sys.argvargc = len(argvs)if argc > 1 and (argvs[1] == "--development" or argvs[1] == "-d"): DEV = Trueif DEV: epochs = 2else: epochs = 30train_data_path = 'data/train'validation_data_path = 'data/test'

接下来是设置深度学习模型参数,Python代码如下:

"""Parameters"""img_width, img_height = 150, 150batch_size = 32samples_per_epoch = 1000validation_steps = 300nb_filters1 = 32nb_filters2 = 64conv1_size = 3conv2_size = 2pool_size = 2classes_num = 2lr = 0.0004

接下来的部分决定是卷积神经网络(CNN)的架构,我们将使用的Python代码如下:

model = Sequential()model.add(Convolution2D(nb_filters1, conv1_size, conv1_size, border_mode ="same", input_shape=(img_width, img_height, 3)))model.add(Activation("relu"))model.add(MaxPooling2D(pool_size=(pool_size, pool_size)))model.add(Convolution2D(nb_filters2, conv2_size, conv2_size, border_mode ="same"))model.add(Activation("relu"))model.add(MaxPooling2D(pool_size=(pool_size, pool_size), dim_ordering='th'))model.add(Flatten())model.add(Dense(256))model.add(Activation("relu"))model.add(Dropout(0.5))model.add(Dense(classes_num, activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer=optimizers.RMSprop(lr=lr), metrics=['accuracy'])

上面的Python代码显示了CNN模型的体系结构。本文使用卷积神经网络(CNN)模型,具有2个卷积层和2个池化层。确定CNN架构和参数值很重要,这对训练模型的准确性非常有影响。

接下来的部分是查看图表并执行保存深度学习模型,Python代码如下:

train_datagen = ImageDataGenerator( rescale=1. / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)test_datagen = ImageDataGenerator(rescale=1. / 255)train_generator = train_datagen.flow_from_directory( train_data_path, target_size=(img_height, img_width), batch_size=batch_size, class_mode='categorical')validation_generator = test_datagen.flow_from_directory( validation_data_path, target_size=(img_height, img_width), batch_size=batch_size, class_mode='categorical')"""Tensorboard log"""log_dir = './tf-log/'tb_cb = callbacks.TensorBoard(log_dir=log_dir, histogram_freq=0)cbks = [tb_cb]model.fit_generator( train_generator, samples_per_epoch=samples_per_epoch, epochs=epochs, validation_data=validation_generator, callbacks=cbks, validation_steps=validation_steps)target_dir = './models/'if not os.path.exists(target_dir): os.mkdir(target_dir)model.save('./models/model.h5')model.save_weights('./models/weights.h5')

将文件保存为Train.py,然后执行如下命令进行训练数据

E:Image-Classification-by-Keras-and-Tensorflow-masterUsing Keras>Training.py

训练数据的结果(30 epochs):

我们可以看到精度值已经非常高,为98%,并且具有非常低的loss值,大约为0.0492。这意味着我们做的模型很好,我们可以用它来预测。

在我们进行数据训练之后,现在我们将测试我们的深度学习模型。在这里,我使用mobil的5张图像和motor的5张图像的数据,将其保存在test_image文件夹中。

测试模型

首先导入Python库

import osimport numpy as npfrom keras.preprocessing.image import ImageDataGenerator, load_img, img_to_arrayfrom keras.models import Sequential, load_modelimport time

我们首先调用我们创建的模型,Python代码如下:

#Define Pathmodel_path = './models/model.h5'model_weights_path = './models/weights.h5'test_path = 'data/test_image'#Load the pre-trained modelsmodel = load_model(model_path)model.load_weights(model_weights_path)#Define image parametersimg_width, img_height = 150, 150

下面是预测图像处理函数。我们使用了2个标签,第一个标签是mobil预测值为0的结果,第二个标签是预测值为1的motor预测结果。

#Prediction Functiondef predict(file): x = load_img(file, target_size=(img_width,img_height)) x = img_to_array(x) x = np.expand_dims(x, axis=0) array = model.predict(x) result = array[0] #print(result) answer = np.argmax(result) if answer == 0: print("Predicted: mobil") elif answer == 1: print("Predicted: motor") return answer#Walk the directory for every imagefor i, ret in enumerate(os.walk(test_path)): for i, filename in enumerate(ret[2]): if filename.startswith("."): continue print(ret[0] + '/' + filename) result = predict(ret[0] + '/' + filename) print(" ")

之后保存为你Testing.py,只需运行来查看预测结果

E:Image-Classification-by-Keras-and-Tensorflow-masterUsing Keras>Testing.py

这是预测5辆汽车图像和5辆摩托车图像的结果:

图mobil_1,mobil_2,mobil_3,mobil_5成功地预测为汽车和mobil_4错误的预测图像为摩托车。而所有从motor_1到motor_5图像的摩托车类都被正确预测。

图像处理神经网络python_深度学习使用Python进行卷积神经网络的图像分类教程相关推荐

  1. 神经网络与深度学习 Class 13:卷积神经网络

    目录 13.1 深度学习基础 13.2 图像识别与深度学习 13.3 图像卷积 13.4 卷积神经网络 13.1 深度学习基础 特征工程:尽可能选择和构建出好的特征,使得机器学习算法能够达到最佳性能 ...

  2. MOOC网神经网络与深度学习TensorFlow实践8——卷积神经网络

    卷积神经网络 深度学习基础 图像识别和深度学习 图像卷积 卷积神经网络

  3. 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇

    学习时间:2022.04.10~2022.04.12 文章目录 3. 卷积神经网络CNN 3.1 卷积神经网络的概念 3.1.1 什么是CNN? 3.1.2 为什么要用CNN? 3.1.3 人类的视觉 ...

  4. 深度学习笔记其五:卷积神经网络和PYTORCH

    深度学习笔记其五:卷积神经网络和PYTORCH 1. 从全连接层到卷积 1.1 不变性 1.2 多层感知机的限制 1.2.1 平移不变性 1.2.2 局部性 1.3 卷积 1.4 "沃尔多在 ...

  5. 深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战

    深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战 神经网络(neual networks)是人工智能研究领域的一部分,当前最流行的神经网络 ...

  6. 【深度学习】Tensorflow搭建卷积神经网络实现情绪识别

    [深度学习]Tensorflow搭建卷积神经网络实现情绪识别 文章目录 1 Tensorflow的基本使用方法1.1 计算图1.2 Feed1.3 Fetch1.4 其他解释 2 训练一个Tensor ...

  7. 花书+吴恩达深度学习(十三)卷积神经网络 CNN 之运算过程(前向传播、反向传播)

    目录 0. 前言 1. 单层卷积网络 2. 各参数维度 3. CNN 前向传播反向传播 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 ...

  8. 花书+吴恩达深度学习(十一)卷积神经网络 CNN 之池化层

    目录 0. 前言 1. 最大池化(max pooling) 2. 平移不变形 3. 其他池化函数 4. 卷积和池化作为一种无限强的先验 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常 ...

  9. 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层

    目录 0. 前言 1. 2D 图像卷积 2. 3D 图像卷积 3. 过滤器(核函数) 4. 过滤器应用于边缘检测 5. padding 填充 6. stride 步长 7. 使用卷积的动机 8. 1乘 ...

最新文章

  1. 朋友来网易面试,挂了~
  2. Linux下kvm宿主机死机,看到一些朋友苦虚拟机久矣,分享下我使用KVM的一些经验和技巧...
  3. IOS文本框readonly时焦点事件
  4. Linux7安装系统服务,linux系统安装及初始服务优化-centos7.4
  5. 子元素是字典列表转成字典
  6. daemon函数的原理及使用详解
  7. 硬件知识:U盘缩水是怎么回事,如何恢复U盘真实容量?
  8. Linux内核学习笔记(2)-- 父进程和子进程及它们的访问方法
  9. python 美化ppt_python操作PPT------PPT内容样式调整
  10. OD首次来跳过注册验证
  11. 陈丹琦组最新力作:仅需dropout两次的对比学习框架
  12. 浅谈大数据的过去、现在和未来
  13. Appium工作日记:Message: An element could not be located on the page using the given search parameters.
  14. 【软件测试】Jmeter性能测试(性能测试,Jemeter使用与结果分析)
  15. Linux分区磁盘空间扩展、扩容、合并
  16. Windows PowerShell 中启动 Nginx 报错解决方案
  17. k8s 之服务发现(service)
  18. g1gc调优的一次实战记录
  19. java 实验6 图形用户界面设计试验(2)
  20. 计算机等级培训计划书

热门文章

  1. 一道海量日志的随机选取问题
  2. 师傅带徒弟 但是不能 教会徒弟饿死师傅!
  3. 初学者虚拟机使用虚拟机
  4. 剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)
  5. oracle共享内存不足,Oracle数据库共享内存分配不足怎么办
  6. python函数可以递归调用吗_递归调用函数
  7. ds6708 symbol 驱动_Symbol DS6708扫描器
  8. l2-004 这是二叉搜索树吗?_算法学习笔记(45): 二叉搜索树
  9. java class教程_深入理解Java Class文件格式(七)
  10. 2021上半年测试工作总结:再一次的跳出、新的转变