EasyPoi导出 导入(带校验)简单示例 EasyExcel

开发笔记 | EasyPoi快速学习实现excel导入导出 easypoi学习笔记 阅读详情

官方文档 : http://doc.wupaas.com/docs/easypoi

pom的引入:

<!--        easyPoi-->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.4.1.Final</version>
        </dependency>
<!--        hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-core</artifactId>
            <version>5.7.7</version>
        </dependency>

1.建立一个对象体

@Data
public class EasyPoiEntity {
    @Excel(name = "姓名")
    private String name;
    @Excel(name = "年龄")
    private int age;
    @Excel(name = "地址")
    private String addr;

}

2.导出代码

    @GetMapping("/exportExcel")
    public void test(HttpServletRequest request, HttpServletResponse response)throws IOException {
    //模拟数据  实际基本查数据
        EasyPoiEntity easyPoiEntity = new EasyPoiEntity();
        easyPoiEntity.setName("张三");
        easyPoiEntity.setAddr("中国");
        easyPoiEntity.setAge(18);
        List<EasyPoiEntity> list = new ArrayList<>();
        list.add(easyPoiEntity);
        //2.封装成表格
        //参数1:表格标题,参数2:sheet名称
//        ExportParams exportParams = new ExportParams("学生信息", "1班学生信息");
        ExportParams exportParams = new ExportParams();
        exportParams.setSheetName("学生信息");
        exportParams.setStyle(EasyExcelStyleType.ONE.getCla());
        //参数1:表格参数  参数2:实体类  参数3:数据
        Workbook sheets = ExcelExportUtil.exportExcel(exportParams, EasyPoiEntity.class, list);

        //3.返回表格
        //设置表格文件名字
        // 生成时间戳
        String timestamp = DateUtil.format(LocalDateTime.now(), "yyyyMMddHHmmss");
        String fileName = "一班学生数据-"+timestamp;
        fileName = URLEncoder.encode(fileName,"UTF8");
        //设置返回数据类型
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");

        //将表格输出
        sheets.write(response.getOutputStream());

    }

导出Excel
在这里插入图片描述

导入例子

1.对象加上校验注解 实现 IExcelDataModel, IExcelModel

@Data
public class EasyPoiEntity implements IExcelDataModel, IExcelModel {
    @Excel(name = "姓名")
    @Pattern(regexp = "[\u4E00-\u9FA5]*", message = "不是中文")
    private String name;
    @Max(value = 15,message = "max 最大值不能超过15")
    @Excel(name = "年龄")
    private int age;
    @NotNull(message = "地址不能为空")
    @Excel(name = "地址")
    private String addr;

    /**
     * 行号
     */
    private int rowNum;

    /**
     * 错误消息
     */
    private String errorMsg;

}

