项目_一小时零基础入门Swagger2框架

手把手教你用Matlab实现Copula函数:从理论到代码的完整指南 本文提供了一份在MATLAB中实现Copula函数的完整实战指南。从理解Sklar定理和常见Copula家族(如高斯、t、Clayton)的核心概念出发,详细讲解了数据预处理、边缘分布拟合、概率积分变换等关键步骤。通过具体代码示例,手把手演示了Copula模型的拟合、评估、蒙特卡洛模拟,并进阶应用于金融风险度量(如VaR计算)和条件分布分析,帮助读者掌握这一强大的多变量依赖建模工具。 阅读详情

零基础入门Swagger2框架


0、前言

这个笔记是在2021年8月份左右记录的,当时在做一个项目,起初是前后端不分离的,也就没去想学什么Swagger,写什么接口文档。但是一个人做前端和后端,压力真的很大,所以找了一个搭档专门做前端,项目也转变为前后端分离,我也就抽空去学了一下这个Swagger框架。

emmm,这个框架入门和使用还是很简单的,当时看在B站看的视频,笔记是我边看边敲的,一共花了一小时成功入门,但是毕竟不是自己原创,所以我设置成“转载”。

视频连接:API接口管理Swagger2实战教程。


1、Swagger 简介

1.1、背景

接口文档对于前后端开发人员都十分重要。尤其近几年流行前后端分离后接口文档又变成重中之重。接口文档固然重要,但是由于项目周期等原因后端人员经常出现无法及时更新,导致前端人员抱怨接口文档和实际情况不一致。

很多人员会抱怨别人写的接口文档不规范,不及时更新。但是当自己写的时候确实最烦去写接口文档。这种痛苦只有亲身经历才会牢记于心。

如果接口文档可以实时动态生成就不会出现上面问题,Swagger可以完美的解决上面的问题。


1.2、Open API 是什么?

Open API规范(OpenAPI Specification)以前叫做Swagger规范,是REST API的API描述格式。

Open API文件允许描述整个API,包括:

  1. 每个访问地址的类型。POST或GET。
  2. 每个操作的参数。包括输入输出参数。
  3. 认证方法。
  4. 连接信息,声明,使用团队和其他信息。

Open API规范可以使用YAML或JSON格式进行编写。这样更利于我们和机器进行阅读。

OpenAPI规范(OAS)为REST API定义了一个与语言无关的标准接口,允许人和计算机发现和理解服务的功能,而无需访问源代码,文档或通过网络流量检查。正确定义后,消费者可以使用最少量的实现逻辑来理解远程服务并与之交互。

然后,文档生成工具可以使用OpenAPI定义来显示API,使用各种编程语言生成服务器和客户端的代码生成工具,测试工具以及许多其他用例。

源码和说明参照:https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#oasDocument


1.3、Swagger简介

Swagger是一套围绕Open API规范构建的开源工具,可以帮助设计,构建,记录和使用REST API。

Swagger工具包括的组件:

  1. Swagger Editor :基于浏览器编辑器,可以在里面编写Open API规范。类似Markdown具有实时预览描述文件的功能。
  2. Swagger UI:将Open API规范呈现为交互式API文档。用可视化UI展示描述文件。
  3. Swagger Codegen:将OpenAPI规范生成为服务器存根和客户端库。通过Swagger Codegen可以将描述文件生成html格式和cwiki形式的接口文档,同时也可以生成多种言语的客户端和服务端代码。
  4. Swagger Inspector:和Swagger UI有点类似,但是可以返回更多信息,也会保存请求的实际参数数据。
  5. Swagger Hub:集成了上面所有项目的各个功能,你可以以项目和版本为单位,将你的描述文件上传到Swagger Hub中。在Swagger Hub中可以完成上面项目的所有工作,需要注册账号,分免费版和收费版。

使用Swagger,就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述文件可以去更新接口文档,以及生成各端代码。


2、Springfox

