CNN神经网络猫狗分类经典案例

因为有猫和狗两类,所有在data/train目录下,再建两个目录data/train/dog和data/train/cat:

同理,其他的data/validation和data/test目录下,再建两个目录:cat和data/,在cat和dog目录下,放置对应的图片。

分类建立完成后,Keras会在ImageDataGenerator迭代过程中,自动的为data/train,data/test,data/validation内部生产训练标签,标签依据就是在data/train,data/test,data/validation下面的分类目录,本例是/dog和/cat目录文件夹作为两分类。

import numpy as np

import matplotlib.pyplot as plt

from keras.preprocessing.image import ImageDataGenerator, image

from keras import layers

from keras import models

from keras.layers import Dropout

from keras import optimizers

from keras.models import load_model

train_dir = ‘./data/train/’

validation_dir = ‘./data/validation/’

model_file_name = ‘cat_dog_model.h5’

def init_model():

model = models.Sequential()

KERNEL_SIZE = (3, 3)

model.add(layers.Conv2D(filters=32, kernel_size=KERNEL_SIZE, activation=‘relu’, input_shape=(150, 150, 3)))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(filters=64, kernel_size=KERNEL_SIZE, activation=‘relu’))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(filters=128, kernel_size=KERNEL_SIZE, activation=‘relu’))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(filters=128, kernel_size=KERNEL_SIZE, activation=‘relu’))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Flatten())

model.add(layers.Dense(512, activation=‘relu’))

model.add(Dropout(0.5))

model.add(layers.Dense(1, activation=‘sigmoid’))

model.compile(loss=‘binary_crossentropy’,

optimizer=optimizers.RMSprop(lr=1e-3),

metrics=[‘accuracy’])

return model

def fig_loss(history):

history_dict = history.history

loss_values = history_dict[‘loss’]

val_loss_values = history_dict[‘val_loss’]

epochs = range(1, len(loss_values) + 1)

plt.plot(epochs, loss_values, ‘b’, label=‘Training loss’)

plt.plot(epochs, val_loss_values, ‘r’, label=‘Validation loss’)

plt.title(‘Training and validation loss’)

plt.xlabel(‘Epochs’)

plt.ylabel(‘Loss’)

plt.legend()

plt.grid()

plt.show()

def fig_acc(history):

history_dict = history.history

acc = history_dict[‘accuracy’]

val_acc = history_dict[‘val_accuracy’]

epochs = range(1, len(acc) + 1)

plt.plot(epochs, acc, ‘g’, label=‘Training acc’)

plt.plot(epochs, val_acc, ‘r’, label=‘Validation acc’)

plt.title(‘Training and validation acc
uracy’)

plt.xlabel(‘Epochs’)

plt.ylabel(‘Accuracy’)

plt.legend()

plt.grid()

plt.show()

def fit(model):

train_datagen = ImageDataGenerator(rescale=1. / 255)

validation_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(

train_dir,

target_size=(150, 150),

batch_size=256,

class_mode=‘binary’)

validation_generator = validation_datagen.flow_from_directory(

validation_dir,

target_size=(150, 150),

batch_size=64,

class_mode=‘binary’)

history = model.fit_generator(

train_generator,

steps_per_epoch=,

epochs=10,

validation_data=validation_generator,

validation_steps=,

)

model.save(model_file_name)

fig_loss(history)

fig_acc(history)

def predict():

model = load_model(model_file_name)

print(model.summary())

img_path = ‘./data/test/cat/cat.4021.jpg’

img = image.load_img(img_path, target_size=(150, 150))

img_tensor = image.img_to_array(img)

img_tensor = img_tensor / 255

img_tensor = np.expand_dims(img_tensor, axis=0)

其形状为 (1, 150, 150, 3)

plt.imshow(img_tensor[0])

plt.show()

result = model.predict(img_tensor)

print(result)

画出count个预测结果和图像

def fig_predict_result(model, count):

test_datagen = ImageDataGenerator(rescale=1. / 255)

test_generator = test_datagen.flow_from_directory(

‘./data/test/’,

target_size=(150, 150),

batch_size=256,

class_mode=‘binary’)

text_labels = []

plt.figure(figsize=(30, 20))

迭代器可以迭代很多条数据,但我这里只取第一个结果看看

for batch, label in test_generator:

pred = model.predict(batch)

for i in range(count):

true_reuslt = label[i]

print(true_reuslt)

if pred[i] > 0.5:

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