导入代码 params.setVerifyHandler(excelVerifyInfo);看后面

    @PostMapping("/importExcel")
    @ResponseBody
    public Object importUser(@RequestParam("uploadFile") MultipartFile multipartFile,HttpServletResponse resp) {
        ImportParams params = new ImportParams();

        /**
         * 这里需要注意表头的行数设置一定要正确!否则集合数据将无法读取,
         * 可以通过WPS或者office查看实际表头所占用的行数,
         * 一定要区分表头与标题的区别,表头是列名称,标题是表头上面的文字,
         * 本文示例文件中没有标题,所以setTitleRows为0
         */
        // 设置表头行数
        params.setHeadRows(1);
        // 标题行设置为0行,默认是0,可以不设置
        params.setTitleRows(0);
//        代表导入这里是需要验证的(根据字段上的注解校验)
        params.setNeedVerify(true);
        //设及一个自定义校验 (自定义校验名字不可重复)
        params.setVerifyHandler(excelVerifyInfo);
        try {
            ExcelImportResult<EasyPoiEntity> importResult = ExcelImportUtil.importExcelMore(multipartFile.getInputStream(), EasyPoiEntity.class, params);
            boolean verfiyFail = importResult.isVerfiyFail();
            System.out.println(verfiyFail);
            System.out.println(importResult.getFailList().toString());
            System.out.println(importResult.getList().toString());

            //验证是否有失败的数据
            if (importResult.isVerfiyFail()) {
                ServletOutputStream fos = resp.getOutputStream();
                //mime类型
                resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
                // 生成时间戳
                String timestamp = DateUtil.format(LocalDateTime.now(), "yyyyMMddHHmmss");

                resp.setHeader("Content-disposition", "attachment;filename=" + timestamp + "-error.xlsx");
                importResult.getFailWorkbook().write(fos);
                fos.close();
            }
            return importResult.getList();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

导入Excel例子
在这里插入图片描述
返回的异常Excel
在这里插入图片描述
对于想自定义异常的 自己写一个实现类实现 IExcelVerifyHandler<>即可
代码如下:

@Component
public class  ExcelVerifyInfo implements IExcelVerifyHandler<EasyPoiEntity> {
    private final ThreadLocal<List<EasyPoiEntity>> threadLocal = new ThreadLocal<>();
    @Override
    public ExcelVerifyHandlerResult verifyHandler(EasyPoiEntity easyPoiEntity) {
        StringJoiner joiner = new StringJoiner(",");
        List<EasyPoiEntity> threadLocalVal = threadLocal.get();
        if (threadLocalVal == null) {
            threadLocalVal = new ArrayList<>();
        }

        /**
         * 所有的自定义校验 可以再这里写 比如查数据 比较之类
         */
//        if (easyPoiEntity.getName().equals("张三")){
//            joiner.add("eeeeee");
//        }


        threadLocalVal.forEach(e -> {
            if (e.getName().equals(easyPoiEntity.getName())) {
                int lineNumber = e.getRowNum() + 1;
                joiner.add("名字与" + lineNumber + "行重复");
            }
        });
        // 添加本行数据对象到ThreadLocal中
        threadLocalVal.add(easyPoiEntity);
        threadLocal.set(threadLocalVal);
        if (!Objects.equals(joiner.length(),0)) {
            return new ExcelVerifyHandlerResult(false, joiner.toString());
        }
        return new ExcelVerifyHandlerResult(true);
    }
}

关于空行问题

Excel经常会有空行但是有格式的行 我们读取的时候 会读到这些行 然后对象就都是空的 这可能会影响到数据的处理 我是在校验类里面做了判断 如下:

@Component
public class  ExcelVerifyInfo implements IExcelVerifyHandler<EasyPoiEntity> {
    private final ThreadLocal<List<EasyPoiEntity>> threadLocal = new ThreadLocal<>();
    @Override
    public ExcelVerifyHandlerResult verifyHandler(EasyPoiEntity easyPoiEntity) {
        if ( StringUtils.isAllBlank(easyPoiEntity.getName(), easyPoiEntity.getAddr()) && Objects.equals(easyPoiEntity.getAge(),0)) {
            // 空行数据,返回false表示无效,EasyPoi会过滤掉该行数据
            return new ExcelVerifyHandlerResult(false);
        } else {
            // 非空行数据,返回true表示有效
            StringJoiner joiner = new StringJoiner(",");
            List<EasyPoiEntity> threadLocalVal = threadLocal.get();
            if (threadLocalVal == null) {
                threadLocalVal = new ArrayList<>();
            }

            /**
             * 所有的自定义校验 可以再这里写 比如查数据 比较之类
             */
//        if (easyPoiEntity.getName().equals("张三")){
//            joiner.add("eeeeee");
//        }


            threadLocalVal.forEach(e -> {
                if (e.getName().equals(easyPoiEntity.getName())) {
                    int lineNumber = e.getRowNum() + 1;
                    joiner.add("名字与" + lineNumber + "行重复");
                }
            });
            // 添加本行数据对象到ThreadLocal中
            threadLocalVal.add(easyPoiEntity);
            threadLocal.set(threadLocalVal);
            if (!Objects.equals(joiner.length(),0)) {
                return new ExcelVerifyHandlerResult(false, joiner.toString());
            }
            return new ExcelVerifyHandlerResult(true);
        }

    }
}

假如你对象属性多 不用全都判断是都空 只要找几个必填属性 然后判断为空就认为是空行就行了

数据翻译

1.简单的方式 直接用replace 会在导出导入进行翻译 比如你导出 一般状态是数字 会翻译成中文 导入则相反

    @Excel(name = "状态",replace = {"进行中_1", "完成_2","结束_3"})
    private String status;

Excel导入校验并返回异常Excel

    @PostMapping("/importExcel")
    @ResponseBody
    public void importUser(@RequestParam("uploadFile") MultipartFile multipartFile, HttpServletResponse response) {
        try {
        //自己找一个读的utlis
            List<User> read = EasyExcelUtil.read(multipartFile.getInputStream(), User.class);
            //拿到数据 校验数据 有问题就set导msg 然后把流写出
            List<User> errList = new ArrayList<>();
            for (User user : read) {
                if (user.getName().equals("张三")){
                    user.setMsg("这是一个错误数据");
                    errList.add(user);
                }
            }
            if (CollectionUtil.isNotEmpty(errList)){
                // 生成时间戳
                String timestamp = DateUtil.format(LocalDateTime.now(), "yyyyMMddHHmmss");
                EasyExcelUtil.write(response,"err_"+timestamp,errList,"test");
            }
            System.out.println(read);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

对象

@Data
public class User {
    private String name;
    private String phone;
    private String addr;

    @ContentFontStyle(color = Font.COLOR_RED)
    @ColumnWidth(value = 25)
    private String msg;

}
阿里EasyExcel让你彻底告别easypoi 为什么说EasyExcel可以让你告别easypoi呢?在说这个问题之前我们先来了解下easypoi easypoi easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 这是easypoi官方给出的定义,使用这个工具后发现在进行excel的导入导出时,的确很方便。特别是一些简单的excel 比如这种简单的. 阅读详情

相关推荐

SpringBoot整合EasyPoi实现Excel的导入和导出(带图片)

前言 实际工作中可能会用到Excel的导入和导出功能,Java操作Excel的方式有很多种,这里简单介绍一下如何使用EasyPoi来操作Excel。简单的做个笔记,防止自己忘记。 EasyPoi文档:http://easypoi.mydoc.io/ 项目地址:https://gitee.com/lihongmin5211/springboot_easypoi 准备工作 环境: SpringBoot2.4.0、jdk8、Mysql5.7 表结构: DROP TABLE IF EXISTS `

炫风丶小子 5600

EasyPoi

easypoi的简单学习

ArchieSean 2万+

EasyExcel实现Excel文件多sheet导入导出

一、概述 最近公司需要做一个需求,通过excel上传病例信息,并将病例信息进行归档和整理;该需求可以简化为excel模板下载和excel上传并解析归档。既然知道需求了,找excel的操作工具jar包吧,发现以前常用的poi需要写的代码太多,但是时间紧急,没办法只能找新的工具。easypoi 在读写数据的时候,优先是先将数据写入内存,优点是读写性能非常高,但是当数据量很大的时候,会出现oom,当然它也提供了 sax 模式的读写方式,需要调用特定的方法实现。病例的信息量可能会很大,很有可能会造成内存溢出,没办法

笑不语的博客 6552

EasyPio导入导出excel表格

EasyPoi是一个功能强大且易于使用的Java Excel操作框架。

weixin_58724261的博客 5444

使用easypoi处理工作簿多sheet导出

easypoi模板化处理工作簿多sheet表导出,包含单元格合并,单元格函数,公式,单元格引用以及超链接的处理

小蜜蜂1010的博客 3027

EasyPoi vs EasyExcel:Excel图片导出3大场景性能与实现对比

本文深度对比了EasyPoi和EasyExcel在Excel图片导出中的性能与实现差异,涵盖单图导出、多图平铺和动态位置图片三大场景。通过代码示例和性能测试数据,揭示EasyExcel在内存管理和流式处理上的优势,特别适合大量图片导出的企业级应用场景,为开发者提供实用的技术选型指南。

weixin_30879833的博客 423

JAVA Excel导入导出技术选型(Apache POI、EasyPoi、EasyExcel)

是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式档案读和写的功能。Apache POI是java原生的,可以精细到对每个表单,每个单元格进行操作,封装度较低,使用起来需写大量的代码,并且性能较低,可以入门使用,这里不详细介绍。EasyPoi和EasyExcel都是基于Apache POI进行二次开发的,都做了封装处理使用起来很方便。

chang_mao的博客 3869

easypoi功能文档,介绍easypoi各种功能使用

easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 EasyPoi的主要特点 1.设计精巧,使用简单 2.接口丰富,扩展简单 3.默认值多,write less do more 4.spring mvc支持,web导出可以简单明了

【JAVA】一篇聊透百万级数据导入导出场景问题、大数据处理策略及优化方案、EasyExcel 和 EasyPOI的玩法详解

EasyExcel 是阿里巴巴开源的 Java 库,用于高效地处理 Excel 文件。它在处理大数据量时表现优异,具有低内存占用和高性能的特点。EasyPOI 是另一个流行的 Java 库,旨在简化 Excel 文件的操作。虽然它也提供了良好的性能,但在处理大数据量时,可能不如 EasyExcel 高效。

A的博客 3266

这是一个easyPoi的文档

easyPoi文档,这是一个easyPoi的文档。EasyPoi的编写其实是一次意外,之前我不太愿意写导入导出,因为代码号复杂,每次一个Excel 都要写几百行,仅有少量的复用,一次需要写许多的导入导出,又没有人手,正好看到了Jeecg对应Poi的一个封装,但是他的封装比较简单,就自己在他思想的基础上开始构建现在的项目了. EasyPoi秉承思想就是尽量简单,入库少,可以很快把简单的工作干了这是第一个版本的功能,后来慢慢用的人多了,也就功能慢慢丰富了,现在包含了Excel的导入导出,Word的导出,PDF的导出,Excel Charts的导出, Html的导出5个功能模块,重点还是Excel,毕竟Excel是最常用的. EasyPoi已经走过了3年,未来也会继续走,保持现有简单的功能继续前进. 文档来源:https://www.jianshu.com/p/6374b943b948

RTKLIB模糊度固定实战:三种模式对比与部分模糊度固定代码解析

本文深入解析RTKLIB中模糊度固定的三种核心模式(continuous、instantaneous、fix and hold),对比其性能与适用场景,并详细拆解了部分模糊度固定技术的源码实现。通过实战案例与代码级解析,为GNSS高精度定位开发者提供了在不同数据特性下提升固定成功率的优化思路与配置建议。

efc1234567的博客 473

EasyPOI与EasyExcel 实现导入和导出

目录 参考地址 EasyExcel https://www.yuque.com/easyexcel/doc/fill EasyPOI https://blog.youkuaiyun.com/qq_31984879/article/details/102715335 https://www.cnblogs.com/vcmq/p/12149673.html http://easypoi.mydoc.io/#text_217720 示例原文与代码 Blog & Github 1.0 准备工作 &

Eddie'Blog 1909

基于STM32F427的模拟SSI协议绝对式编码器位置反馈通信

基于STM32F427的模拟SSI协议绝对式编码器位置反馈通信

xeke997的博客 6064

Poi、EasyExcel、EasyPOI导入EXCEL文档的实现方案有何区别

EasyExcel、EasyPOI导入EXCEL文档的实现方案有何区别 一.easyPoi的excel导出 Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("日程主表", "日程"), AgendaExcelVO.class, agendaExcels); 其中ExportParams第一个参数是表名,第二个参数是...

AllenJoe666的博客 1万+

告别手动归档:基于Allegro Skill的XTools一键生成Gerber与生产文件实践

本文详细介绍了基于Allegro Skill的XTools工具如何实现一键生成Gerber与生产文件,大幅提升PCB设计效率。通过自动化流程,解决了传统手动归档中的重复劳动、人为失误和标准不统一等问题,特别适合需要频繁输出生产文件的工程师。文章包含安装配置、实战操作、问题排查及进阶技巧,帮助用户快速掌握这一高效工具。

weixin_30505225的博客 461

HTPA 32x32d热成像传感器实战指南:从替代MLX90640到精准测温

本文为HTPA 32x32d热成像传感器提供了从硬件连接到精准测温的完整实战指南。针对MLX90640替代需求,详细解析了HTPA传感器的核心优势、IIC通信要点、EEPROM校准数据读取与解析、独特的块数据读取模式,并逐步拆解了五大温度补偿计算流程,旨在帮助开发者克服高开发门槛,实现稳定可靠的非接触式测温应用。

weixin_29279101的博客 315

EasyPoi导入校验+导入自定义查询等校验

easyPoi导入

能让你写代码●写出拯救全世界的感觉 6357

小米汽车车载多摄像头视频链路深度解析 | MAX96792/MAX96724/MAX96781 实战分享

通过合理的输入输出规划 + 虚拟通道管理 + 加串行策略,可以在成本和性能之间取得最佳平衡,这就是多摄像头系统设计的核心精髓。

weixin_43199439的博客 1547

easyexcel、easypoi对比以及springboot集成实现导入导出excel功能

easyexcel、easypoi对比

Ricardo.M.Yu的博客 1万+

[QMT量化交易小白入门]-三十四、让deepseek分析北京炒家的首板策略后,在打板前增加了选股范围(量化python代码解析)

print(f'开始盘前选股')这行代码定义了一个名为的函数,当调用这个函数时,会首先打印出“开始盘前选股”的信息,表明选股流程正式启动。1、可根据情况增删部分条件,目前盘前选股目前可以选出140多支,比之前全市场监听带宽压力小了很多。2、还可以自行添加其他选股条件,比如换手率计算,炸板可能性检测。3、xtdata的数据是有可能缺失的,自己写策略时,有可能需要剔除,或者从第三方库校正,比如部分股票的流通股数。

木头大左的博客 2699

学Simulink——基于Simulink的输入-输出线性化精确转矩控制

本文详细介绍了基于Simulink的永磁同步电机(PMSM)输入-输出线性化(IOL)精确转矩控制方法。针对传统解耦控制在非线性转矩特性下的局限性,提出通过精确反馈线性化实现转矩指令与实际转矩的严格线性关系。文章系统阐述了IOL原理、PMSM控制器推导过程,并提供了完整的Simulink建模步骤,包括电机模型搭建、IOL控制器实现和闭环系统构建。通过仿真对比验证了IOL方法在转矩跟踪精度、动态响应和参数鲁棒性方面的显著优势,最后讨论了工程实现要点和扩展应用方向。该方法为高性能伺服系统开发提供了有效解决方案。

amy_mhd的博客 61

JAVA 的excel数据批量导入解析 现在都用什么API工具 Apache POI 、EasyExcel 、easypoi有什么区别

对于大多数需要处理Excel数据批量导入的场景,如果数据量不是特别大,且对性能要求不是特别高,EasyPoi和EasyExcel都是不错的选择。它们都能提供简单易用的API,并且能够很好地满足Excel数据导入的需求。如果数据量非常大,或者对性能有极高要求,那么推荐使用EasyExcel,因为它在处理大量数据时具有更好的性能和更低的内存占用。POI、EasyExcel和EasyPoi。这些工具各有特点,适用于不同的场景和需求。在Java中,处理Excel数据批量导入解析时,常用的API工具有Apache。

qq_39666711的博客 1255

华为面试手撕真题【最长不重复子串】

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。

MISAYAONE的博客 1万+

一文了解POI,再也不怕excel导入导出了

在Java日常开发过程中,实现Excel文件的导入导出功能是一项常见的需求。通过使用相关的Java库,如Apache POI、EasyPoi或EasyExcel,可以轻松地实现Excel文件的读写操作。而这篇文章将介绍如何在Java中使用Apache POI、EasyPoi 和EasyExcel库来进行Excel文件的导入和导出操作,帮助您快速掌握这一实用的技能。

再小的帆也能远航,把分享变成一种习惯 6374

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

导出导入开发场景

excel 导出导入

程序员一博 6107

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

excel POI处理推荐项目 easypoi easyexcel

Excel工具包 首推:easypoi(功能非常强大,挺好用) POI 工具类 Excel的快速导入导出 Excel模板导出 Word模板导出 CSV导入处理 Excel&Html互转 PDF处理 可以仅仅5行代码就可以完成Excel的导入导出,修改导出格式简单粗暴,快速有效。 项目地址: https://gitee.com/lemur/easypoi 使用教程...

赵英超的博客 6732
上一篇: MyBatis Log 插件无法显示SQL语句的原因
下一篇: idea 一键部署jar包
TimerShaft
博客等级 码龄8年 33粉丝 37原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值