监听器入门看这篇就够了(修订版)

解决Android Button的ACTION_UP事件不触发问题 在Android开发中,处理按钮触摸事件时容易忽略ACTION_CANCEL事件,导致快速滑动或父视图拦截时状态异常。正确做法应同时处理ACTION_UP和ACTION_CANCEL,确保按下/释放逻辑完整。例如,在滑块开关等场景中,需在ACTION_CANCEL时恢复状态,避免逻辑残留。最佳实践包括保持状态一致性、提供视觉反馈,尤其在复杂容器(如ScrollView)中需特别注意。正确处理这两种事件能提升交互稳定性和用户体验。 阅读详情

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

什么是监听器

监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。。

为什么我们要使用监听器?

监听器可以用来检测网站的在线人数,统计网站的访问量等等!

监听器组件

监听器涉及三个组件:事件源,事件对象,事件监听器

当事件源发生某个动作的时候,它会调用事件监听器的方法,并在调用事件监听器方法的时候把事件对象传递进去。

我们在监听器中就可以通过事件对象获取得到事件源,从而对事件源进行操作!

640?wx_fmt=png



模拟监听器

既然上面已经说了监听器的概念了,监听器涉及三个组件:事件源,事件对象,事件监听器。

我们就写一个对象,被监听器监听

监听器

监听器定义为接口,监听的方法需要事件对象传递进来,从而在监听器上通过事件对象获取得到事件源,对事件源进行修改!

/** * 事件监听器 * * 监听Person事件源的eat和sleep方法 */interface PersonListener{    void doEat(Event event);    void doSleep(Event event);}
interface PersonListener{

    void doEat(Event event);
    void doSleep(Event event);
}

事件源

事件源是一个Person类,它有eat和sleep()方法。

事件源需要注册监听器(即在事件源上关联监听器对象)

如果触发了eat或sleep()方法的时候,会调用监听器的方法,并将事件对象传递进去

/** * * 事件源Person * * 事件源要提供方法注册监听器(即在事件源上关联监听器对象) */class Person {    //在成员变量定义一个监听器对象    private PersonListener personListener ;    //在事件源中定义两个方法    public void Eat() {        //当事件源调用了Eat方法时,应该触发监听器的方法,调用监听器的方法并把事件对象传递进去        personListener.doEat(new Event(this));    }    public void sleep() {        //当事件源调用了Eat方法时,应该触发监听器的方法,调用监听器的方法并把事件对象传递进去        personListener.doSleep(new Event(this));    }    //注册监听器,该类没有监听器对象啊,那么就传递进来吧。    public void registerLister(PersonListener personListener) {        this.personListener = personListener;    }}

class Person {

    //在成员变量定义一个监听器对象
    private PersonListener personListener ;

    //在事件源中定义两个方法
    public void Eat() {

        //当事件源调用了Eat方法时,应该触发监听器的方法,调用监听器的方法并把事件对象传递进去
        personListener.doEat(new Event(this));
    }

    public void sleep() {

        //当事件源调用了Eat方法时,应该触发监听器的方法,调用监听器的方法并把事件对象传递进去
        personListener.doSleep(new Event(this));
    }

    //注册监听器,该类没有监听器对象啊,那么就传递进来吧。
    public void registerLister(PersonListener personListener) {
        this.personListener = personListener;
    }

}

事件对象

事件对象封装了事件源。

监听器可以从事件对象上获取得到事件源的对象(信息)

/** * 事件对象Even * * 事件对象封装了事件源 * * 在监听器上能够通过事件对象获取得到事件源 * * */class Event{    private Person person;    public Event() {    }    public Event(Person person) {        this.person = person;    }    public Person getResource() {        return person;    }}
class Event{
    private Person person;

    public Event() {
    }

    public Event(Person person) {
        this.person = person;
    }

    public Person getResource() {
        return person;
    }

}

测试

public static void main(String[] args) {    Person person = new Person();    //注册监听器()    person.registerLister(new PersonListener() {        @Override        public void doEat(Event event) {            Person person1 = event.getResource();            System.out.println(person1 + "正在吃饭呢!");        }        @Override        public void doSleep(Event event) {            Person person1 = event.getResource();            System.out.println(person1 + "正在睡觉呢!");        }    });    //当调用eat方法时,触发事件,将事件对象传递给监听器,最后监听器获得事件源,对事件源进行操作    person.Eat();}

    Person person = new Person();

    //注册监听器()
    person.registerLister(new PersonListener() {
        @Override
        public void doEat(Event event) {
            Person person1 = event.getResource();
            System.out.println(person1 + "正在吃饭呢!");
        }

        @Override
        public void doSleep(Event event) {
            Person person1 = event.getResource();
            System.out.println(person1 + "正在睡觉呢!");
        }
    });


    //当调用eat方法时,触发事件,将事件对象传递给监听器,最后监听器获得事件源,对事件源进行操作
    person.Eat();
}

640?wx_fmt=png


Servle监听器

在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别 ServletContext, HttpSession和ServletRequest这三个域对象

和其它事件监听器略有不同的是,servlet监听器的注册不是直接注册在事件源上,而是由WEB容器负责注册,开发人员只需在web.xml文件中使用<listener>标签配置好监听器,

监听对象的创建和销毁

HttpSessionListener、ServletContextListener、ServletRequestListener分别监控着Session、Context、Request对象的创建和销毁

测试

public class Listener1 implements ServletContextListener,        HttpSessionListener, ServletRequestListener {    // Public constructor is required by servlet spec    public Listener1() {    }    public void contextInitialized(ServletContextEvent sce) {        System.out.println("容器创建了");    }    public void contextDestroyed(ServletContextEvent sce) {        System.out.println("容器销毁了");    }    public void sessionCreated(HttpSessionEvent se) {        System.out.println("Session创建了");    }    public void sessionDestroyed(HttpSessionEvent se) {        System.out.println("Session销毁了");    }    @Override    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {    }    @Override    public void requestInitialized(ServletRequestEvent servletRequestEvent) {    }}class Listener1 implements ServletContextListener,
        HttpSessionListener, ServletRequestListener 
{

    // Public constructor is required by servlet spec
    public Listener1() {
    }

    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("容器创建了");
    }

    public void contextDestroyed(ServletContextEvent sce) {

        System.out.println("容器销毁了");
    }


    public void sessionCreated(HttpSessionEvent se) {

        System.out.println("Session创建了");
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("Session销毁了");
    }


    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {

    }

    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {

    }
}

640?wx_fmt=gif



监听对象属性变化

ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener分别监听着Context、Session、Request对象属性的变化

这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。

测试

这里我只演示Context对象,其他对象都是以此类推的,就不一一测试了。

public class Listener1 implements ServletContextAttributeListener {    @Override    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {        System.out.println("Context对象增加了属性");    }    @Override    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {        System.out.println("Context对象删除了属性");    }    @Override    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {        System.out.println("Context对象替换了属性");    }}class Listener1 implements ServletContextAttributeListener {

    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.println("Context对象增加了属性");
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.println("Context对象删除了属性");

    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.println("Context对象替换了属性");

    }
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    ServletContext context = this.getServletContext();    context.setAttribute("aa", "123");    context.setAttribute("aa", "234");    context.removeAttribute("aa");}

    ServletContext context = this.getServletContext();

    context.setAttribute("aa", "123");
    context.setAttribute("aa", "234");
    context.removeAttribute("aa");

}

