结构型模式 (Python版)

计算机组成原理:存储器容量扩充详解与实战 存储器容量扩充是计算机组成原理的核心考点,涉及位扩充与字扩充。通过多片存储芯片的并联与串联,解决CPU对更大容量和更宽数据线的需求。其原理基于地址线分配与片选译码,低位地址线共用,高位地址线译码。技术价值在于实现内存条等实际存储系统,应用场景包括嵌入式系统外扩存储器和考试解题。掌握芯片数量计算、地址线分配和片选逻辑设计,能有效应对各类存储器扩充题目。 阅读详情

代理模式

from abc import ABC, abstractmethod


# 买的行为(抽象类)
class Buy(ABC):

    @abstractmethod
    def buy_ticket(self):
        pass


# 男人(具体类)
class Man(Buy):

    # 男人买票
    def buy_ticket(self):
        print("Man 买票成功!")


# 女人(具体类)
class Woman(Buy):

    # 女人买票
    def buy_ticket(self):
        print("Woman 买票成功!")


# 代理(抽象类)
class Agency(ABC):

    def __init__(self, people: Buy):
        self._people = people  # 用来保存要代理的对象(男人或女人)

    @abstractmethod
    def click_to_buy_ticket(self):
        pass


# 美团代理(具体类)
class MeiTuan(Agency):

    def click_to_buy_ticket(self):
        print("正在通过美团进行买票...")
        self._people.buy_ticket()


# 携程代理(具体类)
class XieCheng(Agency):

    def click_to_buy_ticket(self):
        print("正在通过携程进行买票...")
        self._people.buy_ticket()


if __name__ == '__main__':
    man = Man()  # 实例化一个男人
    woman = Woman()  # 实例化一个女人

    man.buy_ticket()  # 男人直接自己买票
    woman.buy_ticket()  # 女人直接自己买票

    meituan = MeiTuan(man)  # 男人使用(打开)了美团
    meituan.click_to_buy_ticket()  # 通过美团进行买票

    xiecheng = XieCheng(woman)  # 女人使用(打开)了携程
    xiecheng.click_to_buy_ticket()  # 通过携程进行买票

装饰者模式

from abc import ABC, abstractmethod


# 人物(抽象类)
class People(ABC):

    def __init__(self):
        self._wearingState = ""  # 记录人物的穿着状态

    @abstractmethod
    def show(self):  # 展示人物的穿着状态
        pass


# 女孩(具体类)
class Girl(People):

    def __init__(self):
        super().__init__()
        self._wearing_state = "女孩穿着,长裤睡衣,长袖睡衣"

    def show(self):
        print(self._wearing_state)


# 男孩(具体类)
class Boy(People):

    def __init__(self):
        super().__init__()
        self._wearing_state = "男孩穿着,短裤睡衣,短袖睡衣"

    def show(self):
        print(self._wearing_state)


# 换装(抽象类)
class ChangeClothes(ABC):

    def __init__(self, people: People):
        self._people = people  # 维护一个要进行换装的对象(男孩或女孩)
        self._changed_state = ""  # 记录换装后的穿着状态

    # 展示最新的穿着状态
    @abstractmethod
    def show(self):
        pass


# 换成校服
class ChangeIntoSchoolUniform(ChangeClothes):

    def __init__(self, people: People):
        super().__init__(people)
        self._changed_state = "但是最后换成了校服"

    # 展示最新的穿着状态
    def show(self):
        self._people.show()
        print(self._changed_state)


# 换成运动装
class ChangeIntoSportswear(ChangeClothes):

    def __init__(self, people: People):
        super().__init__(people)
        self._changed_state = "但是最后换成了运动装"

    # 展示最新的穿着状态
    def show(self):
        self._people.show()
        print(self._changed_state)


if __name__ == '__main__':
    # 实例化一个男生,并展示他的穿着状态
    boy = Boy()
    boy.show()

    # 实例化一个女生,并展示她的穿着状态
    girl = Girl()
    girl.show()

    # -------------------- 装饰 - -------------------

    # 让男生穿上运动装,并再次展示他的穿着状态
    boy = ChangeIntoSportswear(boy)
    boy.show()

    # 让女生穿上校服,并再次展示她的穿着状态
    girl = ChangeIntoSportswear(girl)
    girl.show()

适配器模式

对象适配器