[外链图片转存中…(img-uWdSHaJ6-1719050756344)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

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

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

相关文章

Large Language Model based Multi-Agents: A Survey of Progress and Challenges

目录 摘要简介背景单一智能体系统单智能体 vs .多智能体系统 剖析多智能体系统:接口、剖析、通信和能力智能体 - 环境接口智能体画像智能体通信能力获取 摘要 大型语言模型( Large Language Models,LLMs )在各种任务中都取得了令人瞩目的成功。由于LLMs…

你好,复变函数2.0

第一行&#xff1a;0 或 1 第二行&#xff1a;&#xff08;空格&#xff09;函数&#xff08;后缀&#xff09; #pragma warning(disable:4996) #include <easyx.h> #include <stdio.h> #include <math.h> #define PI 3.141592653589793 #define E 2.71828…

【ai】tritonserver 的测试sdk部署

HybrIKHybrIK 环境 conda create -n hybrik python=3.8 -y 虚拟环境 zhangbin@ubuntu-server:~/miniconda3/bin$ pip config set global.index-url https: …

make与makefile

目录 一、make的默认目标文件与自动推导 二、不能连续make的原因 执行原理 touch .PHONY伪目标 make指令不回显 makefile多文件管理 简写依赖方法 三、回车与换行 四、缓冲区 一、make的默认目标文件与自动推导 假设这是一个makefile文件&#xff0c;make的时候默认生…

Kubernetes Dashboard

Minikube 环境搭建 Kubernetes 的基本架构 Kubernetes 声明式语言 YAML YAML操作Kubernetes核心对象 CentOs搭建Kubernetes集群 Kubernetes进阶对象Deployment、DaemonSet、Service Kubernetes进阶对象Ingress、Ingress Class、Ingress Controller Kubernetes集群部署项目实践 …

XTDrone-无人机与无人船协同初步-配置教程

说明&#xff1a;配置该教程时所使用的是Ubuntu20.04 1 海洋与无人船仿真环境搭建 cp -r ~/XTDrone/sitl_config/usv/* ~/catkin_ws/src/ cd catkin_ws catkin build # or catkin_make 说明&#xff1a;由于官方所编写的脚本时几年之前的&#xff0c;所以很多东西不符合现在…

深入分析并可视化城市轨道数据

介绍 中国城市化进程加速中&#xff0c;城市轨道交通的迅速扩张成为提升城市运行效率和居民生活品质的关键。这一网络从少数大城市延伸至众多大中型城市&#xff0c;映射了经济飞跃和城市管理现代化。深入分析并可视化城市轨道数据&#xff0c;对于揭示网络特性、评估效率、理…

JavaScript学习笔记(二)

12、数字 常规用法和java的用法相似&#xff0c;就不再做详细的记录, JavaScript 数字 以下只记录特殊用法&#xff1a; 12.1 数字字符串运算 在所有数字运算中&#xff0c;JavaScript 会尝试将字符串转换为数字&#xff1a; var x "100"; var y "10"…

MySQL性能问题诊断方法和常用工具

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享。MySQL运…

python入门基础知识(错误和异常)

本文部分内容来自菜鸟教程Python 基础教程 | 菜鸟教程 (runoob.com) 本人负责概括总结代码实现。 以此达到快速复习目的 目录 语法错误 异常 异常处理 try/except try/except...else try-finally 语句 抛出异常 用户自定义异常 内置异常类型 常见的标准异常类型 语法…

每天写java到期末考试--接口1--基础--6.22

规则&#xff1a; 练习&#xff1a; 抽象类的抽象方法 动物类Animal package 期末复习;public abstract class Animal {private String name;private int age;//1.空构造public Animal(){}public Animal(String name,int age){this.ageage;this.namename;}public String getNa…

【Java毕业设计】基于JavaWeb的服务出租系统

本科毕业设计论文 题目&#xff1a;房屋交易平台设计与实现 系 别&#xff1a; XX系&#xff08;全称&#xff09; 专 业&#xff1a; 软件工程 班 级&#xff1a; 软件工程15201 学生姓名&#xff1a; 学生学号&#xff1a; 指导教师&#xff1a; 导师1 导师2 文章目录 摘…

C++入门 vector部分模拟实现

目录 vector大致框架 vector常见接口模拟实现 begin迭代器 & end迭代器 capacity( ) & size( ) reserve operator[ ] push_back( ) & pop_back( ) sort vector大致框架 vector的内部的成员变量大概有三部分构成&#xff1a; namespace bit {template<c…

java中的日志

springboot自带slf4j框架和logback&#xff0c;我们可以移除spring的logging&#xff0c;然后再带入自己的日志框架。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusio…

Linux中tar压缩与解压缩

TAR是Unix/Linux中常用的归档工具&#xff0c;它可以对文件或目录进行打包但不压缩&#xff0c;或者配合其他工具进行压缩。 压缩文件或目录 以下是一些基本的tar压缩命令&#xff1a; 1.压缩单个文件&#xff1a; tar -cvf archive.tar file1 2.压缩多个文件&#xff1a; t…

毕业季带给我的五个启示

每到毕业季&#xff0c;校园里总是充满了复杂的情绪。有人欢笑&#xff0c;有人落泪。同样的四年大学生活&#xff0c;为何结局如此不同&#xff1f;本文将从多个角度探讨如何实现综合改变&#xff0c;解释在交友、机会和心态上的关键因素&#xff0c;揭示“慢就是快”的真理。…

Vulnhub--OS-HACKNOS-2.1

渗透复现 目标站点为wordpress&#xff0c;通过wpscan进行漏洞扫描发现漏洞插件 通过漏洞插件存在的目录穿越漏洞成功读取/etc/passwd文件中flag用户的密码 SSH登录flag用户后在备份文件中找到rohit用户的密码 切换rohit用户&#xff0c;rohit用户能够以root权限执行任何文…

colima配置docker镜像源

只在 colima ssh 环境下修改 docker 配置文件是无效的&#xff0c;我们需要修改 colima 配置文件才能使 docker 镜像源生效。 此时你需要进入到~/.colima/default目录下编辑colima.yaml文件。该文件是 colima 的配置文件。内容如下图所示&#xff0c;我这里配置了许多家的镜像源…

手写方法实现整型例如:123与字符串例如:“123“相互转化(下篇)

目录 一、前言 二、整型转化为字符串 1. 初始化变量 2.数字1转字符1 3.取出value中的每一项数字 4.将字符放入字符数组中 5.最终代码 三、最后 一、前言 本篇文章紧跟上篇文章&#xff0c;本片内容为整型转化为字符串类型。至于我为什么要分两篇文章&#xff0c;主要…

【2024最新精简版】Kafka面试篇

文章目录 Kafka和RabbitMQ什么区别讲一讲Kafka架构你们项目中哪里用到了Kafka?为什么会选择使用Kafka? 有什么好处 ?使用Kafka如何保证消息不丢失 ?消息的重复消费问题如何解决的 ?Kafka如何保证消费的顺序性 ?Kafka的高可用机制有了解过嘛 ?Kafka实现高性能的设计有了解…