640?wx_fmt=gif



监听Session内的对象

除了上面的6种Listener,还有两种Linstener监听Session内的对象,分别是HttpSessionBindingListener和HttpSessionActivationListener,实现这两个接口并不需要在web.xml文件中注册

想要测试出Session的硬化和钝化,需要修改Tomcat的配置的。在META-INF下的context.xml文件中添加下面的代码:

<Context>  <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">  <Store className="org.apache.catalina.session.FileStore" directory="zhongfucheng"/>  </Manager></Context>
  <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
  <Store className="org.apache.catalina.session.FileStore" directory="zhongfucheng"/>
  </Manager>
</Context>

640?wx_fmt=png

测试

/** 由于涉及到了将内存的Session钝化到硬盘和用硬盘活化到内存中,所以需要实现Serializable接口** 该监听器是不需要在web.xml文件中配置的。但监听器要在事件源上实现接口* 也就是说,直接用一个类实现HttpSessionBindingListener和HttpSessionActivationListener接口是监听不到Session内对象的变化的。* 因为它们是感知自己在Session中的变化!* */public class User implements HttpSessionBindingListener,HttpSessionActivationListener,Serializable {    private String username ;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    @Override    public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {        HttpSession httpSession = httpSessionEvent.getSession();        System.out.println("钝化了");    }    @Override    public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {        HttpSession httpSession = httpSessionEvent.getSession();        System.out.println("活化了");    }    @Override    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {        System.out.println("绑定了对象");    }    @Override    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {        System.out.println("解除了对象");    }}
public class User implements HttpSessionBindingListener,HttpSessionActivationListener,Serializable {

    private String username ;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }


    @Override
    public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {

        HttpSession httpSession = httpSessionEvent.getSession();

        System.out.println("钝化了");

    }

    @Override
    public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {
        HttpSession httpSession = httpSessionEvent.getSession();
        System.out.println("活化了");

    }
    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {

        System.out.println("绑定了对象");
    }
    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("解除了对象");

    }
}
User user = new User();request.getSession().setAttribute("aaa", user);request.getSession().removeAttribute("aaa");
request.getSession().setAttribute("aaa", user);
request.getSession().removeAttribute("aaa");

