在struts2中使用拦截器(Interceptor)控制登录和权限

ssh最新框架搭建,加入拦截器 在博客http://blog.youkuaiyun.com/u014201191/article/details/49339143 中讲解的ssh框架搭建基本,调试通过,好好学习 立即下载

[quote="dengyin2000"]在jsp servlet中我们通常使用Servlet Filter控制用户是否登入, 是否有权限转到某个页面。在struts2中我们应该会想到他的拦截器(Interceptor), Interceptor在struts2中起着非常重要的作用。 很多struts2中的功能都是使用Interceptor实现的。

需求:简单的登入界面,让用户输入用户名、密码、记住密码(remember me)。 如果用户选中remember me的话, 下次就不需要再登入了(使用cookie实现, 用需要点击logout取消remeber me功能)。 如果用户起始输入的地址不是登入页面的话,在用户登入之后需要转到用户输入的起始地址。

我们先看看LoginInterceptor.java [code] package com.javaeye.dengyin2000.wallet.interceptor;

import java.util.Map;

import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils; import org.apache.struts2.StrutsStatics;

import com.javaeye.dengyin2000.wallet.dao.UserDAO; import com.javaeye.dengyin2000.wallet.dao.UserNotFoundException; import com.javaeye.dengyin2000.wallet.domains.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LoginInterceptor extends AbstractInterceptor {  public static final String USER_SESSION_KEY="wallet.session.user";  public static final String COOKIE_REMEMBERME_KEY="wallet.cookie.rememberme";  public static final String GOING_TO_URL_KEY="GOING_TO";    private UserDAO userDao;

 @Override  public String intercept(ActionInvocation invocation) throws Exception {      ActionContext actionContext = invocation.getInvocationContext();   HttpServletRequest request= (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);      Map session = actionContext.getSession();   if (session != null && session.get(USER_SESSION_KEY) != null){    return invocation.invoke();   }      Cookie[] cookies = request.getCookies();   if (cookies!=null) {    for (Cookie cookie : cookies) {     if (COOKIE_REMEMBERME_KEY.equals(cookie.getName())) {      String value = cookie.getValue();      if (StringUtils.isNotBlank(value)) {       String[] split = value.split("==");       String userName = split[0];       String password = split[1];       try {        User user = userDao          .attemptLogin(userName, password);        session.put(USER_SESSION_KEY, user);       } catch (UserNotFoundException e) {        setGoingToURL(session, invocation);        return "login";       }      } else {       setGoingToURL(session, invocation);       return "login";      }      return invocation.invoke();     }    }   }   setGoingToURL(session, invocation);   return "login";  }

 private void setGoingToURL(Map session, ActionInvocation invocation){   String url = "";   String namespace = invocation.getProxy().getNamespace();   if (StringUtils.isNotBlank(namespace) && !namespace.equals("/")){    url = url + namespace;   }   String actionName = invocation.getProxy().getActionName();   if (StringUtils.isNotBlank(actionName)){    url = url + "/" + actionName + ".action";   }   session.put(GOING_TO_URL_KEY, url);  }    public UserDAO getUserDao() {   return userDao;  }

 public void setUserDao(UserDAO userDao) {   this.userDao = userDao;  }

}[/code]

首先判断session中有没有用户信息, 如果有的话继续, 如果没有的话,检查cookie中有没有rememberme的值,如果有的话,用==分割, 取得用户名密码进行登入。如果没有这个用户的话,记录下request的action地址然后转到登入页面。如果验证有这个用户,则继续下面的interceptor。 如果cookie中没有信息的话,则记录request的action地址然后转到登入页面。  以上就是LoginInterceptor的全部代码。

下面我们看看struts.xml

[code]<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>  <package name="default" extends="struts-default">   <interceptors>    <interceptor name="loginInterceptor" class="loginInterceptor"></interceptor>    <interceptor-stack name="loginDefaultStack">     <interceptor-ref name="loginInterceptor"></interceptor-ref>     <interceptor-ref name="defaultStack"></interceptor-ref>    </interceptor-stack>   </interceptors>   <default-interceptor-ref name="loginDefaultStack"></default-interceptor-ref>   <global-results>    <result name="login" type="redirect">/login.jsp</result>   </global-results>     <action name="index" class="indexAction">    <result>/index.jsp</result>   </action>   <action name="logout" class="logoutAction"></action>      <action name="login" class="loginAction" method="login">    <result type="redirect">${goingToURL}</result>    <result name="input">/login.jsp</result>    <interceptor-ref name="defaultStack"></interceptor-ref>   </action>      <action name="register" class="registerAction">    <result type="redirect">/login.jsp</result>    <result name="input">/register.jsp</result>    <interceptor-ref name="defaultStack"></interceptor-ref>   </action>  </package> </struts>[/code]