"""
    电源插座案例:三插头和两插头的适配
    用户本身只有三插头
    用户现在需要将三插头转换为两插头
"""

from abc import ABC, abstractmethod


# 三插头(具体类)
class ThreePlug:

    # 让三插头进行充电
    def three_plug_charge(self):
        print("开始充电...")


# 两插头形状(抽象类)
class TwoPlugShape(ABC):

    # 让两插头进行充电(抽象)
    @abstractmethod
    def two_plug_charge(self):
        pass


# 两插头(具体类)
class TwoPlug(TwoPlugShape):

    # 让两插头进行充电(实现)
    def two_plug_charge(self):
        print("开始充电...")


# 插头转换器(本质是一个两插头,里面维护了一个三插头对象)
class PlugConverter(TwoPlugShape):

    def __init__(self, obj: ThreePlug):
        self._three_plug = obj  # 保存(维护)一个三插头对象

    # 让两插头进行充电(实现)
    def two_plug_charge(self):
        print("温馨提示:您正在使用插头转换器")  # 插头转换器新增的提示功能
        self._three_plug.three_plug_charge()  # 保持使用三插头原本的充电功能


if __name__ == '__main__':
    # 实例化一个三插头
    three_plug = ThreePlug()

    # 先尝试一下直接充电
    three_plug.three_plug_charge()

    # 在三插头上面安装一个转换器,将其转成两插头(即:实例化一个插头转换器)
    two_plug = PlugConverter(three_plug)

    # 对它进行充电
    two_plug.two_plug_charge()

类适配器

"""
    电源插座案例:三插头和两插头的适配
    用户本身只有三插头
    用户现在需要将三插头转换为两插头
"""

from abc import ABC, abstractmethod


# 三插头(具体类)
class ThreePlug:

    # 让三插头进行充电
    def three_plug_charge(self):
        print("开始充电...")


# 两插头形状(抽象类)
class TwoPlugShape(ABC):

    # 让两插头进行充电(抽象)
    @abstractmethod
    def two_plug_charge(self):
        pass


# 两插头(具体类)
class TwoPlug(TwoPlugShape):

    # 让两插头进行充电(实现)
    def two_plug_charge(self):
        print("开始充电...")


# 插头转换器(通过同时继承两插头和三插头实现转换)
class PlugConverter(TwoPlugShape, ThreePlug):

    # 让两插头进行充电(实现)
    def two_plug_charge(self):
        print("温馨提示:您正在使用插头转换器")  # 插头转换器新增的提示功能
        self.three_plug_charge()  # 保持使用三插头原本的充电功能


if __name__ == '__main__':
    # 实例化一个三插头
    three_plug = ThreePlug()

    # 先尝试一下直接充电
    three_plug.three_plug_charge()

    # 实例化一个插头转换器,它内部自带三插头,但是对外显示两插头
    two_plug = PlugConverter()

    # 对它进行充电
    two_plug.two_plug_charge()

桥接模式

"""
    案例:生成图案
    要求:颜色类和形状类进行搭配,生成图案:"红色圆形"、"蓝色圆形"、"红色矩形"、"蓝色矩形"
        1. 颜色有两个:红色、蓝色
        2. 形状有两个:圆形、矩形
"""

from abc import ABC, abstractmethod


# 颜色(抽象类)
class Color(ABC):

    @abstractmethod
    def fill_color(self):
        pass


# 红色(具体类)
class Red(Color):

    def fill_color(self):
        print("填充了红色")


# 蓝色(具体类)
class Blue(Color):

    def fill_color(self):
        print("填充了蓝色")


# 形状(抽象类)
class Shape(ABC):

    def __init__(self):
        self._color = None  # 用来存放(维护)一个颜色对象

    def set_color(self, color: Color):  # 设置颜色对象
        self._color = color

    @abstractmethod
    def _draw_shape(self):  # 画出形状
        pass

    def generate(self):  # 生成图案(形状+颜色)
        self._draw_shape()
        self._color.fill_color()


# 圆形形状(具体类)
class Circle(Shape):

    def _draw_shape(self):
        print("画出了圆形 ", end="")


# 矩形形状(具体类)
class Rectangle(Shape):

    def _draw_shape(self):
        print("画出了矩形 ", end="")