640?wx_fmt=png

最后

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

640?wx_fmt=jpeg

有帮助?好看!转发!640

Java Web技术全面解析与应用:深入分析修订版 ORM框架的核心原理是将对象模型映射到数据库模型,允许开发者以面向对象的方式操作数据库。这种模型的转换依赖于元数据,即配置信息或注解,来描述对象属性与数据库表字段之间的映射关系。ORM框架的优势主要体现在以下几个方面:提高开发效率:通过ORM框架,开发者可以直接操作对象,而无需编写大量的SQL语句。这一特性使得Java对象的操作与数据库操作之间的转换自动化,大大提高了开发效率。便于维护:随着业务逻辑的复杂度提升,数据库表结构可能发生变化。 阅读详情

相关推荐

Overleaf-Latex-Elsevier-图、表、参考文献标题及引用、伪代码写法(绝对详细直观且易懂)

overleaf爱思唯尔模板踩过的一些坑以及解决办法

2403_87584552的博客 5851

RadioButton的创建、监听与继承

目录RadioButton的创建使用xml布局创建使用Java代码创建RadioButton的监听RadioButton的继承 RadioButton的创建 使用xml布局创建 使用Java代码创建 RadioButton的监听 RadioButton的继承 ...

Lishaoyin 1894

【笔记整理】轻量级神经网络 MobileNetV3

【笔记整理】轻量级神经网络 MobileNetV3

qq_33934427的博客 4274

RadioButton点击事件不起作用的坑

最近做开发用到了RadioButton, 并自定义了样式,把RadioButton的按钮去掉了,换成了自定义的点击效果,这时候点击看不见是否被选中的效果。于是问题来了,第一次点击没问题,第二次以后点击就失效了。 布局是这样的:<RadioButton android:id="@+id/radiobtn" android:layout_weight="1" android:layout_wi...

LikeSidehu的专栏 1万+

高效穿搭博主内容制作指南:DeepSeek+豆包+即梦AI+剪映黄金工作流

大家好,我是硅基打工人! 只需3步实现AI自动化生成穿搭带货图文,日均产出效率提升10倍

TuFuir的博客 2677

AI+Xmind自动生成测试用例(思维导图格式)

最后:我是Walker,一个热爱分享编程知识的程序员,希望能够帮助到你!

Think_and_work的博客 2333

Android学习笔记 RadioButton使用中遇到的问题与解决

Android学习笔记 RadioButton使用中遇到的问题与解决 RadioButton(单选按钮)是安卓中常用的控件,作为单选按钮,单个设置则失去了意义,一般是在RadioGroup中使用的。 在xml中设置如下: &lt;RadioGroup android:id="@+id/Radiogroup" android:layout_width="...

布谷鸟的博客 1591

Discrete Optimization (Coursera) 学习笔记 Week 1 introduction (开个帖子)

Week 1 Introduction 这位教授Pascal Van Hentenryck 真的算是优化领域神级别的人物了吧?截一张Google scholar的图大家感受一下… 居然在Coursera上看到了他开的课:Discrete Optimization。试听了几节后,发现讲得很有激情,而且深入浅出。遂决定花暑假跟完这一门课。 这门课每周花两三个小时介绍基础概念,然后得花十几个小时写作业(coding)… 一开始以为Coursera上的课的作业应该不会太难,然后第一次作业(knapsack)我就被

ZJ_11701的博客 656

android 单选按钮设置不能点击事件,android 设置RadioGroup单选按钮选中后不能再选择...