使用Swagger时如果碰见版本更新或迭代时,只需要更改Swagger的描述文件即可。但是在频繁的更新项目版本时很多开发人员认为即使修改描述文件(yml或json)也是一定的工作负担,久而久之就直接修改代码,而不去修改描述文件了,这样基于描述文件生成接口文档也失去了意义。

  • Marty Pitt编写了一个基于Spring的组件swagger-springmvc。Spring-fox就是根据这个组件发展而来的全新项目。
  • Spring-fox是根据代码生成接口文档,所以正常的进行更新项目版本,修改代码即可,而不需要跟随修改描述文件。
  • Spring-fox利用自身AOP特性,把Swagger集成进来,底层还是Swagger。但是使用起来确方便很多。

所以在实际开发中,都是直接使用spring-fox。

附:官网地址。

附:官方源码。


3、Swagger的用法

3.1、编写Spring Boot项目

编写SpringBoot项目,项目中controller中包含一个Handler,测试项目,保证程序可以正确运行。

@RestController
@RequestMapping("/people")
public class DemoController {

    @RequestMapping("/getPeople")
    public People getPeople(Long id, String name){
        People peo = new People();
        peo.setId(id);
        peo.setName(name);
        peo.setAddress("海淀");
        return peo;
    }
}

3.2、导入Spring-fox依赖

在项目的pom.xml中导入Spring-fox依赖。目前最新版本为2.9.2,所以导入的依赖也是这个版本。其中springfox-swagger2是核心内容的封装。其中,springfox-swagger-ui是对swagger-ui的封装。

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

3.3、添加注解

在SpringBoot的启动类中添加@EnableSwagger2注解。添加此注解后表示对当前项目中全部控制器进行扫描,应用Swagger2。

@SpringBootApplication
@EnableSwagger2
public class MyApp {
    public static void main(String [] args){
        SpringApplication.run(MyApp.class,args);
    }
}

3.4、访问Swagger-UI

启动项目后在浏览器中输入"http://ip:port/swagger-ui.html"即可以访问到swagger-ui页面,在页面中可以可视化的进行操作项目中所有接口。


4、Swagger-UI使用

访问swagger-ui.html后可以在页面中看到所有需要生成接口文档的控制器名称。

在这里插入图片描述

每个控制器中间包含多所有控制器方法的各种访问方式。如果使用的是@RequestMapping进行映射,将显示下面的所有请求方式。如果使用@PostMapping将只有Post方式可以能访问,下面也就只显示Post的一个。

在这里插入图片描述

点击某个请求方式中try it out。

在这里插入图片描述

会出现界面要求输入的值。输入完成后点击Execute按钮。

在这里插入图片描述

下面会出现Request URL以及不同状态码响应回来的结果。


5、Swagger配置

可以在项目中创建SwaggerConfig.java,进行配置文档内容。


5.1、配置基本信息

Docket:摘要对象,通过对象配置描述文件的信息。

apiInfo:设置描述文件中info。参数类型ApiInfo

select():返回ApiSelectorBuilder对象,通过对象调用build()可以创建Docket对象。

ApiInfoBuilder:ApiInfo构建器。

@Configuration
public class SwaggerConfig {
    @Bean
    public Docket getDocket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(swaggerDemoApiInfo())
                .select()
                .build();
    }
    
    private ApiInfo swaggerDemoApiInfo(){
        return new ApiInfoBuilder()
                .contact(new Contact("北京尚学堂", 
                                     "http://www.bjsxt.com",
                                     "xxx@163.com"))
                //文档标题
                .title("这里是Swagger的标题")
                //文档描述
                .description("这里是Swagger的描述")
                //文档版本
                .version("1.0.0")
                .build();
    }
}

显示效果如下:

在这里插入图片描述


5.2、设置扫描的包

可以通过apis()方法设置哪个包中内容被扫描。

@Bean
public Docket getDocket() {
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(getApiInfo())
            .select()
            .apis(RequestHandlerSelectors
                  .basePackage("com.bjsxt.controller"))
            .build();
}

