卷积神经网络-猫狗识别实战

课程来自bilibili@Momodel平台 全长只有两个小时,理论部分讲得很粗糙

1 人的视觉和计算机视觉

人的大脑:神经元细胞,轴突发送信号,树突接收信号,互相连接,连接的强度和状态会随着新的经历刺激而变化。

用计算机模拟大脑,每个神经元的输入有很多,有很多权重,经过激活函数,输出一个值。

全连接网络:略

计算机图像的一些基础概念:略

图像-flatten(二维展开成一维)->全连接网络

2 神经网络介绍

人工设计神经网络(结构);参数是学习训练出来的。需要数据和相应标签。
与真实值的偏差是损失。使得损失最小的算法:梯度下降,反向传播。

3 卷积神经网络

处理图像时,全连接网络的第一层将会非常大,如100*100*3的图片,有1000个神经元,会有3e7的连接,这样就太大了。
在这里插入图片描述

卷积层->最大池化层(多次)-flatten>全连接网络

模式1比整张图片要小;2模式可能出现在图像的不同区域。如“猫耳检测器”,可以复用;3对图像进行缩小并不会改变图像,而可以使得参数大量减少。

1.2属性导致了卷积层的存在。不同的卷积核有不同的效果,如边缘检测、锐化等。

边界可以padding。full padding:卷积结果比原图片大,对任何一个像素都不放过。same padding:卷积结果与原图片一样大。
在这里插入图片描述

Stride:卷积核每次移动的步长。
在这里插入图片描述
彩色图片:三通道,处理后相加。

3属性导致了池化层的存在。起到了图像缩小的效果。
在这里插入图片描述
逐步抽象。
在这里插入图片描述

框架 Keras

是一个用python编写的高级神经网络API
在这里插入图片描述
Keras现在已经被收入tensorflow里了

方式1
Sequenttial序列模型
非常简单,只支持单输入,单输出(适合猫狗识别)

方式2
函数式API
支持多输入多输出
在这里插入图片描述

import keras
from keras import layers #层

model=keras.Sequential() #建立序列模型
model.add(layers.Dense(20,activation='relu',input_shape=(10,))) #加层,Dense表示全连接层
#参数是神经元数量、激活函数,输入的参数值数量
model.add(layers.Dense(20,activation='relu'))
model.add(layers.Dense(10,activation='softmax'))

#训练,x表示样本数据,y表示标签,epochs即训练迭代次数,batch_size是一批的大小
model.fit(x,y,epochs=10,batch_size=32)

#Conv2D 创造卷积核
#参数,filters=输出空间的维度,kernel_size:卷积核的宽高,strides=步长,padding选择valid或same
keras.layers.Conv2D(filters,kernel_size,strides=(1,1),padding='valid',data_format=None)

#MaxPooling2D 池化层
#参数,pool_size缩小比例的因数,strides,padding
keras.layers.MaxPooling2D(pool_size=(2,2),strides=None,padding='valid',data_format=None)

导入数据集

从momodel里直接导入

导包

import sys
from matplotlib import pyplot
from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Dense
from keras.layers import Flatten
from keras.optimizers import SGD
from keras.preprocessing.image import ImageDataGenerator
import tensorflow as tf
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)

基础CNN模型

在这里插入图片描述

def define_cnn_model():
    model=Sequential() #建立序列模型
    #卷积层
    model.add(Conv2D(32,(3,3),activation='relu',padding='same',input_shape=(200,200,3)))
    #最大池化层
    model.add(MaxPooling2D((2,2)))
    #Flatten层
    model.add(Flatten())
    #全连接层
    model.add(Dense(128,activation='relu',))
    model.add(Dense(1,activation='sigmoid'))
    
    #编译模型 优化器
    opt=SGD(lr=0.001,momentum=0.9)
    model.compile(optimizer=opt,loss='binary_crossentropy',metrics=['accuracy'])
    return model

打印模型结构

model=define_cnn_model()
plot_model(model,to_file='cnn_model.png',dpi=100,show_shapes=True,show_layer_names=True)

在这里插入图片描述

def train_cnn_model():
    model=define_cnn_model()
    #图片生成器
    datagen=ImageDataGenerator(rescale=1.0/255.0)
    train_it=datagen.flow_from_directory(
        '/home/jovyan/work/datasets/ma1ogo3ushu4ju4ji2-momodel/dogs_cats/data/train',
        class_mode='binary',
        batch_size=64,
        target_size=(200,200)
    )
    #训练模型
    model.fit_generator(train_it,
                       steps_per_epoch=len(train_it),
                       epochs=1,
                       verbose=1)