if __name__ == '__main__':
    # 创建对象
    red = Red()  # 创建一个红色对象
    blue = Blue()  # 创建一个蓝色对象
    circle = Circle()  # 创建一个圆形对象
    rectangle = Rectangle()  # 创建一个矩形对象

    # 生成图案
    # 1. 红色圆形
    circle.set_color(red)
    circle.generate()

    # 2. 蓝色圆形
    circle.set_color(blue)
    circle.generate()

    # 3. 红色矩形
    rectangle.set_color(red)
    rectangle.generate()

    # 4. 蓝色矩形
    rectangle.set_color(blue)
    rectangle.generate()

外观模式

"""
    编译过程是比较复杂的,通常包含以下内容:
        - 编译器在后台进行语法分析
        - 生成中间代码	(预处理)
        - 生成汇编代码	(编译)
        - 生成机器码		(汇编)
        - 生成可执行程序	(链接)

    虽然如此,现实中 IDE(集成开发环境) 通常能够给我们提供一键编译的方法,方便了我们的开发
    下面,我们将模拟这个过程
"""

from abc import ABC, abstractmethod


# 语法分析
class SyntaxAnalyzer:

    def syntax_parser(self):
        print("分析语法中...")


# 中间代码
class MidCode:

    def generate_middle_code(self):
        print("生成中间代码中...")


# 汇编代码
class AssemblyCode:

    def generate_assembly_code(self):
        print("生成汇编代码中...")


# 机器码
class BinaryCode:

    def generate_binary_code(self):
        print("生成机器码中...")


# 链接
class Link:

    def generate_program(self):
        print("生成可执行程序中...")


# IDE(继承开发环境)
class IDE:

    # 编译
    def compile(self):
        # 创建对象
        sa = SyntaxAnalyzer()
        mc = MidCode()
        ac = AssemblyCode()
        bc = BinaryCode()
        lk = Link()

        sa.syntax_parser()
        mc.generate_middle_code()
        ac.generate_assembly_code()
        bc.generate_binary_code()
        lk.generate_program()

        print("程序运行中...")


if __name__ == '__main__':
    python_IDE = IDE()
    python_IDE.compile()  # 一键编译
    

享元模式

"""
    享元模式(Flyweight Mode)
    案例:用户访问多个相似的网站,这些相似的网站之间,有共享的部分,也有自己独有的部分
"""

from abc import ABC, abstractmethod


# 用户类
class User:

    def __init__(self, username):
        self._username = username

    # 向外提供访问用户名字的接口
    @property
    def name(self):
        return self._username


# 网站类(抽象)
class AbstractWebsite(ABC):

    @abstractmethod
    def show_page(self, user: User):  # 网站为用户提供了展示页面的功能
        pass


# 网站类(具体)
class Website(AbstractWebsite):

    def __init__(self, web_name: str):
        self._web_name = web_name

    def show_page(self, user: User):
        print(f"网站:{self._web_name} 正在为用户:{user.name} 展示页面")


# 网站工厂
class WebsiteFactory:

    def __init__(self):
        self._website_dict = {}  # 网站字典  (key: value)<==>(web名字: web对象)

    # 生成网站
    def generate_website(self, web_name: str):
        # 判断网站字典中是否存在名字为 web_name 的网站,如果没有就创建一个
        if web_name not in self._website_dict:
            self._website_dict[web_name] = Website(web_name)
        return self._website_dict.get(web_name)

    # 查看网站数量
    def check_website_count(self):
        return len(self._website_dict)


if __name__ == '__main__':
    # 实例化一个网站工厂
    web_factory = WebsiteFactory()

    # 让工厂生产出三个网站
    web_1 = web_factory.generate_website("华为官网")
    web_2 = web_factory.generate_website("小米官网")
    web_3 = web_factory.generate_website("腾讯官网")

    # 实例化三个用户
    user_1 = User("小明")
    user_2 = User("小帅")
    user_3 = User("小美")

    # 让三个网站,展示页面给三个用户看
    web_1.show_page(user_1)
    web_2.show_page(user_1)
    web_3.show_page(user_1)
    print("--------------")

    web_1.show_page(user_2)
    web_2.show_page(user_2)
    web_3.show_page(user_2)
    print("--------------")

    web_1.show_page(user_3)
    web_2.show_page(user_3)
    web_3.show_page(user_3)
    print("--------------")

组合模式

from abc import ABC, abstractmethod