5.3、自定义注解设置不需要生成接口文档的方法

5.3.1、自定义注解

注解名称随意。

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface NotIncludeSwagger {
    
}
5.3.2、添加规则

通过public ApiSelectorBuilder apis(Predicate selector)可以设置生成规则。

public static Predicate not(Predicate predicate) :表示不允许的条件。

withMethodAnnotation:表示此注解是方法级别注解。

@Bean
public Docket getDocket(){
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(swaggerDemoApiInfo())
            .select()
            .apis(not(withMethodAnnotation(NotIncludeSwagger.class)))
            .build();
}
5.3.3、添加@NotIncludeSwagger注解

在不需要生成接口文档的方法上面添加@NotIncludeSwagger注解后,该方法将不会被Swagger进行生成在接口文档中。

@NotIncludeSwagger
@RequestMapping("/getPeople2")
public People getPeople2(Integer id, String name, String address){
    People peo = new People();
    peo.setId(id);
    peo.setName(name);
    peo.setAddress(address);
    return peo;
}
5.3.4、设置范围

通过public ApiSelectorBuilder paths(Predicate selector)可以设置满足什么样规则的url被生成接口文档。可以使用正则表达式进行匹配。

下面例子中表示只有以/demo/开头的url才能被swagger生成接口文档。

如何希望全部扫描可以使用paths(PathSelectors.any())。

@Bean
public Docket getDocket(){
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(swaggerDemoApiInfo())
            .select()
            .paths(allowPaths())
            .apis(not(withMethodAnnotation(NotIncludeSwagger.class)))
            .build();
}

private Predicate<String> allowPaths(){
    return or(
            regex("/demo/.*")
    );
}

6、Swagger2常用注解

6.1、@Api

@Api是类上注解。控制整个类生成接口信息的内容。

  • tags:类的名称。可以有多个值,多个值表示多个副本。

  • description:描述,已过时。

@RestController
@RequestMapping("/people")
@Api(tags = {"mydemo"},description = "描述")
public class DemoController {
	
}

在swagger-ui.html中显示效果:

在这里插入图片描述


6.2、@ApiOperation

@ApiOperation写在方法上,对方法进行总体描述

  • value:接口描述
  • notes:提示信息

代码示例:

@ApiOperation(value="接口描述",notes = "接口提示信息")

在swagger-ui中显示效果:

在这里插入图片描述


6.3、@ApiParam

@ApiParam写在方法参数前面。用于对参数进行描述或说明是否为必添项等说明。

  • name:参数名称
  • value:参数描述
  • required:是否是必须
public People getPeople(Integer id, 
                        @ApiParam(value="姓名",required = true) String name, 
                        String address){
    
}

swagger-ui显示效果如下:

在这里插入图片描述


6.4、@ApiModel

@ApiModel是类上注解,主要应用Model,也就是说这个注解一般都是写在实体类上。

  • value:名称
  • description:描述

代码示例:

@ApiModel(value = "人类",description = "描述")
public class People {

}

swagger-ui.html效果展示:

在这里插入图片描述


6.5、@ApiModelProperty

@ApiModelProperty可以用在方法或属性上。用于当对象作为参数时定义这个字段的内容。

  • value:描述
  • name:重写属性名
  • required:是否是必须的
  • example:示例内容
  • hidden:是否隐藏。

代码示例:

@ApiModelProperty(value = "姓名",
                  name = "name",
                  required = true,
                  example = "张三")
private String name;

swagger-ui.html效果展示:

在这里插入图片描述


6.6、@ApiIgnore

@ApiIgnore用于方法或类或参数上,表示这个方法或类被忽略。和之前讲解的自定义注解@NotIncludeSwagger效果类似。只是这个注解是Swagger内置的注解,而@NotIncludeSwagger是我们自定义的注解。


6.7、@ApiImplicitParam

