首页 > 其他分享 >一个好玩的deep learning Demo!

一个好玩的deep learning Demo!

时间:2022-08-30 23:23:19浏览次数:54  
标签:plt keras Demo deep train learning tf validation dir

对于生活中的熟悉的动物,我们人脑经过一次扫描,便可以得到该动物的物种!那么机器是如何识别这个图片上的动物是属于哪一物种呢?

本次实验借生活中最常见的猫和狗来探究其原理!

环境准备:

tensorflow ,python,一些data

实验预期:

  当模型训练完成后,我们可以用该模型去预测一张图片属于哪一个类别,很显然,本次项目属于一个二分类问题,

  网上有很多此类的项目,但是都不能很好的落地,那么这次实验所完成的最终结果是,我们上传一张图片,控制台

  便会返回该图片的类别:猫/狗

模型搭建:

  对于图片识别来说,最强大的工具莫过于卷积神经网络,对于CNN的原理也不是很难,只要知道其主要的计算过程即可,

  熟悉CNN的人都知道,并不是层数越多越好,因为层数过多,会造正过拟合,导致实验结果不会很理想,所以经过我多次的实验,

  最终模型的设置如下:

  

model = tf.keras.models.Sequential([

    tf.keras.layers.Conv2D(16, (3, 3), activation='relu', input_shape=(150, 150, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Conv2D(32, (3, 3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.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'),

    tf.keras.layers.Dense(1, activation='sigmoid')
])

  每一层卷积跟一层最大池化,Conv2D()中参数:16表示卷积核个数,(3,3)表示卷积核大小,很多论文中给出的代码中设定的也是(3,3),input_shape表示输入数据形状,后面是通道数;

  经过最大池化留下来的神经元对输出才会有贡献!环节卷积层对位置的敏感性!

然后再模型之前,我们也需要对数据进行一些操作:读取数据,将数据分为验证数据集和训练数据集

base_dir = 'D:/cats and dogs'

train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')


train_cats_dir = os.path.join(train_dir, 'cats')
train_dogs_dir = os.path.join(train_dir, 'dogs')


validation_cats_dir = os.path.join(validation_dir, 'cats')
validation_dogs_dir = os.path.join(validation_dir, 'dogs')

接下来的操作就是一些固定的步骤,对数据进行归一化,生成带标签的数据,绘制损失曲线等,直接上代码:

train_datagen = ImageDataGenerator(rescale=1.0 / 255.)
test_datagen = ImageDataGenerator(rescale=1.0 / 255.)


train_generator = train_datagen.flow_from_directory(train_dir,
                                                    batch_size=20,
                                                    class_mode='binary',
                                                    target_size=(150, 150))

validation_generator = test_datagen.flow_from_directory(validation_dir,
                                                        batch_size=20,
                                                        class_mode='binary',
                                                        target_size=(150, 150))


history = model.fit_generator(train_generator,
                              validation_data=validation_generator,
                              steps_per_epoch=100,
                              epochs=15,
                              validation_steps=50,
                              verbose=2)

model.save('model.h5')



acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(len(acc))


plt.plot(epochs, acc)
plt.plot(epochs, val_acc)
plt.title('Training and validation accuracy')
plt.legend(('Training accuracy', 'validation accuracy'))
plt.figure()


plt.plot(epochs, loss)
plt.plot(epochs, val_loss)
plt.legend(('Training loss', 'validation loss'))
plt.title('Training and validation loss')
plt.show()

 

预测部分

from tensorflow.keras.models import load_model
import numpy as np
from tensorflow.keras.preprocessing import image

path = 'D:/cats and dogs/cat.123.jpg'
model = load_model('model.h5')
img = image.load_img(path, target_size=(150, 150))
x = image.img_to_array(img) / 255.0

x = np.expand_dims(x, axis=0)
# np.vstack:按垂直方向(行顺序)堆叠数组构成一个新的数组
images = np.vstack([x])

classes = model.predict(images, batch_size=1)

if classes[0] > 0.5:
    print("图片识别为狗")
else:
    print("图片识别为猫")

 

 

 

 结果说明还可以!!!!!!!

标签:plt,keras,Demo,deep,train,learning,tf,validation,dir
From: https://www.cnblogs.com/99kol/p/16641336.html

相关文章

  • 离线强化学习 Offline Reinforcement Learning 之 BEAR 算法
    BEARBootstrappingErrorAccumulationReduction时间:2019NIPSConferenceandWorkshoponNeuralInformationProcessingSystem题目:StabilizingOff-policyQ-Lear......
  • Java8 多线程及并行计算demo
    Java8多线程及并行计算demo #接口publicinterfaceRemoteLoader{Stringload();defaultvoiddelay(){try{Thread.sleep(1000L......
  • 深度学习基础课: “判断性别”Demo需求分析和初步设计(下1)
    大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序线上课程资料:本节课录像回放加QQ群,获得......
  • 关于vue.js:vue使用sass中deep报错
    转自:https://lequ7.com/guan-yu-vuejsvue-shi-yong-sass-zhong-deep-bao-cuo.html之前装了一个vue3.0的环境,结果搬砖的时候发现vue2.0的项目跑不了了然后照着网上说......
  • openSUSE 15.4 安装 Deepin Wine QQ
    1.准备:deepin-wine5deepin-wine-qqdeepin-wine-helper这三个包我是在openSUSE网站上搜索到的,https://software.opensuse.org/search?baseproject=ALL&q=感谢打包者......
  • 【Qt6.2.4】qml 实现登录注册及显示详情demo
    参考https://www.bilibili.com/video/BV1dS4y1u7vN?spm_id_from=333.999.0.0(很棒的教程)环境环境版本windows10QT6.2.4QtCreator8.0.1(Community......
  • java helloworld demo
    大二的时候写过web仅限于idea配合springboot,学习的时候需要写个javademo或者算法,居然不知道怎么写了首先创建一个文件夹,写上你的代码,因为是demo,所以不......
  • DropEdge: Towards Deep Graph Convolutional Networks on Node Classification
    目录概符号说明本文方法代码RongY.,HuangW.,XuT.andHuangJ.DropEdge:towardsdeepgraphconvolutionalnetworksonnodeclassification.InInternational......
  • 17 - Docker来部署flaskDemo项目
    README.md文件内容:#flaskDemo本接口项目的技术选型:Python+Flask+MySQL+Redis,通过Python+Flask来开发接口使用MySQL来存储用户信息使用Redis用于存储token目......
  • demo实例
    创建实例简述小程序初始文件结构创建完小程序后,系统会自动创建一系列初始目录。接下来分别介绍一下它们。pages文件夹:用来存放小程序中的页面文件,每个小程序页面都会在......