"""
    案例:通过组合模式,模仿并实现一个简单的目录文件系统
"""


# 容器(抽象类)
class Container(ABC):

    @abstractmethod
    def get_name(self):  # 获取名字
        pass

    @abstractmethod
    def add(self, obj):  # 添加内容
        pass

    @abstractmethod
    def remove(self, obj):  # 移除内容
        pass

    @abstractmethod
    def get_children(self):  # 获取所有的子对象
        pass


# 目录(具体类)
class Directory(Container):

    def __init__(self, directory_name: str):
        self._directory_name = directory_name
        self._children_list = []  # 孩子列表,用来存放所有的子对象(目录的子对象可以是文件对象,也可以是目录对象)

    def get_name(self):  # 获取目录的名字
        return self._directory_name

    def add(self, obj):  # 向目录里面添加子对象
        self._children_list.append(obj)

    def remove(self, obj):  # 移除目录里面的子对象
        self._children_list.remove(obj)

    def get_children(self):  # 获取目录下的所有的子对象
        return self._children_list


# 文件(具体类)
class File(Container):

    def __init__(self, file_name: str):
        self._file_name = file_name
        self._children_list = []  # 孩子列表,用来存放所有的子对象(虽然文件没有子对象,但是为了格式与上面的统一,就保持风格写了这些代码,即:这些代码没有具体的现实意义)

    def get_name(self):  # 获取文件的名字
        return self._file_name

    def add(self, obj):  # 向文件里面添加子对象(为了保持格式统一,没有具体的现实意义)
        pass

    def remove(self, obj):  # 移除文件里面的子对象(为了保持格式统一,没有具体的现实意义)
        pass

    def get_children(self):  # 获取文件下的所有的子对象(为了保持格式统一,没有具体的现实意义)
        return self._children_list


# 目录节点树(用来显示目录的内容与结构)
def show_tree(obj: Container, width: int):
    # ------- 展示当前目录 -------
    i = 0
    while i < width:
        print("---", end="")
        i += 1
    print(obj.get_name())  # 展示当前对象的名称
    # ------- 展示当前目录 -------

    # ------- 展示当前目录下的子对象 -------
    children = obj.get_children()  # 获取当前目录所有的孩子对象,children 本质是列表
    if not children:  # 不存在子对象,直接返回
        return None
    for obj in children:  # 将对象逐个遍历出来
        show_tree(obj, width + 1)
    # ------- 展示当前目录下的子对象 -------


if __name__ == '__main__':
    # 实例化一个目录,作为根目录
    root_directory = Directory("C:")

    # 实例化一个目录,作为子目录,并将其添加到根目录中
    child_directory = Directory("User")
    root_directory.add(child_directory)

    # 实例化四个文件,将前面两个文件添加到根目录中,后面两个文件添加到子目录中
    file_1 = File("a.txt")
    file_2 = File("b.txt")
    file_3 = File("c.txt")
    file_4 = File("d.txt")

    root_directory.add(file_1)
    root_directory.add(file_2)
    child_directory.add(file_3)
    child_directory.add(file_4)

    # 查看根目录的"目录节点树"
    show_tree(root_directory, 1)

"""
运行结果:

---C:
------User
---------c.txt
---------d.txt
------a.txt
------b.txt

"""
瑞萨RZN2L工业以太网开发避坑指南:EtherCAT从入门到通信调试全流程 本文详细解析了瑞萨RZN2L MPU在工业以太网开发中的EtherCAT从站配置与通信优化全流程。通过硬件设计关键点、协议栈选型、PDO映射策略及DC同步精度优化等实战技巧,帮助开发者快速搭建高效通信框架并解决调试中的常见问题,特别适合工业自动化领域的实时通信需求。 阅读详情

相关推荐

PX4笔记系列(二)vtol_att_control中的tiltrotor解析

update_vtol_state() 注释:采用两段切换的简单逻辑来进行过渡 当切换过渡开关后,飞机将会开始倾转动力,逐渐加速,当飞机获得足够速度后动力将会完全打到向前的位置。对于过渡返回阶段动力则是简单地倾转回来。 如果(不在向前过渡指令下): 当前vtol飞行模式: 1、旋翼模式 无操作 2、固定翼模式 令vtol飞行模式切换到过渡返回模式 3、P1过渡模式 进入过渡失败安全返回至旋翼模式 4、P2过渡模式 进入过渡失败安全返回至旋翼模式 5、过渡返回模式 记录过渡返回时间=当前时间-过渡开始