@ApiImplicitParam用在方法上,表示单独的请求参数,总体功能和@ApiParam类似。

  • name:属性名
  • value:描述
  • required:是否是必须的
  • paramType:属性类型
  • dataType:数据类型

代码示例:

@PostMapping("/getPeople")
@ApiImplicitParam(name = "address",
                  value = "地址",
                  required = true,
                  paramType = "query",
                  dataType = "string")
public People getPeople(Integer id, 
                        @ApiParam(value="姓名",required = true) String name, 
                        String address){
	
}

swagger-ui.html效果展示:

在这里插入图片描述

如果希望在方法上配置多个参数时,使用@ApiImplicitParams进行配置。示例如下:

@ApiImplicitParams(value={
	@ApiImplicitParam(name="id",value = "编号",required = true),
	@ApiImplicitParam(name="name",value = "姓名",required = true)
})

扣子Coze触发器使用指南:实现工作流定时执行的完整教程 Coze平台触发器功能详解:定时触发器配置指南 摘要:Coze平台的触发器是实现自动化任务的核心组件,其中定时触发器能够按预设时间自动执行工作流。本指南介绍了定时触发器的配置方法,包括每日、每周、每月及Cron表达式等多种时间设置方式,以及如何关联工作流执行具体任务。文章还提供了健身提醒等实用案例,并涵盖了触发器调试、发布及常见问题解决方案。通过合理配置定时触发器,用户可以轻松实现各类自动化任务,如定时发送消息、数据采集等,大幅提升工作效率。 阅读详情

相关推荐

光学设计必看:如何用泽尼克系数优化镜头像差?从Zemax到实际案例解析

本文深入解析了如何利用泽尼克系数优化镜头像差,从理解其工程价值、解码软件报告,到在Zemax中主动设置优化目标。通过高倍显微物镜等实际案例,详细展示了如何通过分析泽尼克系数诊断问题,并实施针对性优化策略,从而实现对球差、彗差等像差的精准控制,提升光学设计的精细度和系统稳健性。

gg901的博客 1027

【Spring】使用Springfox-Swagger2

@ApiOperation的httpMethod/consumes/produces属性可以不指定,会自动获取SpringMVC的@RequestMapping中的method/consumes/produces属性值

qq_27579471的博客 1万+

别再死记硬背参数了!用ADS手把手教你仿真一个4GHz镜像抑制混频器(附完整工程文件)

本文详细解析了4GHz镜像抑制混频器的ADS仿真全流程,从理论到实践,涵盖混频器设计基础、ADS工程搭建、二极管选型、非线性仿真及性能优化。通过实战案例,帮助工程师掌握关键参数平衡与调试技巧,提升射频电路设计效率。

weixin_42552716的博客 338

Swagger自动配置的实现

1、在讲如何实现swagger自动配置之前,我先讲一下,我们平常使用swagger的时候通常是怎么配置的,如下面的代码块: @Bean @Order(value = 1) public Docket groupRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select()

疾风sxp的博客 2497

物料帐配置之 重估消耗

物料帐配置 ML material ledger

SAP刺客的博客 5910

【DaVinci Developer专题】-28-Client Server Port Interface中useArgumentType、useArrayBaseType和useVoid介绍

共7页 目录 1 ImplPolicy = useArgumentType 2 ImplPolicy = useArrayBaseType 3 ImplPolicy = useVoid 4 三者代码差异部分 5 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键字: 缩略语/术语 含义 DEV DaVinci Developer

「汽车电子助手」的博客 1502

Swagger2快速入门及使用

什么是Swagger? 前后端集成联调,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发 Swagger解决这个问题 管理API接口 生成API文档 + 测试 (postman) 要求:SpringBoot + jdk1.8 以上 开始使用 1.导入依赖 注意版本:2.9.2 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swa

出发,永远是最有意义的事,去做就是了 733

Sigrity System SI SerialLink模式进行Pcie3协议仿真分析操作指导-pcie3_client_single_pre

