关于深度学习的一份介绍
在这篇文章中,我将介绍有关深度学习的东西,主要是它与神经网络的关系、目前主要的网络有哪些,以及加深神经网络的意义等。
一、联系
在之前的文章中,我曾介绍过神经网络,而所谓的神经网络其实就是深度学习的一种架构,当神经网络的不存在隐藏层时,就是普通的感知机,但如果添加并加深隐藏层数,那么就是深度学习。加深这些隐藏层数量,可以增强模型的学习能力,使之能够处理更为复杂的数据结构和模式,这是深度学习的一大特点。
二、主要网络
通常,我们认为是在2012年举行的大规模图像识别大赛ILSVRC以压倒性优势胜出而被人们重视深度学习。而随着这些年的发展,主要的网络有VGG、GoogleNet、ResNet等。
接下来我将大致介绍一下这三种网络:
2.1 VGG
VGG是由卷积层和池化层够成的基础CNN,其中,它具有权重的层数一般都是16层或者19层,因此,它也被叫做VGG16或VGG19。如下是一个使用了该网络进行预测的代码:
import tensorflow as tf
from tensorflow.keras.applications import VGG16
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()train_images = tf.image.resize(train_images, [75, 75])
test_images = tf.image.resize(test_images, [75, 75])train_images, test_images = train_images / 255.0, test_images / 255.0train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)base_model = VGG16(weights='imagenet', include_top=False, input_shape=(75, 75, 3))model = Sequential()
model.add(base_model)
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dense(4096, activation='relu'))
model.add(Dense(10, activation='softmax')) for layer in base_model.layers:layer.trainable = Falsemodel.compile(optimizer=Adam(lr=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('Test accuracy:', test_acc)
2.2 GoogleNet
GoogleNet与CNN具有相同的结构,但不同的是GoogleNet在具有长度的基础上也具有宽度,即广度,而它这种横向具有宽度的结构被称为“Inception结构”。这种Inception结构使用许多不同大小的滤波器和池化,然后再将之合并。GoogleNet的特征正是将这种结构作为一个构成元素去构成整个网络,因此,该网络也称为Inception-v1。如下是使用这种网络的代码:
import tensorflow as tf
from tensorflow.keras.applications import InceptionV3
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, GlobalAveragePooling2D
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()train_images = tf.image.resize(train_images, [75, 75])
test_images = tf.image.resize(test_images, [75, 75])train_images, test_images = train_images / 255.0, test_images / 255.0train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)base_model = InceptionV3(weights='imagenet', include_top=False, input_shape=(75, 75, 3))model = Sequential()
model.add(base_model)
model.add(GlobalAveragePooling2D())
model.add(Dense(1024, activation='relu'))
model.add(Dense(10, activation='softmax')) for layer in base_model.layers:layer.trainable = Falsemodel.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),loss='categorical_crossentropy',metrics=['accuracy'])history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('Test accuracy:', test_acc)
2.3 ResNet
ResNet是微软团队开发的网络,它比其它的网络具有更深的结构。但通常,如果我们一味加深网络,往往会出现各种各样的问题,导致性能的不佳,因此,在该网络中导入了“快捷结构”,它也叫“捷径”或“快捷连接”。
其中,出现的主要问题就是梯度消失或梯度爆炸以及退化问题,具体来说就是在深层网络中,反向传播过程中的梯度可能会变得非常小(梯度消失)或非常大(梯度爆炸),这使得网络难以训练。而退化问题就是即使优化算法能够解决梯度消失或爆炸的问题,更深的模型性能可能并不会如预期那样优于较浅的模型。实际上,在某些情况下,更深的模型性能反而会下降。
解决这些问题的方法——快捷连接,具体来说,这些连接将输入直接加到输出层上(假设尺寸匹配;如果不匹配,则通过线性投影调整尺寸),形成所谓的“残差块”。这种设计让网络学习残差函数F(x)=H(x)−x,而不是原始的目标映射H(x),其中x是输入,H(x)是期望的底层映射。
如下是使用这种网络的代码:
import tensorflow as tf
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.utils import to_categorical(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()train_images = tf.image.resize(train_images, [224, 224])
test_images = tf.image.resize(test_images, [224, 224])train_images, test_images = train_images / 255.0, test_images / 255.0train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))model = Sequential()
model.add(base_model)
model.add(GlobalAveragePooling2D())
model.add(Dense(1024, activation='relu'))
model.add(Dense(10, activation='softmax'))for layer in base_model.layers:layer.trainable = Falsemodel.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),loss='categorical_crossentropy',metrics=['accuracy'])history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('Test accuracy:', test_acc)
三、加深的意义
随着神经网络深度的加深,一般会有这些方面的意义,分别是表达能力的提升、解决复杂问题的能力的提升、参数效率、迁移学习等。
具体来说,首先是表达能力方面,随着网络层数的增加,神经网络能够学习到数据中更复杂的特征和模式。深层网络可以捕捉到输入数据中的多层次抽象表示,从而更好地理解图像、文本或声音等复杂的数据结构;
然后是解决复杂能力的提升,随着神经网络深度的加深,其可以构建出更加复杂的函数模型,从而能更好去处理复杂的任务;
接着是参数效率,因为深度的加深,神经网络可以逐层提炼和组合特征,而不是一次性就去捕捉所有的细节,所以性能可以得到很好的提升;
最后是迁移学习上,我们可以先构建一个较深的网络出来,然后训练这个较深的网络得到优秀的参数,接着将这些参数复制到新的网络上再学习,这样可以得到更好的效果来,并降低过拟合的风险以及减少训练时间。
此上
相关文章:
关于深度学习的一份介绍
在这篇文章中,我将介绍有关深度学习的东西,主要是它与神经网络的关系、目前主要的网络有哪些,以及加深神经网络的意义等。 一、联系 在之前的文章中,我曾介绍过神经网络,而所谓的神经网络其实就是深度学习的一种架构…...
JavaScript系列02-函数深入理解
本文介绍了JavaScript函数相关知识,包括 函数声明与函数表达式 - 解释两者的区别,提升行为,以及使用场景箭头函数特性 - 讲解语法、词法this、不能作为构造函数等特点this绑定机制 - 详细讲解四种绑定规则:默认绑定、隐式绑定、显…...
Netty是怎么实现Java NIO多路复用的?(源码)
目录 NIO多路复用实现事件循环是什么?核心源码(1)调用 NioEventLoopGroup 默认构造器(2)指定 SelectorProvider(3)创建 Selector(4)创建单线程和队列(5&#…...
SourceTree配置SSH步骤详解
1. 生成SSH密钥对 如果尚未生成SSH密钥,需先创建: Windows/macOS/Linux通用方法 打开终端(或Git Bash)。 输入以下命令(替换为你的邮箱): bash 复制 ssh-keygen -t ed25519 -C "your_em…...
Rocky Linux 8.5 6G内存 静默模式(没图形界面)安装Oracle 19C
Oracle19c 下载地址 Database Software Downloads | Oraclehttps://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_ee 目录 一、准备服务器 1、服务器可以克隆、自己装 2、修改主机名 3、重启 4、关闭selinux 5、关闭防火墙 5.1、…...
免费轻巧多功能 PDF 处理工具:转换、压缩、提取一应俱全
软件技术 今天要给大家分享一款超实用的 PDF 处理工具,它免费又轻巧,如同随时待命的得力小帮手,功能之强大超乎想象,真的值得大家收藏。 这款工具是绿色版软件,解压后开启,满满的 PDF 处理功能便映入眼帘…...
基于ssm的校园跑腿管理系统+vue
作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统共有管理员、用户两个角色 管理员主要的功能用户信息管理、任务信息管理、任务类型管理、接单信息管理、公告信息管理、投诉信息管理、公告类型管…...
java数据结构_Map和Set_9.1
1. 搜索树 1.1 概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有的结点都小于根结点的值若它的右子树不为空,则右子树上所有的结点都大于根结点的值…...
横向移动靶场-Tr0ll: 3
Tr0ll: 3来自 <Tr0ll: 3 ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.187 3,对靶机进行端口服务探测 …...
请解释 Node.js 中的网络模块(http、https),如何创建 HTTP服务器?
1. Node.js 中的网络模块(http 和 https) 原理与作用: Node.js 的 http 和 https 模块是内置的核心模块,用于创建 HTTP 和 HTTPS 服务器。 http 模块基于 Node.js 的事件驱动架构,利用 libuv 和 HTTP parser 库高效处…...
【WPF命令绑定之--没有Command属性的控件如何进行命令绑定?】
前言 C#WPF之命令绑定 内容 有些控件不支持直接绑定命令,可以调用其他依赖实现命令的绑定。 依赖:Microsoft.Xaml.Behaviors.Wpf 使用如下代码可以实现事件的命令绑定,及传递参数: 1、引用:xmlns:behavior“http://sch…...
记20忘10之六:line
记20忘10之六:line 胖子定律:每天坚持多咬两口,相信将来自己就是个胖子 今天,我们继续来记几个单词吧, line n.线 moral bottom line道德底线 派生、同源或相关: linear a.线的,直线的lineamen…...
【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...
【系统稳定性】1.11 QVM稳定性问题分析(一)
目录 写在前面 一,qvm进程异常 1.1 进程崩溃(Coredump) 1.2 进程卡死 1.3 进程重启 二,qvm进程异常分析过程 写在前面 在QVM(Quantum Virtual Machine)作为HOST QNX的Guest,同样会遇到重启、Watchdog(看门狗)等稳定性问题。 这里我们把qvm的异常归类为两类问题…...
使用ChatGPT-Deep Reaserch两步给出文献综述!
文献综述是学术论文写作中不可或缺的一部分,它不仅是对已有研究的梳理和总结,更是为后续研究奠定理论基础的关键步骤。通过文献综述研究者能够全面了解当前研究领域的现状、主要观点和研究方法,从而找到自己研究的切入点和创新点。这一过程需…...
从0开始的操作系统手搓教程14——进一步完成中断子系统
目录 所以,如何查看我们的IDT呢 改进我们的中断处理hook 对8253编程,提升系统的频率 导论 控制字说明 说一下每个方式——概论 说一说计数器如何进行计时 方式0 方式1 方式2 方式3 方式4 方式5 回到问题,我们如何设置单次触发冲…...
小米火龙CPU和其他几代温度太高的CPU是由谁代工的
小米火龙CPU”并非小米自研芯片,而是指搭载在小米手机上的部分高通骁龙处理器因发热问题被调侃为“火龙”。以下是几款被称为“火龙”的高通CPU及其代工情况: 骁龙810 骁龙810是高通历史上最著名的“火龙”之一,采用台积电20nm工艺代工。由于…...
Educational Codeforces Round 174 (Rated for Div. 2)
Problem - B - Codeforces 之前没思路,我看了看答案。 思路不就来了: 简而言之,BFS那样遍历周围(上下左右均一次),如果有同色,就把这部分相邻的隔开,可以得到两块陌生人集合&#x…...
微服务即时通信系统---(七)文件管理子服务
目录 功能设计 模块划分 业务接口/功能示意图 服务实现流程 服务代码实现 封装文件操作模块(utils.hpp) 获取唯一标识ID 文件读操作 文件写操作 编写proto文件 文件元信息 文件管理proto 单文件上传 多文件上传 单文件下载 多文件下载 RPC调用 服务端创建子…...
mosfet的驱动设计-开关损耗
目录 1.开关时的DS损耗 2.导通损耗 3.截止损耗 4.驱动损耗 mos管的损耗主要有开关损耗和导通损耗两部分,开关损耗包括mos管开通是消耗的能量和在mos在线性区产生的损耗。导通损耗是由mos的导通电阻电阻消耗的能量。 mos的实际模型 我们先来感性的…...
Unity3D 对象实例化详解
前言 在Unity3D中,对象的实例化是游戏开发中非常常见的操作。无论是生成敌人、道具,还是动态创建UI元素,实例化都是实现这些功能的核心技术之一。本文将详细介绍Unity3D中对象实例化的原理、技术细节以及代码实现。 对惹,这里有…...
萌新学 Python 之 with 文件操作语句
with 语句用于资源管理,避免资源泄露,对文件操作时,不管文件是否有异常,都会自动清理和关闭 with 语句的格式: with open(文件路径, mode模式, encodingutf-8) as file_obj: # as 取别名print(对文件进行操作&…...
C# Unity 唐老狮 No.2 模拟面试题
本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…...
FFmpeg-chapter3-读取视频流(原理篇)
ffmpeg网站:About FFmpeg 1 库介绍 (1)libavutil是一个包含简化编程函数的库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。 (2)libavcodec是一个包含音频/视频编解码器的解码器和编…...
Docker迁移/var/lib/docker之后镜像容器丢失问题
迁移/var/lib/docker时,如果目标目录少写一个/,/etc/docker/daemon.json中的data-root后面需要多加一级目录docker。 若迁移命令如下 rsync -avz /var/lib/docker /home/docker/ 在/etc/docker/daemon.json中添加如下内容 "data-root": &q…...
单片机中的flah和RAM
片机的 Flash 和 RAM 是两种关键的内存类型,分别用于存储程序代码和运行时数据。 Flash 存储器 用途:用于存储程序代码(如固件)和常量数据(如查找表、字符串等)。 特点: 非易失性:断…...
【Pytest】setup和teardown的四个级别
文章目录 1.setup和teardown简介2.模块级别的 setup 和 teardown3.函数级别的 setup 和 teardown4.方法级别的 setup 和 teardown5.类级别的 setup 和 teardown 1.setup和teardown简介 在 pytest 中,setup 和 teardown 用于在测试用例执行前后执行一些准备和清理操…...
第8天:面向对象编程入门 - 类与对象
第8天:面向对象编程入门 - 类与对象 一、📚 今日学习目标 🎯 掌握类与对象的定义与使用🔧 理解封装、继承、多态三大特性💡 完成银行账户管理系统实战🛠️ 学会构造函数与析构函数的编写 二、⚙️ 核心知…...
单细胞marker基因表达密度图-(还有一个包装函数)
有小伙伴说想要做单细胞marker基因表达密度图,我一想,好像之前是做过的(单细胞marker基因可视化的补充---密度图与等高线图)。但是他又说没有文献中的效果。后来我一看,是因为着色的问题。其实用Nebulosa包(…...
python多线程之Event机制笔记
Event 事件 笔记 1. 基本概念 threading.Event 是 Python 线程同步的基础组件,本质是一个布尔标志位,提供跨线程的事件通知机制。 2. 核心方法 方法作用描述set()设置事件为 True,唤醒所有等待线程clear()重置事件为 Falsewait(timeoutNo…...
