Java中的函数动态调用

unidbg 加载 so 并调用 so 中函数 unidbg 是一个基于 Java 的 Android 动态分析框架,专注于模拟 Android 应用中的 native 代码。以下是它的主要功能:支持对so的加载;支持对JNI接口函数的模拟调用;支持常见syscalls的模拟调用;支持ARM32和ARM64。支持Android以及iOS基于HookZz实现的inline hookxHook实现的hookiOS fishhook,substrate、whale hook等支持gdb、IDA远程调试等高级功能。…Unidgb 项目地址:https://git 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 浙 江 省 绍 兴 市 俞 中 正 ---- 相 信 有 不 少 人 使 用C 语 言 的 函 数 指 针 实 现 过 函 数 的 动 态 调 用。 适 当 地 运 用 函 数 动 态 调 用 功 能 不 仅 能 减 少 代 码 数 量, 而 且 对 于 增 加 程 序 的 可 读 性 和 易 维 护 性 也 带 来 极 大 帮 助。 由 于java 不 支 持 指 针 功 能, 所 以 运 用 指 针 实 现 动 态 调 用 不 适 用 于java。 本 文 提 出 了 一 种 运 用java Reflection API 实 现java 函 数 动 态 调 用 的 方 法, 并 给 出 一 个 基 本 实 现 和 测 试 实 例。 ---- 函 数 动 态 调 用 的 一 个 最 为 常 见 的 应 用 场 合 在 于 取 消 对 于switch 关 键 词 的 依 赖。switch 关 键 词 用 来 判 断 条 件, 并 分 别 给 出 处 理 过 程 即 处 理 函 数。 一 个 典 型 的 函 数 具 有 函 数 名、 输 入 值、 返 回 值。 而 实 现 动 态 调 用 的 关 键 之 处 在 于 调 用 时 得 到 正 确 的 类 名、 函 数( 方 法) 名、 以 统 一 的 格 式 实 现 参 数 的 传 递。 下 面 是 实 现 该 功 能 的 类Invoker,ArgumentHolder 的 清 单: //-------------------------------------- //类Invoker //实现函数的动态调用 //方法: // dynaCall // 参数 Object c希望调用函数(方法)所在对象 // String m希望调用的方法名称 // ArgumentHolder a传递给被调用方法的参数 //----------------------------------------- import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Invoker { static Object dynaCall(Object c, String m, ArgumentHolder a) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { //由于java支持方法名称的重载 (同一类中出现多于一个的同名函数), //所以getMethod方法使用两个参数: 字符串形式的方法名称和数组形式 //的调用参数类列表。返回值为类Method的一个对象, 该对象和将要被 //调用的方法相关联 Method meth = c.getClass().getMethod (m, a.getArgumentClasses()); //通过类Method对象的invoke方法动态调用希望调用的方法 return (meth.invoke(c, a.getArguments())); } } //------------------------------------- //类ArgumentHolder //用于调用参数的封装,实现变长参数及 不同类型参数的统一形式地传递 //成员变量: // Class[] cl 参数类型数组 // Object[] args 参数对象数组 //方法: // getArgumentClasses()返回参数类型数组 // getArguments() 返回参数对象数组 // setArgument() 在参数列表中增加项目 // //--------------------------------------- public class ArgumentHolder { protected Class[] cl; protected Object[] args; protected int argc; ArgumentHolder() { argc = 0; cl = new Class[0]; args = new Object[0]; } ArgumentHolder(int argc) { this.argc = argc; cl = new Class[argc]; args = new Object[argc]; } public Class[] getArgumentClasses() { return cl; } public Object[] getArguments() { return args; } //以下16个setArgument 函数实现简单数据类型boolean,byte, // char,int,short,long,float,double的封装。 为支持Invoker //类dynaCall方法中getClass的调用, 此处将简单数据类型 //转换为对应的对象,如boolean转换为Boolean public int setArgument(boolean b) { return this.setArgument(argc, new Boolean(b), Boolean.TYPE); } public int setArgument(int argnum, boolean b) { return this.setArgument(argnum, new Boolean(b), Boolean.TYPE); } public int setArgument(byte b) { return this.setArgument(argc, new Byte(b), Byte.TYPE); } public int setArgument(int argnum, byte b) { return this.setArgument(argnum, new Byte(b), Byte.TYPE); } public int setArgument(char c) { return this.setArgument(argc, new Character(c), Character.TYPE); } public int setArgument(int argnum, char c) { return this.setArgument(argnum, new Character(c), Character.TYPE); } public int setArgument(int i) { return this.setArgument(argc, new Integer(i), Integer.TYPE); } public int setArgument(int argnum, int i) { return this.setArgument(argnum, new Integer(i), Integer.TYPE); } public int setArgument(short s) { return this.setArgument(argc, new Short(s), Short.TYPE); } public int setArgument(int argnum, short s) { return this.setArgument(argnum, new Short(s), Short.TYPE); } public int setArgument(long l) { return this.setArgument(argc, new Long(l), Long.TYPE); } public int setArgument(int argnum, long l) { return this.setArgument(argnum, new Long(l), Long.TYPE); } public int setArgument(float f) { return this.setArgument(argc, new Float(f), Float.TYPE); } public int setArgument(int argnum, float f) { return this.setArgument(argnum, new Float(f), Float.TYPE); } public int setArgument(double d) { return this.setArgument(argc, new Double(d), Double.TYPE); } public int setArgument(int argnum, double d) { return this.setArgument(argnum, new Double(d), Double.TYPE); } //以下2个setArgument函数实现对象的封装, public int setArgument(Object obj) { return this.setArgument(argc, obj, obj.getClass()); } public int setArgument(int argnum, Object obj) { return this.setArgument(argnum, obj, obj.getClass()); } //以下setArgument函数具体实现以对象形式 提供的参数封装。 //具体操作为:增加计数器argc的值、 在cl和args中增加相应内容 public int setArgument(int argnum, Object obj, Class c) { if (argnum >= args.length) { argc = argnum 1; Class[] clExpanded = new Class[argc]; Object[] argsExpanded = new Object[argc]; System.arraycopy(cl, 0, clExpanded, 0, cl.length); System.arraycopy(args, 0, argsExpanded, 0, args.length); cl = clExpanded; args = argsExpanded; } args[argnum] = obj; cl[argnum] = c; return argnum; } } ---- 以 下 给 出 一 个 类Invoker 和ArgumentHolder 的 应 用 实 例。 类DynaCallTest 应 用 类Invoker 和ArgumentHolder 实 现 以 下 功 能: 根 据 用 户 在 命 令 行 中 输 入 的 内 容, 动 态 地 确 定 所 调 用 方 法。 程 序 可 以 接 受 的 合 法 输 入 为: add 参数为两个整数,显示两个整数之和 concat 参数为两个字符串,显示两个字符串连接之后的值 help 无参数,显示可以接受的命令列表 minmax 参数为三个整数,显示三个参数的最大之和最小值 quit 无参数,结束运行 rand 无参数,显示一个随机值 程序清单如下: import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.Math; import java.util.Random; import java.util.StringTokenizer; public class DynaCallTest { Random rand; BufferedReader consoleIn; //建构函数,初始化 DynaCallTest() { consoleIn = new BufferedReader (new InputStreamReader(System.in)); rand = new Random(); } //读取用户输入行 String getCommandLine() throws IOException { System.out.print(">"); System.out.flush(); String commandLine = consoleIn.readLine(); if (commandLine == null) return "Quit"; if (commandLine.length() == 0) return "Quit"; else return commandLine; } //从用户输入行中提取命令, 格式化为:首字符大写,其余字符小写 //返回格式化后的命令 String extractCommand(String commandLine) { StringTokenizer t = new StringTokenizer(commandLine); String cmd = t.nextToken().toLowerCase(); return cmd.substring(0,1).toUpperCase() cmd.substring(1); } //从用户输入行中提取参数, 创建ArgumentHolder类型的对象a以封装所有参数 //错误格式的整数被视为字符串 //返回ArgumentHolder类型的对象,即封装后的参数 ArgumentHolder extractArguments(String cmd) { StringTokenizer t = new StringTokenizer(cmd); int tokenCount = t.countTokens(); ArgumentHolder a = new ArgumentHolder(); String token = t.nextToken(); while(t.hasMoreTokens()) { token = t.nextToken(); try { int i = Integer.parseInt(token); a.setArgument(i); } catch (NumberFormatException e) { a.setArgument(token); } } return a; } //以下6个以meth开头的函数实现本测试程序 接受的合法命令的具体处理过程。 //函数的命名规则为:meth 格式化后的用户命令 public String methAdd(int i1, int i2) { return Integer.toString(i1) " " Integer.toString(i2) " = " Integer.toString(i1 i2); } public String methConcat(String s1, String s2) { return "the concatenated string is " s1 s2; } public String methHelp() { final String[] helpMessages = {"DynaCallTest Version 1.0", "valid commands are:", "add int1 int2", "concat string1 string 2", "help", "minmax int1 int2 int3", "quit", "rand" }; for (int i = 0; i < helpMessages.length; i) System.out.println(helpMessages[i]); return ""; } public String methMinmax(int i1, int i2, int i3) { return ("min = " Integer.toString(java.lang.Math.min (java.lang.Math.min( i1,i2),i3)) ", max = " Integer.toString( java.lang.Math.max(java.lang.Math.max(i1,i2),i3))); } public String methQuit() { return "quitting"; } public String methRand() { return "the random number is " Integer.toString(rand.nextInt()); } //处理用户在命令行中的输入 //调用extractCommand以生成对应于用户输入的方法名 //调用extractArguments以封装用户输入参数 //调用Invoker.dynaCall以实现命令处理 String processCommand(String cmd) { try { String meth = "meth" extractCommand(cmd); ArgumentHolder a = extractArguments(cmd); return (String)(Invoker.dynaCall(this, meth,a)); } catch (NoSuchMethodException e) { return "no method to process command " cmd; } catch (InvocationTargetException e) { System.out.println("trace:"); e.printStackTrace(); return "InvocationTargetException processing command" cmd; } catch (IllegalAccessException e) { System.out.println("trace:"); e.printStackTrace(); return "IllegalAccessException processing command" cmd; } } //主函数,调用processCommand以实现程序功能 public static void main(String args[]) { boolean allOK = true; String line; DynaCallTest myClient = new DynaCallTest(); System.out.println("DynaCallTest Version 1.0"); System.out.println("Enter command at the prompt"); System.out.println("Type help for help"); while(allOK) { try { line = myClient.getCommandLine(); if (line == null) allOK = false; else { System.out.println(myClient.processCommand(line)); if (line.substring(0,1).toUpperCase().equals("Q")) allOK = false; } } catch (IOException e) { e.printStackTrace(); allOK = false; } } System.exit(0); } } ---- 以 上 程 序 在jdk 1.1.4,win95 环 境 下 编 译 通 过, 并 在Linux(Slackware96),Windows Nt 4.0 ( 工 作 站) 下 经 过 验 证。
Android jni引用第三方so动态库和.a静态库并且调用(c)方法 最近花了一周时间来入门学习 Android JNI方面的知识,因为后续的工作很多需要用到c c++库,我需要用jni来包装一下c函数,来提供给上次java调用。总之多学点知识对自己有好处。案例效果:上文我们讲解了本文接着上文,这次我们利用JNI 来引用第三方动态库so文件,并且让Java调用它的函数。 阅读详情