我们是使用的默认的interceptor stack是loginInterceptor, 如果你需要让不登入的用户也能访问的话,你需要配置你的action使用defaultStack。 我们这里的login, register使用的就是defaultStack。 这里要注意的是success的result是我们用LoginInterceptor设过来的值。 这样我们就能够转到用户输入的起始页面。 下面我们再来看看login.jsp 和 loginAction

[code]<%@taglib prefix="s" uri="/struts-tags" %> <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <html> <head>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  <title>Wallet-Login</title> </head> <body> <h2>Login</h2> <s:actionmessage/> <s:actionerror/> <s:form action="login" method="post" validate="false" theme="xhtml"> <s:textfield name="loginName" label="Username"></s:textfield><br/> <s:password name="password" label="Password"></s:password><br/> <s:checkbox label="Remember Me" name="rememberMe"></s:checkbox> <s:submit value="%{'Login'}"></s:submit> </s:form> <a href="register.jsp">Register</a> </body> </html>[/code]

[code]package com.javaeye.dengyin2000.wallet.actions;

import java.util.Map;

import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils; import org.apache.struts2.interceptor.CookiesAware; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware; import org.apache.struts2.interceptor.SessionAware;

import com.javaeye.dengyin2000.wallet.dao.UserDAO; import com.javaeye.dengyin2000.wallet.dao.UserNotFoundException; import com.javaeye.dengyin2000.wallet.domains.User; import com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor; import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements ServletResponseAware, ServletRequestAware, SessionAware, CookiesAware{

 private UserDAO userDao;  private String loginName;  private String password;  private boolean rememberMe;  private HttpServletResponse response;  private HttpServletRequest request;  private Map session;  private Map cookies;  private String goingToURL;  public String getGoingToURL() {   return goingToURL;  }  public void setGoingToURL(String goingToURL) {   this.goingToURL = goingToURL;  }  public boolean isRememberMe() {   return rememberMe;  }  public void setRememberMe(boolean rememberMe) {   this.rememberMe = rememberMe;  }  public String getLoginName() {   return loginName;  }  public void setLoginName(String loginName) {   this.loginName = loginName;  }  public String getPassword() {   return password;  }  public void setPassword(String password) {   this.password = password;  }      public String login()throws Exception{   try {    User user = userDao.attemptLogin(loginName, password);    if (rememberMe){     Cookie cookie = new Cookie(LoginInterceptor.COOKIE_REMEMBERME_KEY, user.getLoginName() + "==" + user.getPassword());     cookie.setMaxAge(60 * 60 * 24 * 14);     response.addCookie(cookie);    }    session.put(LoginInterceptor.USER_SESSION_KEY, user);    String goingToURL = (String) session.get(LoginInterceptor.GOING_TO_URL_KEY);    if (StringUtils.isNotBlank(goingToURL)){     setGoingToURL(goingToURL);     session.remove(LoginInterceptor.GOING_TO_URL_KEY);    }else{     setGoingToURL("index.action");    }    return SUCCESS;   } catch (UserNotFoundException e) {    addActionMessage("user name or password is not corrected.");    return INPUT;   }  }  public UserDAO getUserDao() {   return userDao;  }  public void setUserDao(UserDAO userDao) {   this.userDao = userDao;  }  public void setServletResponse(HttpServletResponse response) {   this.response = response;  }  public void setServletRequest(HttpServletRequest request) {   this.request = request;  }  public void setSession(Map session) {   this.session = session;  }  public void setCookiesMap(Map cookies) {   this.cookies = cookies;  } } [/code]

差不多就是这么多代码了。 最后看看logoutAction

[code]package com.javaeye.dengyin2000.wallet.actions;

import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware;