使用gpu添加任务进行训练

train_cnn_model()

epochs=1时结果为58%的准确率
在这里插入图片描述
epochs=20时,准确率达到了92.8%
在这里插入图片描述

预测

from keras.models import load_model
model_path='/home/jovyan/work/datasets/ma1ogo3ushu4ju4ji2-momodel/dogs_cats/model/basic_cnn_model.h5'
model=load_model(model_path)

import os,random
from matplotlib.pyplot import imshow
import numpy as np
from PIL import Image
%matplotlib inline

def read_random_image():
    folder='/home/jovyan/work/datasets/ma1ogo3ushu4ju4ji2-momodel/dogs_cats/data/test/'
    file_path=folder+random.choice(os.listdir(folder))
    pil_im=Image.open(file_path,'r')
    return pil_im

def get_predict(pil_im,model):
    pil_im=pil_im.resize((200,200))#对图片缩放
    array_im=np.asarray(pil_im)
    array_im = array_im[np.newaxis,:]
    result=model.predict([[array_im]])
    if result[0][0]>0.5:
        print('狗')
    else:
        print('猫')
      
pil_im=read_random_image()
imshow(np.asarray(pil_im))
get_predict(pil_im,model)

预测结果:
在这里插入图片描述

迁移学习

是一种机器学习方法,把为A任务开发的模型拿出来复用。即使用预训练的模型。
在这里插入图片描述
基于inceptionV3模型做迁移学习
在这里插入图片描述
include_top=是否包括推理部分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/802457.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GitHub+Picgo图片上传

Picgo下载,修改安装路径,其他一路下一步! 地址 注册GitHub,注册过程不详细展开,不会的百度一下 地址 新建GitHub仓库存放图片 ——————————————————————————————————————————…

【贪心算法】贪心算法30题

一、贪心算法简介 证明贪心策略正确性的常用方法:直接证明、交换论证法、反证法、分类讨论… 二、相关编程题 2.1 柠檬水找零 题目链接 860. 柠檬水找零 - 力扣(LeetCode) 题目描述 算法原理 提示:最优解和贪心解唯一可能不同…

Java IO流(详解)

目录 1.概述 2.File文件类 2.1 文件的创建操作 2.2 文件的查找操作 3. File里面一些其他方法 3.1 经典案例 4. IO流 4.1 概念 4.2 IO分类 4.3 字节输出流 4.4 字节输入流 4.5 案例 4.6 字符输出流 4.7 字符输入流 4.8 案例 4.9 处理流--缓冲流 4.10 对象流: 1.…

IP地址定位与智慧城市和智能交通

智慧城市和智能交通是现代城市发展的关键领域,通过先进技术提升城市管理和居民生活质量。IP地址定位在交通监控、智能路灯管理等方面发挥了重要作用,本文将深入探讨其技术实现及应用。 交通监控与优化 通过IP地址连接交通传感器和摄像头,可…

useState函数

seState是一个react Hook(函数),它允许我们像组件添加一个状态变量,从而控制影响组件的渲染结果 数据驱动试图 本质:和普通JS变量不同的是,状态变量一旦发生变化组件的视图UI也会随着变化(数据驱动试图) 使用 修改状态 注意&am…

H5 Svg 半圆圆环占比图

效果图 主逻辑 /* 虚线长度 */ stroke-dasharray /* 偏移 */ stroke-dashoffset 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&qu…