hypersonicss的博客 1878

结构型模式-python版

结构型设计模式简介

zhanghuaren2003的博客 999

ADI官方例程HDL和No-OS生成Vivado工程

这一步是选择下载源,一般都是选择国内镜像,因为国外的源太慢了,这里选择阿里的镜像,如果没有这个选项可以在下面的User URL里添加就行,选择好源后然后点击下一步。下一步会从你选择的源上下载软件包目录,如果提示Unable to get setup from https://xxxxxx/,返回上一步,选择别的源,例如第二个163网易的源。然后就是你想要安装在哪了,下面的选项好像会决定环境变量存放在哪,不过一般都是个人电脑选择第一个默认的就行,然后点下一步。下好之后双击打开,就是这个界面了,直接点下一步。

代码匠的博客 3832

Python 设计模式(第2版) -- 第二部分(结构型模式)

然后介绍下结构型设计模式。下面是一些结构型设计模式的例子: - 适配器模式:将一个接口转换成客户希望的另外一个接口。它试图根据客户端的需求来匹配不同类的接口。 - 桥接模式:该模式将对象的接口与其实现进行解耦,使得两者可以独立工作。 - 装饰器模式:该模式允许在运行时或以动态方式为对象添加职责。我们可以通过接口给对象添加某些属性。

Talk is cheap, show the code. zhangsihui.pythonanywhere.com 788

STM32使用LORA模块通信

目录 一、模块使用方法 1、模块简介 2、硬件及功能 3、传输方式 二、模块上手 1、连接 2、编写代码 usart3.h usart3.c lora.h lora.c 一、模块使用方法 本文以正点原子ATK-LORA-01模块为例进行介绍。 1、模块简介 ATK-LORA-01-V3.0(V3.0是版本号,下面均以ATK-LORA-01表示该产品)是ALIENTEK推出的一款体积小、微功率、低功耗、高性能远距离LORA无线串口模块。模块设计是采用高效的IS...

qq_54706971的博客 3万+

Yolov5s/Yolov8s网络结构图

yolov8、yolov5网络结构图

Goodness2020的博客 9924

设计模式Python版 享元模式

介绍了GOF设计模式中的享元模式,以及用Python实现享元模式的示例。

分享、交流、合作 1495

三极管吸潮失效分析案例

案例背景三极管也称为晶体三极管,它被视为电子电路中最重要的器件之一。三极管顾名思义具有三个电极,它最主要的功能是电流放大和开关作用。本次失效案例中的三极管在仓库存放一段时间后,在PCBA测试过程中集中发生不良。分析过程1.外观检测对失效样品进行外观检测,未发现明显破损、裂纹等不良。2.X-ray检测对失效样品进行X-ray检测,金线、绑定点未发现异常。3.开封检测对失效样品进行开封检测,发现存在键合点脱落的现象,键合点附近的晶圆破损。4.SEM检测对失效样品进行SEM检测,发现晶圆键合点位置有裂纹和破损,金

sy220504的博客 1042

Python版23种设计模式终极指南:原理+场景+实战代码全覆盖

本文完整实现了23种设计模式的Python代码示例,覆盖创建型结构型行为型三大类别。设计模式本质是代码设计经验的总结避免过度设计:优先使用简单直观的方案结合语言特性:如Python可利用装饰器语法简化实现关注场景匹配:如观察者模式适用于事件驱动系统保持灵活性:通过工厂模式隔离变化点。

燃灯工作室 2120

华为网络实战:5分钟搞定OSPF+VRRP+MSTP多协议联动配置(附完整命令集)

本文深入解析了在企业网络中如何高效协同部署OSPF、VRRP和MSTP三大协议。通过一个典型的双核心网络案例,详细阐述了从规划、配置到验证的完整流程,重点强调了确保MSTP根桥与VRRP主设备一致的设计原则,以实现最优的二层与三层流量转发路径,并提供了完整的命令集和故障排查思路。

weixin_29251337的博客 153

手把手教你用 Cursor 写一个完整的 Web 应用(含前后端 + 部署)

