设计模式的学习思路
学习设计模式确实需要一定的时间和实践,尤其是对于刚入门的人来说,因为一开始可能会感到有些混淆,尤其是当多个设计模式看起来有相似之处时。本博客是博主学习设计模式的思路历程,大家可以一起学习进步。设计模式学习-CSDN博客
1. 理解设计模式的本质
首先,要理解设计模式的本质。设计模式并不是具体的代码实现,而是解决某类问题的通用解决方案。设计模式的目标通常是提高代码的灵活性、可重用性和可扩展性。
每个设计模式都是为了应对特定类型的问题而提出的,这些问题可能是:
- 对象如何创建
- 如何组织和组合对象
- 如何分配对象之间的职责
- 如何优化对象之间的交互
2. 学习设计模式的顺序
设计模式有很多,但学习时建议按以下顺序进行,因为这些模式从简单到复杂,帮助你逐步建立起对模式的理解:
1) 基础模式(创建型模式)
创建型模式主要关注如何实例化对象,常见的有:
- 单例模式(保证类只有一个实例)
- 工厂方法模式(通过工厂方法创建对象)
- 抽象工厂模式(提供一组相关对象的创建)
- 建造者模式(分步骤构建复杂对象)
- 原型模式(通过复制对象来创建新对象)
2) 结构型模式
结构型模式主要关注如何将类和对象组织成更大的结构,常见的有:
- 适配器模式(将接口转换为客户端需要的接口)
- 桥接模式(分离抽象和实现)
- 组合模式(将对象组合成树形结构)
- 装饰者模式(动态地添加功能)
- 外观模式(简化接口,提供统一的入口)
- 享元模式(通过共享对象来减少内存消耗)
- 代理模式(为对象提供代理)
3) 行为型模式
行为型模式主要关注对象之间的交互和职责分配,常见的有:
- 观察者模式(定义依赖关系,自动通知)
- 策略模式(封装算法,便于切换)
- 命令模式(将请求封装为对象)
- 状态模式(基于对象状态的行为变化)
- 模板方法模式(定义算法骨架,允许子类实现具体步骤)
- 迭代器模式(遍历集合而不暴露内部结构)
- 责任链模式(请求在多个处理者之间传递)
- 中介者模式(通过中介者简化多个对象的交互)
- 备忘录模式(保存和恢复对象的状态)
- 访问者模式(为对象结构添加新操作)
3. 理解每个模式的结构与组件
每个设计模式都有一个特定的结构,了解这个结构能够帮助你理解模式的核心。以策略模式为例,它通常包括:
- Context:上下文,使用策略的类。
- Strategy:策略接口,定义了算法的共同接口。
- ConcreteStrategy:具体策略类,提供算法的实现。
4. 区分使用场景
1) 创建对象的场景
- 工厂模式:当你需要创建的对象类型很多,并且你希望通过工厂方法来集中控制对象的创建时,使用工厂模式。
- 单例模式:当你需要确保类只有一个实例,并且该实例需要全局共享时,使用单例模式。
- 建造者模式:当你需要创建一个复杂的对象,且这个对象的创建过程包含多个步骤时,使用建造者模式。
2) 对象组合和组织的场景
- 组合模式:当你需要将对象组合成树形结构并统一处理时,使用组合模式。比如文件系统、UI组件。
- 适配器模式:当你需要让不兼容的接口能一起工作时,使用适配器模式。比如第三方库和系统间接口的适配。
- 桥接模式:当你希望将抽象和实现分离,并且能够独立扩展这两个部分时,使用桥接模式。
3) 行为变化和职责分配的场景
- 观察者模式:当你希望在一个对象的状态变化时通知多个依赖者时,使用观察者模式。比如事件系统。
- 策略模式:当你需要在不同算法之间进行切换时,使用策略模式。比如支付方式的选择(信用卡支付、微信支付等)。
- 状态模式:当一个对象的行为在不同的状态下有不同表现时,使用状态模式。比如游戏中的角色状态(待机、攻击、受伤等)。
4) 优化代码灵活性与扩展性的场景
- 装饰者模式:当你需要动态地扩展对象的功能时,使用装饰者模式。比如为UI控件添加新功能(例如为按钮添加点击事件)。
- 命令模式:当你需要将请求封装为对象并支持撤销、重做等操作时,使用命令模式。比如文本编辑器中的“撤销”操作。
5. 例子简要说明
设计模式有很多种,它们分别适用于不同的应用场景,解决不同类型的问题。下面我将按类别(创建型、结构型、行为型)列出常见的设计模式,以及它们的优缺点和使用场景。
一、创建型模式
创建型模式主要关注如何实例化对象。它们通过不同方式将对象的创建与使用解耦,提高系统的灵活性。
1. 单例模式 (Singleton)
- 优点:
- 保证某个类只有一个实例,并提供全局访问点。
- 避免了重复创建对象,节省资源。
- 缺点:
- 因为全局唯一的实例,可能导致系统的某些部分耦合过紧。
- 不利于单元测试(可能需要额外的模拟机制)。
- 使用场景:
- 需要控制全局访问的实例,例如数据库连接池、配置管理器、日志管理器等。
2. 工厂方法模式 (Factory Method)
- 优点:
- 客户端代码不需要知道具体的类,减少了系统之间的耦合。
- 可以动态决定实例化的类,便于扩展。
- 缺点:
- 需要为每一个产品类创建一个工厂类,增加代码量。
- 使用场景:
- 客户端不知道需要哪一类对象,或者具体的类在运行时才决定。
- 对象创建的代码可能发生变化,不希望客户端代码受到影响。
3. 抽象工厂模式 (Abstract Factory)
- 优点:
- 提供一个接口,能够创建一系列相关或相互依赖的对象。
- 系统不需要知道具体的产品类,减少了耦合。
- 缺点:
- 引入抽象工厂和多个产品族,增加系统复杂度。
- 使用场景:
- 需要创建一组相关的对象,且这些对象可能属于不同的产品族。
- 对象之间有一些共同的特性,但可能有不同的实现。
4. 建造者模式 (Builder)
- 优点:
- 可以构建复杂对象,且构建过程可以灵活控制。
- 可以将复杂的对象创建过程与表示分离。
- 缺点:
- 需要定义多个具体建造者,增加代码量。
- 使用场景:
- 当一个对象的构建过程比较复杂,且需要创建多个变体时。
- 需要将对象构建的过程与表示分离,适用于需要一步一步构建对象的情况。
5. 原型模式 (Prototype)
- 优点:
- 可以通过复制现有的对象来创建新对象,避免了重复创建。
- 支持对象的克隆和配置,可以动态改变对象的状态。
- 缺点:
- 需要为所有类实现克隆方法,增加了实现复杂性。
- 使用场景:
- 当创建一个对象的代价很大时,克隆对象更为高效。
- 系统需要通过现有对象生成新的对象。
二、结构型模式
结构型模式关注类和对象如何组合以形成更大的结构。
1. 适配器模式 (Adapter)
- 优点:
- 使得不兼容的接口能够协同工作,增加了系统的可扩展性。
- 可以将现有代码复用而无需修改。
- 缺点:
- 增加了额外的类,可能会使系统复杂化。
- 使用场景:
- 需要将两个不兼容的接口结合在一起时。
- 系统需要调用不同接口的类,但是这些类的接口不兼容。
2. 桥接模式 (Bridge)
- 优点:
- 将抽象和实现分离,便于扩展。
- 可以独立地变化抽象和实现部分,增加系统灵活性。
- 缺点:
- 系统中类的数量会增加,可能增加系统复杂性。
- 使用场景:
- 系统需要在多个平台之间独立变化时,或者有多种产品、平台、功能组合。
- 需要解耦接口和实现的细节。
3. 组合模式 (Composite)
- 优点:
- 使客户端能够一致地对待单个对象和对象组合。
- 可以简化客户端代码,提高代码的可维护性。
- 缺点:
- 使得设计更加复杂,可能需要更多的抽象。
- 使用场景:
- 树形结构的数据表示(如文件系统)。
- 需要统一处理树形结构中节点和叶子节点的场景。
4. 装饰器模式 (Decorator)
- 优点:
- 动态地给对象增加职责,比继承更加灵活。
- 避免了类的膨胀,增加了扩展性。
- 缺点:
- 会产生多个小类,增加系统的复杂度。
- 使用场景:
- 需要给对象动态添加功能,且不想通过继承来实现。
- 需要在不修改类的情况下扩展对象的功能。
5. 外观模式 (Facade)
- 优点:
- 提供了一个简化的接口,减少了系统复杂性。
- 可以将客户端与系统的多个子系统解耦。
- 缺点:
- 可能会引入不必要的抽象,降低系统灵活性。
- 使用场景:
- 需要简化系统接口,隐藏复杂性。
- 系统有多个子系统,需要为子系统提供一个统一的接口。
6. 享元模式 (Flyweight)
- 优点:
- 通过共享相同的对象来减少内存消耗,提高性能。
- 可以节省大量内存,适用于大量对象的场景。
- 缺点:
- 需要管理共享对象的生命周期,增加了复杂性。
- 使用场景:
- 大量相似对象的场景,尤其是对象数量非常多但大部分属性相同的情况。
- 适用于需要大量共享和重复使用的对象。
7. 代理模式 (Proxy)
- 优点:
- 可以控制对真实对象的访问,起到保护、缓存等作用。
- 提高系统的性能,支持懒加载等优化。
- 缺点:
- 增加了系统的复杂度,可能引入不必要的层次。
- 使用场景:
- 控制对某个对象的访问,例如懒加载、虚拟代理。
- 需要保护、缓存或延迟加载某个对象。
三、行为型模式
行为型模式主要关注对象之间的通信和职责分配。
1. 责任链模式 (Chain of Responsibility)
- 优点:
- 允许多个处理对象来处理请求,减少了请求发送者与处理者之间的耦合。
- 可以灵活地添加处理者。
- 缺点:
- 可能导致请求在链中传递太久,降低效率。
- 使用场景:
- 需要多个对象共同处理请求的场景,处理请求的对象顺序不确定时。
2. 命令模式 (Command)
- 优点:
- 将请求发送者与接收者解耦。
- 可以很方便地将请求存储、撤销或重做。
- 缺点:
- 需要创建大量的命令对象,增加系统复杂性。
- 使用场景:
- 需要将请求调用者与请求接收者解耦时。
- 支持撤销、重做操作时。
3. 解释器模式 (Interpreter)
- 优点:
- 适用于一些固定语法和规则的场景,可以非常方便地扩展。
- 缺点:
- 系统可能会变得过于复杂,且难以维护。
- 使用场景:
- 需要处理一个语言或规则的场景,如正则表达式解析、SQL语法分析。
4. 迭代器模式 (Iterator)
- 优点:
- 提供一种方法来顺序访问集合中的元素,不暴露集合的内部结构。
- 缺点:
- 对于某些集合类型来说,可能会存在性能问题。
- 使用场景:
- 需要访问集合中的元素,而不希望暴露集合的实现时。
5. 中介者模式 (Mediator)
- 优点:
- 减少了对象之间的依赖关系,将复杂的交互关系集中管理。
- 通过中介者对象协调其他对象的行为,提高了系统的松耦合性。
- 缺点:
- 中介者可能会变得过于复杂,成为单一责任的“神类”,从而降低灵活性。
- 使用场景:
- 当系统中的多个对象相互依赖,导致紧耦合的情况时。
- 需要集中管理多个对象之间的交互,避免直接引用和依赖。
6. 备忘录模式 (Memento)
- 优点:
- 可以保存对象的状态,便于恢复对象的状态,支持撤销操作。
- 保持对象状态的同时不暴露对象的内部实现。
- 缺点:
- 增加了系统的复杂度和存储空间,因为需要额外的存储状态。
- 使用场景:
- 需要支持撤销/重做功能的应用,如编辑器、文本处理软件等。
- 需要保存和恢复对象状态的场景。
7. 观察者模式 (Observer)
- 优点:
- 当一个对象的状态改变时,能够自动通知依赖的对象。
- 促进了对象之间的松耦合,增加了系统的灵活性。
- 缺点:
- 如果观察者过多,可能导致系统的性能下降。
- 依赖对象的数量无法预见,可能会导致某些依赖对象未被更新。
- 使用场景:
- 需要建立一种一对多的依赖关系,当一个对象的状态变化时,其他依赖对象需要自动更新的情况。
- UI界面更新时,常用于实现发布/订阅模式。
8. 状态模式 (State)
- 优点:
- 通过改变对象的状态来改变其行为,符合状态变化的设计。
- 状态独立,便于扩展和修改。
- 缺点:
- 可能导致系统中的类和状态过多,增加了复杂性。
- 状态类和上下文之间需要更多的协作,可能导致维护困难。
- 使用场景:
- 当一个对象的行为随着其状态变化而变化时。
- 适用于状态机模式,如编程语言的解释器、TCP协议的状态机等。
9. 策略模式 (Strategy)
- 优点:
- 可以动态地选择不同的算法或策略,使得系统更加灵活和可扩展。
- 避免了条件语句的重复使用,减少了代码重复。
- 缺点:
- 需要创建多个策略类,增加了类的数量。
- 客户端必须知道所有的策略,可能需要额外的配置或管理策略。
- 使用场景:
- 需要在运行时动态选择算法或策略的情况。
- 不同的策略在某些情况下有不同的表现,适用于例如排序算法、支付方式等。
10. 模板方法模式 (Template Method)
- 优点:
- 可以将不变的部分留给子类实现,复用父类的公共部分。
- 方便扩展和修改,只需要修改子类中的特定部分。
- 缺点:
- 父类方法的变化可能会影响子类,子类之间的差异性较大时不方便扩展。
- 使用场景:
- 定义一个算法的骨架,允许子类实现某些步骤的场景。
- 常用于框架的开发、代码复用、自动化流程等。
11. 访问者模式 (Visitor)
- 优点:
- 可以在不修改类结构的情况下增加新的操作,符合开放/封闭原则。
- 使得操作可以跨越多个类的属性和方法,具有较好的扩展性。
- 缺点:
- 增加了系统的复杂性,且可能导致访问者与被访问者之间的耦合性增强。
- 适用场景较为特殊,使用不当会使设计过于复杂。
- 使用场景:
- 系统需要对一组不同类的对象执行操作时。
- 需要在不改变类结构的前提下,增加新的操作,如编译器中的语法分析、数据结构的遍历等。
总结:
设计模式是面向对象设计的经典解决方案,不同的设计模式适用于不同的需求和问题。在选择设计模式时,要根据项目的实际情况和需求,综合考虑模式的优缺点,以达到系统高效、可扩展和维护的目标。
- 创建型模式:主要是对象的创建和管理,解决对象实例化和组织结构问题。
- 结构型模式:关注类和对象之间的组织,简化复杂结构,增强系统的可复用性。
- 行为型模式:涉及对象之间的协作,优化通信和职责分配。
相关文章:
设计模式的学习思路
学习设计模式确实需要一定的时间和实践,尤其是对于刚入门的人来说,因为一开始可能会感到有些混淆,尤其是当多个设计模式看起来有相似之处时。本博客是博主学习设计模式的思路历程,大家可以一起学习进步。设计模式学习-CSDN博客 1…...
stereopy 查看 data.tl 的可用属性
为了查看 data.tl 的可用属性,您可以使用 Python 的内置函数,例如 dir() 或 vars(),具体操作如下: 1. 列出 data.tl 的所有属性 使用 dir() 来查看所有可用的属性和方法: # 列出所有属性 print(dir(data.tl))这将返回一个列表,包含所有可用的方法、属性和内部字段。 2.…...
【2024APMCM亚太杯A题】详细解题思路
A题 复杂场景下的水下图像增强研究 解题思路问题一图像统计分析技术一、检测 偏色 的技术二、检测 弱光 的技术三、检测 模糊 的技术 聚类算法 问题二问题三问题四完整论文与代码 解题思路 问题一 问题 1:请使用类似上文提到的图像统计分析技术,对附件 …...
用 React18 构建Tic-Tac-Toe(井字棋)游戏
下面是一个完整的 Tic-Tac-Toe(井字棋)游戏的实现,用 React 构建。包括核心逻辑和组件分离,支持两人对战。 1. 初始化 React 项目: npx create-react-app tic-tac-toe cd tic-tac-toe2.文件结构 src/ ├── App.js…...
数据结构及算法--排序篇
在 C 语言中,可以通过嵌套循环和比较运算符来实现常见的排序算法,比如冒泡排序、选择排序或插入排序 目录 基础算法: 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序&…...
泷羽sec学习打卡-网络七层杀伤链1
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于蓝队基础的那些事儿-Base1 基本的企业网络架构是怎样的呢?高层管理IT管理影子IT中央技术…...
【QT】绘图
个人主页~ 绘图 一、绘图1、基础内容2、绘制形状(1)线段(2)矩形(3)圆形(4)文本(5)画笔(6)画刷 3、绘制图片(1)…...
vue3+elementui-plus el-dialog全局配置点击空白处不关闭弹窗
在与main.ts同级下的plugins文件夹(如果没有,新建一个)下建一个element.js文件(名字随便取) element.js文件内容如下: import ElementPlus from element-plus export default (app) > {console.log(app…...
Markdown语法说明
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
推荐一款专业电脑护眼工具:CareUEyes Pro
CareUEyes Pro是一款非常好用的专业电脑护眼工具,软件小巧,界面简单,它可以自动过滤电脑屏幕的蓝光,让屏幕显示更加的不伤眼,更加舒适,有效保护你的眼睛,可以自定义调节屏幕的色调,从…...
对subprocess启动的子进程使用VSCode python debugger
文章目录 1 情况概要(和文件结构)2 具体设置和启动步骤2.1 具体配置Step 1 针对attach debugger到子进程Step 2 针对子进程的暂停(可选) Step 3 判断哪个进程id是需要的子进程 2.2 启动步骤和过程 3 其他问题解决3.13.2 ptrace: Operation not permitted…...
Django启用国际化支持(2)—实现界面内切换语言:activate()
文章目录 ⭐注意⭐1. 配置项目全局设置:启用国际化2. 编写视图函数3. 配置路由4. 界面演示5、扩展自动识别并切换到当前语言设置语言并保存到Session设置语言并保存到 Cookie ⭐注意⭐ 以下操作依赖于 Django 项目的国际化支持。如果你不清楚如何启用国际化功能&am…...
基于单片机的多功能跑步机控制系统
本设计基于单片机的一种多功能跑步机控制系统。该系统以STM32单片机为主控制器,由七个电路模块组成,分别是:单片机模块、电机控制模块、心率检测模块、音乐播放模块、液晶显示模块、语音控制模块、电源模块。其中,单片机模块是整个…...
VSCode 如何选中包含某个字母的所有行
文章目录 写在前面一、需求描述二、解决方法参考链接 写在前面 自己的测试环境:VSCode 一、需求描述 由于需要处理文件,需求是删除文件中包含某个字母的所有行。 二、解决方法 在 Visual Studio Code (VSCode) 中,如果你想选中所有包含某…...
CSRF保护--laravel进阶篇
laravel对csrf非常重视,专门针对csrf作出了很多的保护。如果您是刚刚接触laravel的路由不久,那么您可能对于web.php路由文件的post请求很疑惑,因为get请求很顺利,而post请求则可能会遭遇失败。其中一个失败的原因是由于laravel的c…...
计算机网络-理论部分(二):应用层
网络应用体系结构 Client-Server客户-服务器体系结构:如Web,FTP,Telnet等Peer-Peer:点对点P2P结构,如BitTorrent 应用层协议定义了: 交换的报文类型,请求or响应报文类型的语法字段的含义如何…...
k8s1.31版本最新版本集群使用容器镜像仓库Harbor
虚拟机 rocky9.4 linux master node01 node02 已部署k8s集群版本 1.31 方法 一 使用容器部署harbor (1) wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce systemctl enable docker…...
QT中使用json格式存取矩阵数据
在 Qt 中,可以通过 QJsonDocument 和 QJsonArray 方便地存取 JSON 格式的矩阵数据。以下是存储和读取矩阵数据的完整实现示例。 1. 矩阵存储为 JSON 将矩阵(QVector<QVector<double>> 或其他二维数组)存储为 JSON 文件。 实现代码 #include <QJsonArray&g…...
k8s 集群安装
安装rockylinux https://www.jianshu.com/p/a5fe20318b8e https://www.cnblogs.com/haoee/p/18290506 配置VirtualBox双网卡 https://www.cnblogs.com/ShineLeBlog/p/17580311.html https://zhuanlan.zhihu.com/p/341328334 https://blog.csdn.net/qq_36544785/article/deta…...
Elasticsearch面试内容整理-核心概念与数据模型
在 Elasticsearch 中,理解核心概念与数据模型是非常重要的,因为它们定义了数据如何被组织、存储和搜索。以下是 Elasticsearch 的核心概念和数据模型的详细介绍。 核心概念 集群(Cluster) ● 集群是由一个或多个节点组成的,用于共同存储和搜索数据的集合。...
Spring Boot实现License生成和校验
Spring Boot实现License生成和校验 证书准备 # 1. 生成私钥库 # validity:私钥的有效期(天) # alias:私钥别称 # keystore:私钥库文件名称(生成在当前目录) # storepass:私钥库密码…...
es写入磁盘的过程以及相关优化
数据写入到内存buffer同时写入到数据到translog buffer,这是为了防止数据不会丢失每隔1s数据从buffer中refresh到FileSystemCache中,生成segment文件,这是因为写入磁盘的过程相对耗时,借助FileSystemCache,一旦生成segment文件,就能通过索引查询到了refresh完,memory bu…...
十大网络安全事件
一、私有云平台遭攻击,美国数千家公司工资难以发放 1月,专门提供劳动力与人力资本管理解决方案的美国克罗诺斯(Kronos)公司私有云平台遭勒索软件攻击,事件造成的混乱在数百万人中蔓延。 克罗诺斯母公司UKG集团…...
【数据结构】【线性表】栈的基本概念(附c语言源码)
栈的基本概念 讲基本概念还是回到数据结构的三要素:逻辑结构,物理结构和数据运算。 从逻辑结构来讲,栈的各个数据元素之间是通过是一对一的线性连接,因此栈也是属于线性表的一种从物理结构来说,栈可以是顺序存储和顺…...
修改ffmpeg实现https-flv内容加密
目录 1 前言 2 ffmpeg源码修改 2.1 增加头文件 2.2 http上下文增加解密密钥和AVAESCTR结构体 2.3 aes解密上下文初始化 2.4 对http数据部分解密 2.5 http关闭时清理资源 3 ffmpeg使用 1 前言 当前视频拉流已经通过URL鉴权方式来对访客身份进行识别和过滤,但…...
react中useMemo的使用场景
useMemo 是 React 的一个 Hook,用来优化性能,尤其是在计算复杂值时。它会记住(缓存)计算结果,只有在依赖项变化时才重新计算,避免不必要的重复计算。 import React, { useMemo } from react; function Ex…...
Pytorch自定义算子反向传播
文章目录 自定义一个线性函数算子如何实现反向传播 有关 自定义算子的实现前面已经提到,可以参考。本文讲述自定义算子如何前向推理反向传播进行模型训练。 自定义一个线性函数算子 线性函数 Y X W T B Y XW^T B YXWTB 定义输入M 个X变量,输出N个…...
aws服务(二)机密数据存储
在AWS(Amazon Web Services)中存储机密数据时,安全性和合规性是最重要的考虑因素。AWS 提供了多个服务和工具,帮助用户确保数据的安全性、机密性以及合规性。以下是一些推荐的存储机密数据的AWS服务和最佳实践: 一、A…...
VMware Workstation 17.6.1
概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1: 本月11号官宣:针对所有人免费提供,包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后,双击默认安装即可: 一路单击下一步按钮: 等待…...
高校企业数据挖掘平台推荐
TipDM数据挖掘建模平台是由广东泰迪智能科技股份有限公司自主研发打造的可视化、一站式、高性能的数据挖掘与人工智能建模服务平台,致力于为使用者打通从数据接入、数据预处理、模型开发训练、模型评估比较、模型应用部署到模型任务调度的全链路。平台内置丰富的机器…...
厂房建设公司哪家好/太原网站制作优化seo
在OneNote中DIY自己需要的模板https://www.zhihu.com/video/1198284361613672449在印象笔记中,通过表格的添加和自定义,我们可以做出几乎任何生活、工作或学习当中所需的模板。而在 OneNote 当中,可以怎么做呢?在 Windows 电脑的 …...
wordpress https 404/网站模板平台资源
一、卷积: 卷积在 pytorch 中有两种方式: 【实际使用中基本都使用 nn.Conv2d() 这种形式】 一种是 torch.nn.Conv2d(),一种是 torch.nn.functional.conv2d(),这两种形式本质都是使用一个卷积操作,这两种形式的卷积对于…...
看那种片哪个网站好用/百度电话号码
随着电子商务成为 B2B 公司不断增长的销售渠道,B2B 在线销售额每天都在增长。这并非偶然,尤其是当我们谈论美国或欧洲最大的公司时,但他们采用了电子采购技术,因其具有巨大的价值。 对于供应商: ○ 增加B2B销售。“电子…...
免费咨询图片大全/seo的优化技巧有哪些
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net /** Fatal.h - by FreeMan*/#include <stdio.h> #include <stdlib.h>#define Error( St…...
江苏交通建设监理协会网站/山东搜索引擎优化
一、CNN卷积神经网络结构的演化 二、AlexNet 网络结构 三、AlexNet迁移学习 迁移学习可以把为一个任务开发的模型重新用在另一个不同的任务中,作为另一个任务模型的起点,并节约训练神经网络需要的大量计算和时间资源。 例如采用在计算机视觉挑战赛通过Im…...
免备案网站怎么收录/seo专员岗位职责
https://www.douban.com/group/topic/33113176/?typelike&start0 加入小组有一段时间了,自己本身月亮双鱼,遇到心理上的阻碍,会看看前辈关于疏导这个月座软弱与无力的贴,感觉受益匪浅。 不知道大家发现米有,月座…...