相关推荐

使用Java在Linux上调用动态链接库的JNI编程

首先,我们创建了一个包含本地函数的C文件,并将其编译为动态链接库。然后,在Java类中加载该动态链接库,并声明本地方法来调用其中的函数。在Linux环境下,Java提供了JNI(Java Native Interface)机制,允许开发者使用Java调用本地(C/C++)动态链接库。通过以上步骤,我们成功在Linux环境下使用Java JNI调用了动态链接库中的本地函数。接下来,创建一个Java类,用于加载动态链接库并调用其中的本地函数。方法加载编译好的动态链接库,并声明一个本地方法来调用其中的函数。

Book_Sea的博客 300

如何使用Java反射机制动态调用方法?

Java反射机制是一种强大的工具,允许程序在运行时动态地获取类的信息并调用类的方法。通过反射,可以在不修改源代码的情况下,访问和操作类的私有字段和方法,这在框架设计、测试、动态代理等方面有广泛应用。通过上述步骤和示例代码,可以看到Java反射机制在动态调用类的方法方面提供了极大的灵活性和便利性。下面是一个完整的示例代码,展示了如何使用Java反射机制动态调用类中的各种方法,包括公共方法、私有方法和静态方法。要调用类的方法,需要先获取方法对象。方法可以获取所有方法,包括私有方法。获取方法对象后,可以通过。