Sigrity System SI SerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协议需要检查的项目,通过协议分析视为满足设计要求,下面介绍pcie3_client_single_pre仿真分析,具体操作如下。Random(Rj):随机抖动,该抖动用高斯概率分布来描述,通常是由热噪声和其它随机噪声引起的,默认为1.24%UI RMS(平均值),即和标准值的偏差为1.24%UI。

weixin_54787054的博客 598

Swagger2快速入门

Swagger2入门前言一、Swagger2是什么?二、使用Swagger21.引入依赖2.配置Swagger2Swagger2常用注解测试注解访问可视化页面 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、Swagger2是什么?二、使用Swagger21.引入依赖2.配置Swagger2Swagger2常用注解测试注解访问可视化页面 前言 随着前后端分离项目的流行,api文档是最好的沟通方式,Swagger2可以快速生成api文档 一、Swagger2是什么?

weixin_45073880的博客 427

PMP--二模--解题--161-170

A:邀请团队成员在下一次回顾中分享经验。B:请求发起人增加具有所需经验的团队成员。C:在团队内计划知识共享会议。D:请求发起人为团队提供培训课程。A。

stqer的博客 1269

YOLOv8改进 | 融合篇,YOLOv8主干改进融合网络之MobileNetV3+CA注意机制,助力涨点

MobileNetV3通过结合硬件感知网络架构搜索(NAS)和NetAdapt算法,通过新颖的架构改进进一步提升了性能。YOLOv8中的主干网络替换成MobileNetV3+引入CA注意机制

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1881

文档的生成方法_Swagger2—API文档框架(二)

【Swagger2】五、Swagger配置可以在项目中创建SwaggerConfig,进行配置文档内容。1、配置基本信息Docket:摘要对象,通过对象配置描述文件的信息。apiInfo:设置描述文件中info。参数类型ApiInfoselect():返回ApiSelectorBuilder对象,通过对象调用build()可以创建Docket对象ApiInfoBuilder:ApiInfo构建器。...

weixin_42155721的博客 770

使用 SAP 自家的 AI 工具 Joule 辅助 SAP Fiori 应用开发

SAP Joule 不请自答,解释说标记了接口的 UI Component,具备进行异步内容创建的能力,比如其通过 rootView 分配的视图,在运行时可以异步创建。目前 SAP Business Application Studio 里的 SAP Joule 支持下面这八种上下文,绝大部分都和 SAP UI5 开发相关,剩下的则是代码仓库和 SAP 帮助文档的搜索。SAP Joule 回答的大意是:我只负责回答 SAP UI5 开发相关的问题,不要和我扯其他有的没的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1096

2小时掌握Swagger

简介 官网:https://swagger.io/ 前后端分离开发下,API文档说是最好的交流方式不过分吧 Swagger是一个可以生成,描述,可视化RestFul风格的一个框架 1.第一个Hello Swagger 1.1新建springboot项目 2.2添加依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactI

啥都不会 315

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Swagger】一小时掌握Swagger对接SpringBoot

什么是Swagger?

m0_46537958的博客 1683

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【狂神说Java】一小时掌握Swagger技术

<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> ...

weixin_40928238的博客 717

深度学习工具包 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")

Swagger_测试工具_2小时精通

什么是前后端分离 后端时代: ​ 前端只需要管理静态页面,大部分项目还是交由后端完成,以前的JavaWeb项目大多数都是java程序使用模板引擎,又当爹又当妈,又搞前端(ajax/jquery/js/html/css等等),又搞后端(java/mysql/oracle等等)。 前后端分离: ​ 核心思想是前端html页面通过ajax调用后端的restuful api接口并使用json数据进行交互。 后端:后端控制层,服务层,数据访问层 前端:前端控制层,视图层 前端在运行时,使用伪造数据(JSON格式)

weixin_43206491的博客 1589

Stringboot2.0集成Swagger2项目实战