编程过程中,很多人想使用单选按钮的特性实现选择题选中之后不能更改的目的,在网上查找一些资料,没有找到相关的问题,可能是因为这个问题太简单,但是之所以发表这篇博客,希望给那些像我一样自学android 的人的一些帮助,下面是实现代码r0 = (RadioButton)view.findViewById(R.id.radio0);r1 = (RadioButton)view.findViewById(...

weixin_34647584的博客 1559

【电源专题】案例:对比不同电池在不同电流下的电池放电曲线

无

一点硬件 2840

国家基本比例尺分幅土地利用现状图制作

本次主要解决的问题是如何构建脚本快速生成所涉及区域标准国家基本比例尺分幅,然后制作土地利用现状图模板,套用模板生成标准分幅土地利用现状图。

xyt1172228177的博客 2458

jbutton增加监听事件_监听器入门看这篇就够了(修订版)

什么是监听器监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。。为什么我们要使用监听器?监听器可以用来检测网站的在线人数,统计网站的访问量等等!监听器组件监听器涉及三个组件:事件源,事件对象,事件监听器当事件源发生某个动作的时候,它会调用事件监听器的方法,并在调用事件监听器方法的时候把事...

weixin_29893445的博客 1044

微信小程序启用蓝牙设备特征值变化时的notify功能

注意:这里的serviceUUID、notifyCharacteristicUUID 我会在后面写入数据时做重点说明。isNotifyBLECharacteristic:false, //是否启用蓝牙设备服务特征 notify。二、启用蓝牙设备特征值变化时的notify功能。下一篇 将继续介绍 微信小程序蓝牙设备写入数据。

wsk198726的专栏 1172

安卓中radiobutton不进入监听事件_监听器入门看这篇就够了(修订版)

什么是监听器监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。。为什么我们要使用监听器?监听器可以用来检测网站的在线人数,统计网站的访问量等等!监听器组件监听器涉及三个组件:事件源,事件对象,事件监听器当事件源发生某个动作的时候,它会调用事件监听器的方法,并在调用事件监听器方法的时候把事...

weixin_39687667的博客 146

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

过滤器监听器面试题都在这里(修订版)

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y以下我是归纳的过滤器监听器知...

3y 517

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

javaweb过滤器_过滤器监听器面试题都在这里(修订版)

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y以下我是归纳的过滤器监听器知识点图:(原图可以在公众号下回复 “脑图” 获取)图上的知识点都可以在我其他的文章内找到相应内容。监听器常见面试题监听器有哪些作用和用法?监听器有哪些作用和用法?Java Web开发中的监听器(listener)就是ap...

weixin_39711721的博客 128

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

监听器应用【统计网站人数、自定义session扫描器、踢人小案例】(修订版)

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y从第一篇已经讲解过了监听器的...

3y 449

filter过滤后重新添加_过滤器监听器面试题都在这里(修订版)

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y以下我是归纳的过滤器监听器知识点图:(原图可以在公众号下回复 “脑图” 获取)图上的知识点都可以在我其他的文章内找到相应内容。监听器常见面试题监听器有哪些作用和用法?监听器有哪些作用和用法?Java Web开发中的监听器(listener)就是ap...

weixin_33483080的博客 106

easyExcel导入修订版

1.控制层 @PostMapping("/importData") public Result importDict(MultipartFile file) { dictService.importDictData(file); return Result.ok(); } 2.业务层 @Override @CacheEvict(value = "dict", allEntries=true) public void importDictData(MultipartFile f

weixin_61503139的博客 181

php session统计登录在线人数_监听器应用【统计网站人数、自定义session扫描器、踢人小案例】(修订版)...

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器。这篇博文主要讲解的是监听器的应用。统计网站在线人数ps:这个可以使用WebSocket来做,但这里讲解的是监听器,所以这里以监听器来举例子!分析我们在网站中一般使用Session...

weixin_39815879的博客 339

session失效后怎么获取getattribute_监听器应用【统计网站人数、自定义session扫描器、踢人小案例】(修订版)...

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器。这篇博文主要讲解的是监听器的应用。统计网站在线人数ps:这个可以使用WebSocket来做,但这里讲解的是监听器,所以这里以监听器来举例子!分析我们在网站中一般使用Session...

weixin_42205405的博客 125

《JavaScript精粹(修订版)》——1.12 小结

本节书摘来自异步社区《JavaScript精粹(修订版)》一书中的第1章,第1.12节,作者:【英】Edwards, J. , 【澳】Adams, C.著,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.12 小结 本章介绍了好的编码方式可以使写出的代码更容易阅读和管理,而且在面对对脚本支持程度不一致的各种浏览器和设备的时候,可以采用比较优雅的处...

weixin_34348805的博客 88

导入多个sheet页到多张表(2023/4/7)修订版

【代码】导入多个sheet页到多张表(2023/4/7)修订版。

weixin_61503139的博客 561

《JavaScript高效图形编程(修订版)》——6.3 画布限制

本节书摘来自异步社区《JavaScript高效图形编程(修订版)》一书中的第6章,第6.3节,作者:【美】Raffaele Cecco著,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.3 画布限制 使用画布时有一些限制,其中一些和其底层特点有关: 缺乏视觉元素的数据结构,意味着你必须在JavaScript中创建自己的对象,来更新非静态图形元素...

weixin_34259159的博客 112

java书籍_Java之父:java入门进阶经典书籍推荐,你看了几本

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。学虽容易,学好不易,且学且珍惜入门类1.《java从入门到精通》(第3版)【内容介绍】本书从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进...

weixin_39804603的博客 403
上一篇: 监听器应用【统计网站人数、自定义session扫描器、踢人小案例】(修订版)
下一篇: 过滤器应用【编码、敏感词、压缩、转义过滤器】(修订版)
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值