wang15510689957的博客 972

spring与java反射结合动态定义类及调用函数

spring与java反射结合动态定义类及调用函数,实现类的动态定义和函数的动态调用。 为有动态调用的web应用提供一点点借鉴,相互学习。

java 动态调用函数_深入讲解Java语言中的函数动态调用方式

相 信 有 不 少 人 使 用C 语 言 的 函 数 指 针 实 现 过 函 数 的 动 态 调 用。 适 当 地 运 用 函 数 动 态 调 用 功 能 不 仅 能 减 少 代 码 数 量, 而 且 对 于 增 加 程 序 的 可 读 性 和 易 维 护 性 也 带 来 极 大 帮 助。 由 于java 不 支 持 指 针 功 能, 所 以 运 用 指 针 实 现 动 态 调 用 不 适 用 于...

weixin_36429576的博客 1299

【AutoSar CP】SoAd模块

比如对于特定的PDU,其PduId在程序编译时就确定了,但是在代码运行中,该PduId可能需要发送到不同的远端ip,这时就需要用SoAd来设置连接远端地址信息。SoAdSocketConnectionGroup(连接参数)SoAdSocketRoute(接收数据)SoAdRoutingGroup(开关)SoAdPduRoute(发送数据)

至道无难,唯嫌拣择。 1689