本文介绍如何利用Cursor AI工具从零开发一个完整的全栈待办事项Web应用。文章针对开发者常见痛点——无法独立完成项目闭环,提供了一套AI驱动的全栈开发范式。通过Vue3+Node.js+MySQL技术栈,全程由Cursor自动生成项目架构、前后端代码、数据库设计,并解决联调、部署等关键问题。重点展示了如何用AI完成:项目规划与架构设计、后端接口开发、前端页面实现、跨域联调、打包优化及云端部署全流程。该方法将传统需要3-5天的开发工作压缩至1小时内完成,产出规范可上线的项目,特别适合想突破"碎

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 633

设计模式Python版 适配器模式

介绍了GOF设计模式中的适配器模式,以及用Python实现适配器模式的示例。

分享、交流、合作 1770

openclaw本地模型对接

使用是官方推荐的一种集成方式,它可以简化配置过程。但由于您的系统环境和之前复杂的配置历史,我为您梳理了一个核心流程,并增加了关键的“事后检查”步骤,以确保能从根本上解决问题。

suny8的专栏 2460

设计模式Python版 组合模式

介绍了GOF设计模式中的组合模式,组合模式的实现方式,用Python实现组合模式示例,以及组合模式在Django中的应用。

分享、交流、合作 1285

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

设计模式看了又忘,忘了又看?

文章首发:设计模式看了又忘,忘了又看? 设计模式收藏这篇就够了 耗时了 5 个月,终于把设计模式一整个系列写完。其实设计模式这一系列文章网上已经有很多非常好、非常优秀的文章,为什么要写呢? 一方面是为了学得更扎实,印象中设计模式学习了 2 遍,记得牢的基本就那几个众所周知的,反思前面 2 次学习过程,缺少了思考的过程,没有把知识消化掉转化成自己的,就像动物一样,吃进去的东西没有消化只能排出。...

weixin_33947521的博客 456

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【亲测免费】 探索《精通Python设计模式(第二版)》:构建高效代码的艺术

探索《精通Python设计模式(第二版)》:构建高效代码的艺术 在这个快速发展的编程世界里,掌握高效的编程技术和设计理念是提升软件质量的关键。GitCode上托管的《精通Python设计模式(第二版)》项目,正是一个旨在帮助开发者深入理解并应用Python设计模式的宝贵资源。 项目简介 该项目是一个完整的开源电子书,由Packt Publishing出版,作者是Amit Saha。它全面覆盖了23...

gitblog_00053的博客 427

23种设计模式Python版