Stringboot集成Swagger2项目实战Swagger是什么Stringboot集成 Swagger配置信息Swagger2常用注解项目实际应用 Swagger是什么 前后端分离开发模式中,api文档是最好的沟通方式。 特点 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 及时性 (接口变更后,能够及时准确地通知相关前后端开发人员) 规范性 (并且保证接口的规范性,如接口的地址,请求方式,参数及响应格式和错误信息) 一致性 (接口信息

CodingAnHour 275

SpringBoot+Swagger2时Swagger-ui.html是404的情况

我头一次使用springboot集成swagger2的时候,以为半个小时就能搞定,后来因为404的问题,搞了三个多小时也没解决掉。 我总结了网上的2种解决方法: 配置webmvc的静态资源访问。 pom里配置guava。 用头一种方法的比较多。 我给出相关链接:配置webmvc静态资源访问、一般是缺少jar包时报错才会用到guava这个(低版本的springboot)但是我在查询自己的bug...

青年小七 3297

如何快速的用用一个小时来学习swagger?从搭建springboot+swagger

Swagger学习新建一个springboot项目编写一个hello工程测试运行配置swagger配置扫描接口及开关配置是否启动swagger让swagger扫描不一样的环境配置Api文档的分组如何配置多个分组;多个Docket实例即可实体类配置 新建一个springboot项目 加入相关依赖 <dependency> <groupId>io.springfox</groupId> <artifact

爱编程的小张 465

Swagger2介绍及简单使用

目录一、简介二、开始使用三、高阶使用 视频资源:一小时掌握Swagger技术 一、简介 swagger是Restfull Api开发工具,提供 接口描述文档 及 调试功能 根据配置自动扫描接口生成接口文档,避免后端接口文档不能及时更新,便于前后端完成联调 详细介绍可参看:https://www.jianshu.com/p/349e130e40d5 二、开始使用 pom引入依赖 (1)springfox-swagger2 <!-- https://mvnrepository.co

liuhao的博客 1220

Swagger半小时入门,并足以搞定日常需求

Swagger从入门到精通你只需要半小时

resuper0的博客 412

使用Swagger2Markup导出swagger2文档

很简单的几步,但是在网上看了一些教程都没有讲得很清楚,花费了两个小时,特写下此篇博客,记录一下; 引入依赖与插件 <!--swagger静态化输出依赖--> <dependency> <groupId>io.github.swagger2markup</groupId> <artifactId>swagge...

qq_35140272的博客 3338

swagger入门

目录一、什么是swagger二、SpringBoot集成swagger三、配置swagger四、swagger注解1、Model 实体类注解2、Controller 接口注解 学习目标 了解swagger的作用和概念 了解回顾前后端分离 集成Springboot 一、什么是swagger 流行的API框架,RestFul API文档在线自动生成工具,API文档与API定义同步更新,直接运行,可以在线测试接口 前后端分离:Vue + Springboot 后端时代:前端只用管理静态页面;后端的模板引

翱翔于世纪的博客 307

如何让API逆向工程从数小时缩短到几分钟?mitmproxy2swagger的自动化解决方案

面对复杂的REST API逆向工程,你是否还在手动分析网络请求、逐个提取参数、费力编写API文档?在微服务架构和移动应用开发日益普及的今天,API逆向工程已成为开发者无法回避的挑战。传统的抓包分析方式不仅效率低下,还容易出错,而手动编写OpenAPI规范更是耗时耗力。那么,有没有一种方法能够将繁琐的API逆向工程自动化,让开发者专注于业务逻辑而非文档编写? mitmproxy2swagger正是

gitblog_00739的博客 709

1小时搞定API原型:Swagger+Mock数据方案

每个路径的GET/POST等动作明确定义参数类型(query/path/body)严格声明响应数据结构完整描述使用扩展字段标注Mock规则(如x-mock)

SilverfoxOwl19的博客 640
上一篇: 项目_前后端分离认证解决方案_JWT认证
下一篇: 项目_MySQL服务器被入侵,数据丢失,一招教你恢复数据【已恢复】
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值