别再手动更新Excel了!用Jira看板管理你的个人项目(附保姆级配置流程)

本文详细介绍了如何利用Jira看板替代Excel进行个人项目管理,提供从注册到配置的保姆级教程。通过极简看板模式、自动化规则和数据分析功能,帮助用户实现任务可视化、协作高效化和提醒自动化,大幅提升个人工作效率。特别适合需要管理复杂个人项目的用户。

weixin_42699679的博客 229

Java - 通过反射进行动态赋值以及函数调用

Teacher 类。

许久 1489

鱼眼相机矫正实战:除了棋盘格,试试横向展开和经纬度法(OpenCV4/C++实现对比)

本文对比了鱼眼相机矫正的三种主流方法:棋盘格标定法、横向展开法和经纬度法,通过OpenCV4/C++实战代码解析,帮助开发者在自动驾驶、VR全景拼接和安防监控等场景中选择最适合的技术方案。重点分析了各方法的精度、处理速度和适用场景,为工程实践提供实用指导。

weixin_29032489的博客 284

Java所有函数都是动态的_Java中的函数动态调用

//-------------------------------------//类ArgumentHolder//用于调用参数的封装,实现变长参数及//不同类型参数的统一形式地传递//成员变量:// Class[] cl 参数类型数组// Object[] args 参数对象数组//方法:// getArgumentClasses()返回参数类型数组// getArguments() 返回参数对...

weixin_35663032的博客 267

ImageNet分类实战:用PyTorch复现AlexNet的5个关键技巧(附代码)

本文详细介绍了使用PyTorch复现经典AlexNet模型进行ImageNet图像分类的五个关键工程技巧。内容涵盖模型架构的现代重构、训练策略优化、核心组件实现与替代方案,以及实用的训练调试方法,并提供了完整的代码示例,帮助开发者深入理解深度卷积神经网络的实现细节与优化思路。

i0j1k2l3m的博客 94

从Safety Manual到系统安全概念

本文系统阐述了构建功能安全"证据链"的工程化方法论,核心要点包括:1)建立"风险→对策→验证→证据"闭环链条;2)SafetyManual和FMEDA作为关键证据支撑点,前者界定系统安全边界,后者量化诊断覆盖率;3)通过四步法继承芯片安全机制并扩展至系统级;4)形成"设计-分析-验证"三维闭环体系,包括安全目标、技术实现和验证矩阵;5)强调证据链闭环对安全认证和OEM认可的重要性。该方法论实现了从理论要求到工程实践的完整转化,确保安全设计可验证、可

VehSwHwDeveloper的博客 724

java函数的调用_Java中的函数动态调用

//-------------------------------------//类ArgumentHolder//用于调用参数的封装,实现变长参数及//不同类型参数的统一形式地传递//成员变量:// Class[] cl 参数类型数组// Object[] args 参数对象数组//方法:// getArgumentClasses()返回参数类型数组// getArguments() 返回参数对...

weixin_34677379的博客 411

微信小程序逆向实战:从HTTPS抓包到API接口全解构

方案原理优点缺点方案一:使用低版本微信+系统代理微信7.0以下版本未强制不走代理操作简单容易被封号,无法使用新版小程序方案二:Hook SSL层(Xposed/Frida)动态Hook Java的TrustManager或系统的SSLContext,绕过证书校验灵活可控需要Root/越狱,技术门槛高方案三:VPN转发抓包(PacketCapture)利用Android VPNService将所有流量转发到本地代理无需Root,兼容性好部分机型存在性能问题。

2201_76125261的博客 268

Android: opencv Calib3d.java 就是专门调用JNI的类,calib3d.hpp 就是动态库的头文件,声明动态库中的函数