import com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor; import com.opensymphony.xwork2.ActionSupport;

public class LogoutAction extends ActionSupport implements ServletRequestAware , ServletResponseAware{

 private HttpServletRequest request;  private HttpServletResponse response;

 public String execute() throws Exception{   HttpSession session = request.getSession(false);   if (session!=null)    session.removeAttribute(LoginInterceptor.USER_SESSION_KEY);      Cookie[] cookies = request.getCookies();   if (cookies!=null) {    for (Cookie cookie : cookies) {     if (LoginInterceptor.COOKIE_REMEMBERME_KEY.equals(cookie       .getName())) {      cookie.setValue("");      cookie.setMaxAge(0);      response.addCookie(cookie);      return "login";     }    }   }   return "login";  }

 public void setServletRequest(HttpServletRequest request) {   this.request = request;  }

 public void setServletResponse(HttpServletResponse response) {   this.response = response;  }

}[/code]

这里需要注意的是需要把cookie也清理下。

applicationContext-struts.xml [code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC  "-//SPRING//DTD BEAN//EN"  "http://www.springframework.org/dtd/spring-beans.dtd">   <beans>  <!-- Example of SAF2 action instantiated by Spring -->     <!-- bean id="helloWorldAction" class="tutorial.HelloWorldAction" singleton="false" />      -->      <bean id="indexAction" class="com.javaeye.dengyin2000.wallet.actions.IndexAction" singleton="false"></bean>      <bean id="loginAction" class="com.javaeye.dengyin2000.wallet.actions.LoginAction" singleton="false">       <property name="userDao" ref="userDao" />      </bean>           <bean id="logoutAction" class="com.javaeye.dengyin2000.wallet.actions.LogoutAction" singleton="false"></bean>           <bean id="registerAction" class="com.javaeye.dengyin2000.wallet.actions.RegisterAction" singleton="false"></bean>           <!-- the following is struts2 interceptors -->      <bean id="loginInterceptor" class="com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor">       <property name="userDao" ref="userDao" />      </bean>           <bean id="userDao" class="com.javaeye.dengyin2000.wallet.dao.UserDAOImpl">      </bean> </beans>[/code]

参考:http://www.vitarara.org/cms/struts_2_cookbook/creating_a_login_interceptor[/quote]

基于ssh拦截器框架Struts2拦截器的登录验证实现 基于SSH2框架Struts2拦截器的登录验证实现 立即下载

相关推荐

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

TFN_yzgd的博客 928

UserLogin作为控制登录的Action,校验密码成功后记录session,可以选择记住登陆状态,登陆成功后自动跳转到登陆前的URL;

功能: ·UserLogin作为控制登录的Action,校验密码成功后记录session,可以选择记住登陆状态,登陆成功后自动跳转到登陆前的URL; ·UserLogout作为控制登录推出的Action,移除session,删除cookie; ·MainInfo和HeadInfo模拟了两个相对独立的Action用于展示页面内容; ·LoginInterceptor作为检查登

tfy1332的专栏 6355

智能排班考勤系统原型

可实现从业务预测,到工时预估,再到人员分配全流程自动智能排班。可应用于客服行业或工厂的智能排班系统。

gywm15111336483的专栏 995

ActionInvocation实现分析

ActionInvocation是ActionProxy中非常重要的变量。在产生ActionProxy之后,调用proxy.prepare()来产生ActionInvocation的实例。 从ActionInvocation类的说明中,我们可以看到ActionInvocation包括拦截器和Action的实例。 An ActionInvocation represents the execu...

iteye_11921的博客 138

springcloud+nacos+gateway+oauth2小聚会

在微服务工程中,Nacos作为目前主流的注册中心和配置中心,Spring Cloud Gateway作为目前主流的网关,下面引入spring security+oauth2+jwt作为认证和授权中心,进行简单的聊聊。

ldcaws的专栏 2646

经典算法之——解决全排列问题以及详解

回溯”指的是“状态重置”,可以理解为“恢复现场”,是在编码的过程中,是为了节约空间而使用的,而在递归或者深度优先中根据需要的场合来配合回溯法可以进一步对自己的代码进行优化。, n-1, n},方向都为向左。邻位对换法是全排列生成算法中的其中一种,它的换位是双向的,通过保存数字的“方向性”来快速得到下一个排列。最后以 3 开头的全排列为[3, 1, 2], [3, 2, 1];以 1 开头的全排列为[1, 2, 3], [1, 3, 2];以 2 开头的全排列为[2, 1, 3], [2, 3, 1];