目录创建型模式简单工厂模式工厂方法模式抽象工厂模式单例模式原型模式建造者模式结构型模式适配器模式桥接模式组合模式装饰器模式外观模式享元模式代理模式行为型模式职责链模式命令模式解释器模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式模板方法模式访问者模式Reference 创建型模式 简单工厂模式 实现 from abc import abstractmethod, ABCMeta class Product(metaclass = ABCMeta): def __init__(se

ccnuacmhdu的博客 1623

Python 高手编程系列一千九百零九:结构型模式

很长一段时间以来,在 Python 中,Zope 项目中的 Zope 组件架构(Zope ComponentArchitecture,ZCA)提供了最知名的许多结构型模式的实现。Core)信息的一些子集的摘要(参见 http://dublincore.org/),该信息由一个 dict 提供。它描述了一个应该实现需要的行为的类的方法。与 Java 相比,Python 有一个完全不同的类型原理,所以它没有本地支持的接口。Python 的最新版本,但它仍然是一份很好的资料,因为它提供了很多上述模式的基本原理。

2301_77888392的博客 797

Python 高手编程系列七百零九:结构型模式

很长一段时间以来,在 Python 中,Zope 项目中的 Zope 组件架构(Zope ComponentArchitecture,ZCA)提供了最知名的许多结构型模式的实现。Core)信息的一些子集的摘要(参见 http://dublincore.org/),该信息由一个 dict 提供。它描述了一个应该实现需要的行为的类的方法。与 Java 相比,Python 有一个完全不同的类型原理,所以它没有本地支持的接口。Python 的最新版本,但它仍然是一份很好的资料,因为它提供了很多上述模式的基本原理。

2301_77888392的博客 756

Python 高手编程系列二千零九:结构型模式

很长一段时间以来,在 Python 中,Zope 项目中的 Zope 组件架构(Zope ComponentArchitecture,ZCA)提供了最知名的许多结构型模式的实现。Core)信息的一些子集的摘要(参见 http://dublincore.org/),该信息由一个 dict 提供。它描述了一个应该实现需要的行为的类的方法。与 Java 相比,Python 有一个完全不同的类型原理,所以它没有本地支持的接口。Python 的最新版本,但它仍然是一份很好的资料,因为它提供了很多上述模式的基本原理。

2301_77888392的博客 825

Python 高手编程系列一千零九:结构型模式

很长一段时间以来,在 Python 中,Zope 项目中的 Zope 组件架构(Zope ComponentArchitecture,ZCA)提供了最知名的许多结构型模式的实现。Core)信息的一些子集的摘要(参见 http://dublincore.org/),该信息由一个 dict 提供。它描述了一个应该实现需要的行为的类的方法。与 Java 相比,Python 有一个完全不同的类型原理,所以它没有本地支持的接口。Python 的最新版本,但它仍然是一份很好的资料,因为它提供了很多上述模式的基本原理。

2301_77888392的博客 439

python设计模式(十二):结构型模式总结

前面总结了创造型结构模式《python设计模式(四):单例模式及创建型模式总结》,及其创造性模式的常用几种模式总结:《python设计模式(一):工厂方法与抽象工厂及应用场景》、《python设计模式(二):建造者模式》、《python设计模式(三):原型模式—快速实例化类的一种途径》。 后续分量了结构型模式的几种代表模式: 《python设计模式(五):适配器模式——各种类接口的合并》 《...

python之战 720

Python 高手编程系列五百零九:结构型模式

很长一段时间以来,在 Python 中,Zope 项目中的 Zope 组件架构(Zope ComponentArchitecture,ZCA)提供了最知名的许多结构型模式的实现。Core)信息的一些子集的摘要(参见 http://dublincore.org/),该信息由一个 dict 提供。它描述了一个应该实现需要的行为的类的方法。与 Java 相比,Python 有一个完全不同的类型原理,所以它没有本地支持的接口。Python 的最新版本,但它仍然是一份很好的资料,因为它提供了很多上述模式的基本原理。

2301_77888392的博客 985

掌握结构型模式——全景回顾

在前几篇文章中,我们详细探讨了多种结构型设计模式,今天来进行一个大总结——结构型设计模式主要关注类与对象的组合和组织,确保我们能够构建出稳固、灵活且易于维护的软件系统。结构型设计模式为我们提供了组织代码、管理类与对象关系的强大工具,在实际开发中,灵活运用这些模式,可以大大提升代码的灵活性、可维护性和可扩展性。别忘了关注我们的公众号,获取更多有趣的编程知识和实用的代码技巧,我们期待与你的交流与分享!允许你将对象组合成树形结构,以表示“部分-整体”的层次结构,使得客户端可以以一致的方式处理单个对象和组合对象。

Asunqingwen的博客 818

Python 高手编程系列八百零九:结构型模式

很长一段时间以来,在 Python 中,Zope 项目中的 Zope 组件架构(Zope ComponentArchitecture,ZCA)提供了最知名的许多结构型模式的实现。Core)信息的一些子集的摘要(参见 http://dublincore.org/),该信息由一个 dict 提供。它描述了一个应该实现需要的行为的类的方法。与 Java 相比,Python 有一个完全不同的类型原理,所以它没有本地支持的接口。Python 的最新版本,但它仍然是一份很好的资料,因为它提供了很多上述模式的基本原理。

2301_77888392的博客 679

Python 高手编程系列一千八百零九:结构型模式

很长一段时间以来,在 Python 中,Zope 项目中的 Zope 组件架构(Zope ComponentArchitecture,ZCA)提供了最知名的许多结构型模式的实现。Core)信息的一些子集的摘要(参见 http://dublincore.org/),该信息由一个 dict 提供。它描述了一个应该实现需要的行为的类的方法。与 Java 相比,Python 有一个完全不同的类型原理,所以它没有本地支持的接口。Python 的最新版本,但它仍然是一份很好的资料,因为它提供了很多上述模式的基本原理。

2301_77888392的博客 589

设计模式Python版 桥接模式

介绍了GOF设计模式中的桥接模式,用Python实现桥接模式示例,以及桥接模式与适配器模式的联用。

分享、交流、合作 2519
上一篇: 创建型模式 (Python版)
下一篇: 行为型模式 (Python版)
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值