findCirclesGrid_0() 和 findCirclesGrid_1()是cv::findCirclesGrid()函数的两个重载函数。使用 __declspec(dllexport) 关键字从 DLL 导出数据、函数、类或类成员函数。大体意思是,CV_EXPORTS_W是__declspec(dllexport) 的一个别称,

katerdaisy的博客 265

S/4HANA 迁移前的必修课:用 SCMON 找出沉睡的自定义代码

SAP S/4HANA迁移项目中,SCMON工具能有效解决历史代码评估难题。通过监控ABAP对象调用情况,SCMON可识别40-60%处于"沉睡"状态的自定义代码。配置时需注意监控周期(建议3-6个月)和数据保留期(建议1年),并配合Time Slices功能进行时段分析。工具导出的调用数据可与测试覆盖率对比,帮助决策代码迁移优先级。实际应用中需结合业务场景,建议与SUSG工具配合使用,并保持持续监控。SCMON虽不能完全替代人工判断,但其提供的客观数据能显著提升迁移决策的科学性,建议在

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

安全与加密常识(10)linux系统证书管理

1. 将自定义CA证书(如my-ca.crt)放到源目录# 2. 编辑配置文件,启用该证书(末尾添加一行 my-ca.crt)# 3. 执行命令同步(核心工作环节)# 4. 验证结果:检查是否生成哈希链接和合并到证书束ls /etc/ssl/certs/my-ca.pem # 证书文件ls /etc/ssl/certs/$(openssl x509 -hash -noout -in /usr/share/ca-certificates/my-ca.crt).0 # 哈希链接。

二进制君 290

java中函数的调用,java中如何调用函数

java动态调用函数,Java中使用动态代码,java函数调用,java中如何调用函数如何在 Java 中调用 C 函数 宗薇 【期刊名称】《网络新媒体技术》 【年(卷),期】2000(021)002 【摘要】本文介绍如何利用 Java 提供的 C 语言接口在 Java ......JAVA 类的方法调用和变量 类的方法调用和变量一,类的分类: 1,普通类 2,抽象类(含有抽象方法的类) 3,静...

weixin_29421565的博客 2149

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

Android JNI(三):Java与Native相互调用

1、注册native函数 2、JNI中的签名 3、native代码反调用Java层代码 下面我们就进一步了解下一下JNI的调用原则,要想了解JNI的调用原则, 前面我们说了JNI中的JNIEnv以及Java类型和native中的类型映射关系。下面我们先来看注册native函数 一、注册native函数 当Java代码中执行Native的代码的时候,首先是通过一定的方法来找到这些native方法。而注册native函数的具体方法不同,会导致系统在运行时采用不同的方式来寻找这些native方法。..

天涯芳草 3378

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java调用javascript函数

今天主要是想通过一个例子还说明怎样用java代码来调用javascript中的函数 我们首先的自己先建立一个文本文件,然后编写一个javascript函数,并保存文件,可以改后缀名为.js,例如我们的例子里面就写入一个这样的函数:   function cal(var1,var2) { return var1+var2-factor; } 然后我们开始写java代码,j

技术特工队 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Android JNI学习(二)——Java与Native相互调用

接下来我们来学习 java与Native互相调用 一.简章 1、注册native函数 2、JNI中的签名 3、native代码反调用Java层代码 思维导图如下: 前面一篇文章简单的介绍了JNI,下面我们就进一步了解下一下JNI的调用原则,要想了解JNI的调用原则, 前面我们说了JNI中的JNIEnv以及Java类型和native中的类型映射关系。下面我们先来看注册native函数 一、注册na...

安卓兼职framework和app工程师的博客 975

Java-多态的动态绑定机制

Java-动态绑定机制 在通过学习完 Java 的封装、继承、多态 之后,我们通过下面一道例题来引出一个 Java 非常重要的一个机制:动态绑定机制。 习题 class A { // 父类 public int i = 10; public int sum() { return getI() + 10; } public int sum1() { return i + 10; } public int getI() { return i; } } class B extends

郭松源的博客 1018

java 动态脚本 应用,如何动态调用之Java脚本API

一起学习我们不需要将动态语言编译为 Java字节码就可以在 Java 应用程序中使用它们。使用 Java Platform, Standard Edition 6 (Java SE)中添加的脚本包(并且向后兼容 Java SE 5),Java 代码可以在运行时以一种简单的、统一的方式调用多种动态语言。本系列文章共分两个部分,第 1 部分将介绍 Java 脚本 API 的各种特性。文章将使用一个简单...

weixin_30598353的博客 344
上一篇: PetStore1.3分析 一
下一篇: 在JDBC警告的帮助下修正数据库
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值