m0_68987535的博客 8795

Struts 2的基石——拦截器(Interceptor)

什么是拦截器拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提

vvggsky的专栏 1315

别只刷题了!我用834分经验告诉你,华为HCIP大数据考试(H13-723)这样准备更高效

本文分享了华为HCIP大数据认证(H13-723)834分通关的高效备考经验。通过分析考试动态、题库验证技巧和章节优先级策略,帮助考生超越单纯刷题,系统化掌握核心知识点。特别强调实时流处理和离线批处理等重点章节,提供黄金90分钟临场发挥策略,助力考生一次性通过考试。

weixin_38168786的博客 459

struts2中使用拦截器(Interceptor)控制登录和权限

struts2中使用拦截器(Interceptor)控制登录和权限 转载:http://www.itpub.net/thread-966462-1-1.html 在jsp servlet中我们通常使用Servlet Filter控制用户是否登入, 是否有权限转到某个页面。在struts2中我们应该会想到他的拦截器(Interceptor), Interceptor在struts2中起着非常

hello,黑豆先生 1615

FFT中的精度博弈:定点数缩放、块浮点与溢出处理在Vivado IP核中的实践权衡

本文探讨了在Vivado FFT IP核中实现高精度快速傅里叶变换的关键技术,包括定点数缩放策略、块浮点模式及溢出处理机制。通过分析不同精度控制方案的资源开销与性能权衡,为工程师在医疗成像、雷达信号处理等高动态范围应用中优化FFT实现提供实践指导。

melon的博客 1097

EtherCAT主站SOEM -- 1 -- SOEM之ethercattype.h文件分析

“ethercattype.h” 文件用于支持 EtherCAT 网络通信,提供了各种类型定义和宏,以便开发者更轻松地开发 EtherCAT 相关应用程序。这些定义包括数据类型、命令类型、状态类型和错误类型,以支持 EtherCAT 通信。根据具体应用需求,还可以调整一些超时和帧长度设置。这些定义用于处理函数调用的结果,如 EC_NOFRAME(没有帧返回)、EC_ERROR(一般错误)、EC_TIMEOUT(请求超时)等。这些定义用于处理 EtherCAT 命令,例如 EC_CMD_APRD(自动递增读取

常驻客栈的博客--嵌入式EtherCAT 2715

Struts2中使用拦截器(Interceptor)控制登录和权限

        在jsp Servlet中我们通常使用Servlet Filter控制用户是否登入, 是否有权限转到某个页面。在Struts2中我们应该会想到他的拦截器(Interceptor), Interceptor在Struts2中起着非常重要的作用。 很多Struts2中的功能都是使用Interceptor实现的。 需求:简单的登入界面,让用户输入用户名、密码、记住密码(remember ...

訫誶 157

claude-hub:GitHub上的AI开发助手,让Claude自动帮你写代码、审代码、合代码

代码不再是人写的,而是人引导 AI 写的。在这个时代,GitHub 不再只是一个代码托管平台,而是 AI 开发代理的工作台。每一个 issue、每一条 PR,都可能是一次与 AI 合作的机会。未来属于那些敢于把开发流程交给 AI 来优化的人——他们不是在取代自己,而是在放大自己的影响力。📌关注本系列文章,我们将持续输出关于 AI 编程、GitHub 自动化、AI Agent 产品化的深度分析。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 1373

在​s​t​r​u​t​s​2​中​使​用​拦​截​器​(​I​n​t​e​r​c​e​p​t​o​r​)​控​制​登​录​和​权​限

在 jsp servlet 中我们通常使用 Servlet Filter 控制用户是否登入,   是否有权限转到某个页面。 在 struts2 中我们应该会想到他的拦截器( Interceptor ),   Interceptor 在 struts2 中起着非 常重要的作用。   很多 struts2 中的功能都是使用 Interceptor 实现的。

tfy1332的专栏 1380

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

上一篇: struts2异常处理
下一篇: 认真的学习~轻量级框架
javaiswhat
博客等级 码龄19年 20粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值