经典分类模型回顾16-AlexNet实现垃圾分类(Tensorflow2.0版)
AlexNet是2012年由亚历克斯·克里斯托夫(Alex Krizhevsky)等人提出的一种卷积神经网络结构,它在ImageNet图像识别比赛中获得了第一名,标志着卷积神经网络的崛起。
AlexNet的结构包括8层网络,其中前5层为卷积层,后3层为全连接层。AlexNet的主要特点是使用了ReLU作为激活函数,采用dropout技术避免过拟合问题,使用了最大池化层来降低训练参数数量,采用了LRN(局部响应归一化)来增强泛化能力,还采用了数据增强的方法来扩充训练集。
具体来说,AlexNet的结构如下:
|层|类型|卷积核大小|步长|输出大小|
|---|---|---|---|---|
|1|卷积层|11x11x3|4|55x55x96|
|2|最大池化层|3x3|2|27x27x96|
|3|卷积层|5x5x96|1|27x27x256|
|4|最大池化层|3x3|2|13x13x256|
|5|卷积层|3x3x256|1|13x13x384|
|6|卷积层|3x3x384|1|13x13x384|
|7|卷积层|3x3x384|1|13x13x256|
|8|最大池化层|3x3|2|6x6x256|
|9|全连接层|4096|1|1x1x4096|
|10|全连接层|4096|1|1x1x4096|
|11|全连接层|1000|1|1x1x1000|
其中,第1层卷积层的输入为224x224x3的图片,卷积核大小为11x11,步长为4,共96个卷积核,得到的输出大小为55x55x96。第2层为最大池化层,池化核大小为3x3,步长为2,输出大小为27x27x96。第3层为卷积层,卷积核大小为5x5x96,步长为1,共256个卷积核,得到的输出大小为27x27x256。第4层为最大池化层,池化核大小为3x3,步长为2,输出大小为13x13x256。第5、6、7层为卷积层,卷积核大小分别为3x3x256、3x3x384、3x3x384,共384个卷积核,256个卷积核,256个卷积核,得到的输出大小分别为13x13x384、13x13x384、13x13x256。第8层为最大池化层,池化核大小为3x3,步长为2,输出大小为6x6x256。最后3层为全连接层,第9、10层的输出大小都为1x1x4096,第11层的输出大小为1x1x1000,预测图片的类别。
AlexNet的创新之处在于使用ReLU激活函数来替代传统的sigmoid激活函数,ReLU的计算速度更快,同时解决了梯度消失的问题,使网络的训练更加稳定和有效。此外,AlexNet也是第一个使用dropout来避免过拟合问题的神经网络。数据增强的方法也使训练集得到了扩充,提高了网络的鲁棒性。AlexNet的成功奠定了深度学习在计算机视觉领域的地位,为后续的神经网络研究提供了启示。
import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
import os# 设置数据目录
train_dir = './garbage_classification/train'
valid_dir = './garbage_classification/test'# 数据预处理
train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255, # 缩放像素值到0-1之间rotation_range=40, # 随机旋转width_shift_range=0.2, # 随机水平平移height_shift_range=0.2, # 随机竖直平移shear_range=0.2, # 随机剪切zoom_range=0.2, # 随机缩放horizontal_flip=True, # 水平翻转fill_mode='nearest') # 填充方式valid_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)# 加载训练集和验证集
train_generator = train_datagen.flow_from_directory(train_dir,target_size=(227, 227), # AlexNet输入大小batch_size=32,class_mode='categorical')valid_generator = valid_datagen.flow_from_directory(valid_dir,target_size=(227, 227),batch_size=32,class_mode='categorical')# 构建AlexNet模型
model = models.Sequential()
model.add(layers.Conv2D(96, (11, 11), strides=(4, 4), activation='relu', input_shape=(227, 227, 3)))
model.add(layers.MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
model.add(layers.Conv2D(256, (5, 5), strides=(1, 1), activation='relu', padding='same'))
model.add(layers.MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
model.add(layers.Conv2D(384, (3, 3), strides=(1, 1), activation='relu', padding='same'))
model.add(layers.Conv2D(384, (3, 3), strides=(1, 1), activation='relu', padding='same'))
model.add(layers.Conv2D(256, (3, 3), strides=(1, 1), activation='relu', padding='same'))
model.add(layers.MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(4096, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(4096, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(6, activation='softmax')) # 6种垃圾分类# 打印模型摘要
model.summary()# 配置模型训练过程
model.compile(loss='categorical_crossentropy',optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),metrics=['acc'])# 训练模型
history = model.fit(train_generator,steps_per_epoch=100,epochs=30,validation_data=valid_generator,validation_steps=50)# 保存模型和权重
model.save('garbage_classification.h5')
model.save_weights('garbage_classification_weights.h5')
相关文章:
经典分类模型回顾16-AlexNet实现垃圾分类(Tensorflow2.0版)
AlexNet是2012年由亚历克斯克里斯托夫(Alex Krizhevsky)等人提出的一种卷积神经网络结构,它在ImageNet图像识别比赛中获得了第一名,标志着卷积神经网络的崛起。 AlexNet的结构包括8层网络,其中前5层为卷积层ÿ…...
vue3使用vuex
第一步安装: package.json { "name": "demo", "version": "0.1.0", "private": true, "scripts": { "serve": "vue-cli-service serve", "build": "vue-c…...
Java面向对象:抽象类的学习
本文介绍了抽象类的基本语法概念,什么是抽象类. Java中抽象类的语法,抽象类的特性 抽象类的作用(抽象类和普通类的区别) 用抽象类实现多态… 抽象类的学习一.什么是抽象类二.抽象类语法三.抽象类的特性四.抽象类的作用五. 抽象类实现多态一.什么是抽象类 在面向对象的概念中&am…...
modbus转profinet网关连接5台台达ME300变频器案例
通过兴达易控Modbus转Profinet(XD-MDPN100)网关改善网络场景,变频器有掉线或数据丢失报警,影响系统的正常运行,将5台 ME300变频器modbus转Profinet到1200PLC,通过网关还可以实现Profinet转modbus RTU协议转…...
多校园SaaS运营智慧校园云平台源码 智慧校园移动小程序源码
智慧校园管理平台源码 智慧校园云平台源码 智慧校园全套源码包含:电子班牌管理系统、成绩管理系统、考勤人脸刷卡管理系统、综合素养评价系统、请假管理系统、电子班牌发布系统、校务管理系统、小程序移动端、教师后台管理系统、SaaS运营云平台(支持多学…...
用DQN实现Atari game(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 强化学习研究的是Agent和环境交互中如何学习最优策略,以获得最大收益。Agent需要能够观察环境(observe)所处的状态&…...
【JavaSE专栏11】Java的 if 条件语句
作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…...
【opensea】opensea-js 升级 Seaport v1.4 导致的问题及解决笔记
一、opensea 协议升级导致旧包不能使用了 我使用的是 “opensea-js”: "^4.0.12” 版本当SDK。于2023年3月9日之后,不能使用了,需要升级到 Seaport v1.4 协议的包。 报错如下: Error: API Error 400: Please provide an OPEN order type when us…...
JS语法(扫盲)
文章目录一、初识JavaScript二、第一个JS程序JS代码的引入JS程序的输出三、语法变量使用动态类型内置类型运算符强类型语言&弱类型语言条件语句循环语句数组创建数组获取数组元素新增数组元素删除数组元素函数语法格式形参实参个数的问题匿名函数&函数表达式作用域作用…...
归并排序的学习过程(代码实现)
归并排序的学习过程 在知乎上搜索相关内容: 先在必应和知乎上搜索归并排序的概念: 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型…...
add_header重写的坑
问题描述: nginx 的 add_header 配置在很多文档中都标注为:“可以覆盖响应头”,然而并没有说出使用场景,导致不少开发人员在使用 add_header 时都出现了错误:add_header 根本没有重写响应头! add_header 的…...
跑步耳机入耳好还是不入耳好,最适合运动的蓝牙耳机
运动耳机在户外佩戴牢固度以及佩戴舒适度是十分重要的,入耳式的耳机在佩戴当中会更有沉浸式听感,骨传导耳机在运动当中佩戴更舒适、更牢固。在选购时可以按照自己的需求来选购,希望看完这篇对你有所帮助。 1、南卡Runner Pro4骨传导蓝牙运动…...
深度学习知识点简单概述【更新中】
文章目录人工神经网络的定义神经元的定义神经元的功能单层神经网络感知机人工神经网络的定义 人工神经网络(英语:Artificial Neural Network,ANN),简称神经网络(Neural Network,NN)或类神经网络,是一种模仿生物神经网络(动物的中…...
【编程基础】009.输入两个正整数m和n,求其最大公约数和最小公倍数。
最大公约数与最小公倍数 题目描述 输入两个正整数m和n,求其最大公约数和最小公倍数。 输入格式 两个整数 输出格式 最大公约数,最小公倍数 样例输入 5 7 样例输出 1 35 题目思路 在这里我们用m表示较大的那个数,n表示较小的数。求…...
Golang错误处理
介绍 如果你写过任何 Go 代码,你可能遇到过内置error类型。Go 代码使用error值来指示异常状态。例如,函数在打开文件失败时os.Open返回一个非零值。error func Open(name string) (file *File, err error) 下面的代码用于os.Open打开一个文件。如果发生错误,它会调用log.Fat…...
English Learning - L2 语音作业打卡 复习对比 [ɑ:] [æ] Day18 2023.3.10 周五
English Learning - L2 语音作业打卡 复习对比 [ɑ:] [] Day18 2023.3.10 周五💌发音小贴士:💌当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音 [ɑ:]…...
LabVIEW中以编程方式获取VI克隆名称
LabVIEW中以编程方式获取VI克隆名称演示如何以编程方式获取VI的名称或克隆名称。如果VI作为顶级VI运行,则将显示VI的名称。如果VI在主VI中用作子VI,它将返回克隆的名称。在项目开发过程中,有时需要获取VI的名称。在此示例中,实现了…...
Mysql count(*)的使用原理以及InnoDb的优化策略
Mysql count的原理你真的了解吗?1、数据库引擎的区别2、InnoDB中count的使用3、innodb对select(\*)的优化/为什么select(\*)通过非聚集索引效率要高于聚集索引面试问到说“你觉得count(*) 的效率怎么样?”,一般回复innodb对count(*)进行优化后…...
一文入门HTML+CSS+JS(样例后续更新)
一文入门HTMLCSSJS(样例后续更新)前言HTML,CSS和JS的关系HTMLhead元素titlelinkmetabody元素设置网页正文颜色与背景颜色添加网页背景图片设置网页链接文字颜色设置网页边框文字与段落标记普通文字的输入对文字字体的设置 font使用文字的修饰…...
【STL】Vector剖析及模拟实现
✍作者:阿润菜菜 📖专栏:C vector的常用接口 首先贴上:vector的文档介绍,以备查阅使用。 vector的基本框架: vector的成员变量分别是空间首部分的_start指针和最后一个元素的下一个位置的_finish指针,以…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