基于jeecgboot-vue3的Flowable流程支持bpmn流程设计器与仿钉钉流程设计器-编辑多版本处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、前端编辑带有仿钉钉流程的处理 /** 编辑流程设计弹窗页面 */const handleLoadXml (row) > {console.log("handleLoadXml row",row)const params {flowKey: row.key,ver…

React@16.x(60)Redux@4.x(9)- 实现 applyMiddleware

目录 1&#xff0c;applyMiddleware 原理2&#xff0c;实现2.1&#xff0c;applyMiddleware2.1.1&#xff0c;compose 方法2.1.2&#xff0c;applyMiddleware 2.2&#xff0c;修改 createStore 接上篇文章&#xff1a;Redux中间件介绍。 1&#xff0c;applyMiddleware 原理 R…

数据融合工具(10)线重叠检查修复

一、需求背景 先明确一下“线重叠”的定义。 ArcGIS拓扑工具集中的拓扑规则&#xff1a; 不能自重叠&#xff08;线&#xff09; —线要素不得与自身重叠。这些线要素可以交叉或接触但不得有重合的线段。此规则适用于街道等线段可能接触闭合线的要素&#xff0c;但同一街道不得…

深入探讨极限编程(XP):技术实践与频繁发布的艺术

目录 前言1. 极限编程的核心原则1.1 沟通1.2 简单1.3 反馈1.4 勇气1.5 尊重 2. 关键实践2.1 结对编程2.1.1 提高代码质量2.1.2 促进知识共享2.1.3 增强团队协作 2.2 测试驱动开发&#xff08;TDD&#xff09;2.2.1 提升代码可靠性2.2.2 提高代码可维护性2.2.3 鼓励良好设计 2.3…

判断点与圆的位置关系(c++)

可以通过创建两个类来解决问题 &#xff1a; 代码&#xff1a; #include<iostream> using namespace std;class Point { public:void setX(int x){m_X x;}int getX(){return m_X;}void setY(int y){m_Y y;}int getY(){return m_Y;}private:int m_X;int m_Y;};class C…

【系统架构设计师】十一、系统架构设计(中间件|典型应用架构)

目录 九、中间件 9.1 基础概念 9.2 中间件分类 十、典型应用架构 10.1 J2EE和四层结构 10.2 JSPServletJavaBeanDAO 10.3 .NET和J2EE之争 往期推荐 历年真题练习 九、中间件 之前总提到中间件&#xff0c;那么中间件到底是什么&#xff1f;在系统架构中又扮演者什么角…

Spring与设计模式实战之策略模式

Spring与设计模式实战之策略模式 引言 在现代软件开发中&#xff0c;设计模式是解决常见设计问题的有效工具。它们提供了经过验证的解决方案&#xff0c;帮助开发人员构建灵活、可扩展和可维护的系统。本文将探讨策略模式在Spring框架中的应用&#xff0c;并通过实际例子展示…

C++ | Leetcode C++题解之第240题搜索二维矩阵II

题目&#xff1a; 题解&#xff1a; class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m matrix.size(), n matrix[0].size();int x 0, y n - 1;while (x < m && y > 0) {if (matrix[x][y] targ…

LabVIEW异步和同步通信详细分析及比较

1. 基本原理 异步通信&#xff1a; 原理&#xff1a;异步通信&#xff08;Asynchronous Communication&#xff09;是一种数据传输方式&#xff0c;其中数据发送和接收操作在独立的时间进行&#xff0c;不需要在特定时刻对齐。发送方在任何时刻可以发送数据&#xff0c;而接收…

AI自动生成PPT哪个软件好?高效制作PPT优选这4个

7.15初伏的到来&#xff0c;也宣告三伏天的酷热正式拉开序幕~在这个传统的节气里&#xff0c;人们以各种方式避暑纳凉&#xff0c;享受夏日的悠闲时光。 而除了传统的避暑活动&#xff0c;我们还可以用一种新颖的方式记录和分享这份夏日的清凉——那就是通过PPT的方式将这一传…

【Linux】权限管理与相关指令

文章目录 1.权限、文件权限、用户文件权限的理解以及对应八进制数值表示、设置目录为粘滞位文件类型 2.权限相关的常用指令susudochmodchownchgrpumaskwhoamifile 1.权限、文件权限、用户 通过一定条件&#xff0c;拦住一部分人&#xff0c;给另一部分权利来访问资源&#xff0…

Amazon EC2 部署Ollama + webUI

最近和同事闲聊&#xff0c;我们能不能内网自己部署一个LLM&#xff0c;于是便有了Ollama webUI的尝试 对于Linux&#xff0c;使用一行命令即可 curl -fsSL https://ollama.com/install.sh | shollama --help Large language model runnerUsage:ollam…

【Dison夏令营 Day 21】用Python编写绘图

绘画 - 在屏幕上绘制线条和形状。单击标记形状的起点&#xff0c;再次单击标记形状的终点。可使用键盘选择不同的形状和颜色。 """Paint, for drawing shapes.Exercises1. Add a color. 2. Complete circle. 3. Complete rectangle. 4. Complete triangle. 5. A…

大厂面试官问我:为什么Redis的rehash采用渐进式,而Java的hashmap是一次性rehash?【后端八股文十二:Redis hash八股文合集】

本文为【Redis hash八股文合集】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏…