关于创建android jni实例

JNI编程示例 源代码地址: 链接:百度网盘 请输入提取码 提取码:gtlz 一、Demo介绍 为了更深入的理解Jni编程知识,我们通过一个简单demo把相关知识用实际代码串起来,会有更清晰的认识。在这个demo中,涉及数组处理、字符串处理、类成员变量访问修改等内容,基本涵盖了常见的用法。 相关介绍 涉及文件 (java代码/xml布局文件) demo界面示例 主界面 点击button进入对应示例 s 阅读详情

搭建环境

sdk 路径设置 sdktools下载
NDK 配置 在 系统path中加入
判断安装好标志 在terminal输入ndk-build命令
这里写图片描述
在项目project structure中如下
这里写图片描述
这里写图片描述
java环境
报错 javah 不是内部命令 环境没配置好
填写系统环境path路径的时候 在编辑文本中看一眼,或者在AS客户端的terminal中echo %path% 确定对不对,中间分号间隔
这里写图片描述

创建工程

1.创建一个工程,名字随便,

eg. TestDemo1,勾选include c++;空活动;
下一步,直到最后勾选Expections surport, runtime(非必须);

2.创建
建立一个jniutil.java
任意目录下 创建java类 (本文目录为TestDemo1\app\src\main\java)
Demo1.java

package com.example.tsing.testdemo1;

/**
 * Created by Tsing on 10/19/2017.
 */

public class Demo1 {
    static {
        System.loadLibrary("testdemo1");
    }
    public static native String sayHello();
}

注意 static中System.loadLibrary(“testdemo1”); 必须加上这句话,以后才可以引用
testdemo1是后来的so文件名称,必须一致
然后Clean Project,Rebuild Project,之后,你就能在项目的路径:app\src\main\java\看到 com.example.tsing.testdemo1.Demo1.class(或 com目录下)

2.生成h文件

进入AS的terminal cd 目录地址 到com上层目录截至 (防止出现找不到路径), javah 文件名 不可以带class(最终生成h文件就是在这个目录)

F:\AndroidStudioProjects\TestDemo1>cd app\src\main\java

F:\AndroidStudioProjects\TestDemo1\app\src\main\java
>javah -jni com.example.tsing.testdemo1.Demo1

3.以上操作如果没有问题的话,就会生成h文件

com_example_tsing_testdemo1_Demo1.h文件。在项目的src/main下面建立一个jni文件夹,将生成的com_example_tsing_testdemo1_Demo1.h文件拷贝进去。
新建jni文件夹

在jni文件夹里面,新建一个与.h对应的.c文件,名字可以随便,我取得名字为:main.c,加入以下代码:(确保与h中声明函数相对应,否则会报错)

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include "com_example_tsing_testdemo1_Demo1.h"
/* Header for class com_example_tsing_testdemo1_Demo1 */


/*
 * Class:     com_example_tsing_testdemo1_Demo1
 * Method:    sayHello
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_tsing_testdemo1_Demo1_sayHello
        (JNIEnv *env,jclass jclass){
    return (*env)->NewStringUTF(env,"JNi success");
}

4、Jni类的配置及引用

在项目app下的build.gradle下面配置ndk:
在defaultConfig中插入ndk片段

ndk{
            moduleName "testdemo1"
             //生成的so名字
            ldLibs "log","z","m"
            abiFilters "armeabi","armeabi-v7a","x86"
            //输出指定三种abi体系结构下的so库,目前可有可无。
        }

这里写图片描述

5在gradle.properties加入配置

android.useDeprecatedNdk=true

问题 make project 此时如果生成so文件,在app\build\intermediates\ndk->debug->lib下,如果此时没有,说明ndk配置有误,尝试ndk手工编译

ndk-build命令编译

用ndk-build 生成“so”文件,我们还需要在“jni”目录中创建两个文件,分别是Android.mk和Application.mk。下面分别看看他们的具体实现!
Application.mk,这个文件用来配置编译平台相关内容,我们最常用的估计只是APP_ABI字段,它用来指定我们需要基于哪些CPU架构的.so文件,当然你可以配置多个平台。下面指定了两个平台。

APP_ABI := armeabi armeabi-v7a

Android.mk,文件用来指定源码编译的配置信息,例如工作目录,编译模块的名称,参与编译的文件等。

include $(CLEAR_VARS)  
LOCAL_MODULE    := calculate_jni  
LOCAL_SRC_FILES := cn_xinxing_jnitest_CalculateUtils.cpp  
include $(BUILD_SHARED_LIBRARY)  
    LOCAL_PATH:设置工作目录,而my-dir则会返回Android.mk文件所在的目录。
    CLEAR——VARS:清除几乎所有以LOCAL开头的变量(不包括LOCAL_PATH)。
    LOCAL_MODULE:指定生成动态库名。
    LOCAL_SRC_FILES:用来指定生成动态库的源文件   。
    BUILD_SHARED_LIBRARY:作用是指定生成的静态库或者共享库在运行时依赖的共享库模块列表。

按照上面的步骤,创建并输入相应的内容后,我们就可以生成“so”文件了。 打开Terminal,cd到工程的“src/main/jni”目录,输入“ndk-build”命令后,回车,如果你看到下面的截图,那就编译成功了(如没安装成功,提示无法识别,可利用ndk本机安装位置,输入D:\android-sdk\Sdk\ndk-bundle\ndk-build 命令)
这里写图片描述

这里写图片描述

在main目录下建立jniLibs文件夹,将生成的libs文件夹内内容复制到里面,即将so库复制里面,即可在函数中调用

这里写图片描述

6.在MainActivity中调用:

1.在static中加载库 这步可有可没有

 static {
    //    System.loadLibrary("native-lib");
        System.loadLibrary("testdemo1");
    }

2.在oncreat代码部分如下,其中Demo1为类,sayhello为其中的方法

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Example of a call to a native method
        TextView tv = (TextView) findViewById(R.id.sample_text);
        tv.setText(Demo1.sayHello());
    }

这里写图片描述

7.工程目录结构

这里写图片描述

8.工程链接

git项目代码
git地址
git@github.com:ForeverEighteen/TestDemo1.git

9.android studio生成apk在哪?

app/build/outputs/apk

10.jni原理

首先编辑java类 ,static引用 生成的so库,声明相关函数是native。之后利用javah编译生成h文件,在编辑相应的c文件include 这个h文件,在文件中定义相关的函数。最后在MainActivity中就正常可以调用这个函数了。

arm cortex a53架构

这里写图片描述
这里写图片描述

问题 include头文件是红色


在app的build.gradle文件中android 下加入
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}

问题 新建文件没有被工程包含

修改cmake文件
cmakelists 文件内容如下


add_library(  myapplication3
             SHARED
             src/main/jni/jnitil.c )

find_library(  log-lib
                         log )

target_link_libraries( 
                       myapplication3
                          ${log-lib} )

so引用

修改buiid.gradle,添加.so引用路径


sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}

android studio nd开发到底要不要自己配置.mk文件

Android Studio 可以配置build.gradle , main/jni文件夹中的c/c++文件会自动打包成so,但是如果有不同模块的文件,要编译出多个so文件,就不知道在gradle文件中咋配置了(可能也可以配置),这时就可以用原来eclipse的写法;
main/jni文件夹按照原来eclipse的方法去写Android.mk和Application.mk,然后在main目录下执行ndk-build命令,该目录下会创建libs目录,里边就是生成的so,将项目配置的jniLibs.srcDirs指向src/main/libs就行;
这时有几个问题,一个是AS会自动重复编译jni中的文件,打包后会多一个没用的so,还有如果用了第三方的so文件会和自己项目的so文件冲突,因为每次ndk-build后都会删除原来文件夹中的其他so文件.
先去掉 defaultConfig中的ndk配置,然后配置 :
sourceSets{
main{
//指定so库的位置,前边的是自己项目的,后边的是第三方的so
jniLibs.srcDirs=[‘src/main/libs’,’libs’]
//禁止 android studio 自动编译
jni.srcDirs=[]
}
}

Android Studio开发JNI示例 JNI和NDK介绍 JNI(Java Native Interface),是方便Java调用C、C++等Native代码所封装的一层接口,相当于一座桥梁。通过JNI可以操作一些Java无法完成的与系统相关的特性,尤其在图像和视频处理中大量用到。 NDK(Native Development Kit)是Google提供的一套工具,其中一个特性是提供了交叉编译,即C或者C++不是跨平台的,但通过N... 阅读详情

相关推荐

JNI示例的源码

两个JNI的示例实现的代码,主要实现了一个没有参数没有返回值的native方法和有参数且有返回值的native方法

JNI 简单示例

JNI即Java Native Interface(Java本地接口),是一个协议,主要作用为:实现Java调用c/c++代码(类库),或者C/C++调用Java代码。本文主要介绍通过JNI实现java调用C/C++ 通过Java jni来调用native code,需要如下几个步骤: 编写java代码,使用native关键字声明本地方法接口(例如:native void printstr(S...

赶路人儿 1336

JNI与C++数据类型传递示例(包括ArrayList对象、ArrayList嵌套返回)

一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList,ArrayList嵌套ArrayList<ArrayList>等。

JNI全流程实例使用总结

为了更好的获得一些比较独立的模块的性能,比如视频模块,寻路模块,通过对C++ 接口的封装,通过JNI技术对它进行跨语言调用。 那什么是JNI呢?JNI (Java Native Interface,Java本地接口)是一种编程框架,使得Java虚拟机中的Java程序可以调用本地应用/或库,也可以被其他程序调用。 本地程序一般是用其它语言(C、C++或汇编语言等)编写的,并且被编译为基于本机硬件和操作系统的程序。.....................

流子的专栏 3052

JNI实例

NULL 博文链接:https://995215629-qq-com.iteye.com/blog/2170459

jni最简单例子,注释详细

jni最简单例子,注释详细

安卓项目易用Ohttp封装

在android中的网络请求如果用Handler来传,看代码跳来跳去太累。首先呢,这个是我实际项目中的封装,各位不用担心能不能用的问题。支持的功能:1.无缝在主线程调用回到主线程 2.自动Gson泛型机械,并支持到二级泛型 3.支持Activity结束时,取消所有创建的网络操作 4.支持单个网络操作取消 5.使用链式调用,使用方便Get请求HttpUtil.newBuilder(this)/

Android程序员的博客 2270

JNI_AndroidStudio 的创建过程

这里有jni项目的创建过程

JNI的代码示例

打开刚创建的ideal项目中生成的edu_hut_JNIDemo.h文件,全选里面的内容。找到你本地安装的jdk的include项目目录和jdk的include下面win32目录。在JNI中补充如下代码,System.load()里面写Dll3.dll的路径。把Dll3.h文件下的函数名复制到Dll3.cpp中,并书写处理逻辑。把鼠标移动到edu.hut软件包上面,新建一个终端终端。粘贴到Dll3.h文件中的#endif下方。选择具有导出的DLL的动态链接库的模板。在头文件中打开Dll3.h头文件。

w14727619798的博客 652

el-upload自定义上传dwg/dxf文件并且携带额外参数(CAD)

需求:需要使用el-upload自定义上传cad的图片或普通图片,这边需要判断区分下,以及上传后清空上传文件列表。

请叫我欧皇!的博客 1535

ClaudeCode 通过 CC Switch 配置 Ollama 本地大模型

本文介绍了如何让Claude Code使用本地免费模型qwen3.5:9b而无需Anthropic API Key的方法。主要内容包括:1)安装Claude Code、CC Switch代理工具和Ollama本地模型运行时;2)配置环境变量和设置文件将请求转发到本地服务;3)详细说明了系统架构和工作原理,展示请求如何从Claude Code经CC Switch代理到Ollama本地模型。该方案通过代理拦截和转发机制,实现了使用免费开源模型替代官方API的功能。

稚枭天卓 3221

Android中JNI创建实例

参考文档: http://blog.sina.com.cn/s/blog_a11f64590101924l.html http://www.cnblogs.com/hoys/archive/2010/10/28/1863612.html http://www.cnblogs.com/bastard/archive/2012/05/19/2508913.html http://blog.cs

wikiday的专栏 9795

立创·庐山派-K230-CanMV(嘉楠勘智)开发板通过ATK-ESP8266实现图像识别数据无线传输至原子云

本文详细介绍了如何使用立创·庐山派-K230-CanMV开发板,通过ATK-ESP8266 WIFI模块实现图像识别数据的无线传输至原子云平台。内容包括硬件连接、软件环境搭建、AT指令控制、原子云连接及数据上传的全过程,并提供了实用的调试技巧和常见问题解决方案,为物联网应用开发提供了完整实践指南。

potato的博客 741

游戏设计大赛技术评审指南:避免不合理落榜的代码规范与性能优化

游戏开发中的代码规范与性能优化是确保项目质量的核心技术概念。良好的代码规范遵循模块化设计原则,通过清晰的命名、注释和架构分层,提升代码可读性和可维护性。性能优化则涉及帧率稳定、内存管理和加载效率等关键技术指标,直接影响用户体验。在游戏设计大赛的技术评审中,评审机制通常采用多轮筛选,重点关注代码质量、技术实现难度和性能表现。参赛者需要掌握评审标准权重分配,理解技术创新、游戏设计、美术表现等维度的考察重点。通过系统化的技术准备,包括代码规范检查、性能测试和兼容性验证,可以有效避免因技术实现问题导致的不合理落榜情

weixin_34150830的博客 420

华为OD机试 - 第k个排列 - 全排列递归(Python/JS/C/C++ 2025 C卷 100分)

给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!按大小顺序升序列出所有排列的情况,并一一标记当n=3时,所有排列如下“123”,“132,“213”,“231”,“312”,“321”输入两行,第一行为n,第二行为k,给定n的范围是[1,9],给定k的范围是[1,n!排列为“12”和“21”,第2个是“21”。给定n和k,返回第k个排列。输出排在第k位置的数字。只有一个排列,直接返回。

学Java,找哪吒 983

基于STM32设计的老人摔倒检测报警系统(OneNet+MQTT)(235)

基于STM32设计的老人摔倒检测报警系统,不仅能够实时监测老人的位置信息,方便在紧急情况下快速定位,还能通过陀螺仪模块精确检测老人的身体姿态,一旦判断为摔倒状态,系统将立即触发蜂鸣器报警,并通过4G网络向指定联系人发送短信警示,确保老人能够迅速得到援助。此外,系统还支持老人主动按下设备上的按键发送求助短信,增强了系统的灵活性和实用性。

4690

Android 中JNI创建实例

Android开发之使用AndroidStudio开发工具实现JNI的开发 标签: AndroidStudiojnindknative 2016-06-02 16:38 2384人阅读 评论(2) 收藏 举报 分类: Android开发之使用AndroidStudio开发工具实现JNI的开发 版权声明:本文为博主原创文章,未经博主允许不...

weixin_33860737的博客 234

手把手教你学Simulink--基于Simulink的高速公路自动驾驶场景仿真建模

特点车道保持:自动调整车辆方向以保持在车道中央。自适应巡航控制(ACC):根据前方车辆的速度自动调节车速。换道辅助:安全地变换车道以超过慢速行驶的车辆或准备驶离高速公路。紧急制动:检测潜在碰撞并采取措施避免事故。挑战安全性:确保所有功能在各种条件下都能可靠运行。实时性:处理大量传感器数据,并迅速做出反应。复杂性:集成多个子系统,包括感知、规划与控制。首先明确要模拟的任务内容。车辆需保持在车道内行驶。根据交通情况自动调整速度。安全地执行换道操作。在必要时实施紧急制动。

MHD0815的博客 246

Qt for android : 简单实现弹窗创建文件,并使用JNI进行读写实例

Qt for android 6.6.2: JNI打开系统文件管理器创建文件,并简单读写实例

听我一言的博客 935

嵌入式Modbus协议面试题及参考答案

Modbus 协议采用主从模式进行通信,这种模式定义明确,便于在工业环境中实现设备之间的有序数据交互。在主从模式中,存在一个主站(Master)和多个从站(Slave)。主站通常是工业控制系统中的上位机,如 PLC、工控机等,它负责发起通信请求,控制整个通信过程。从站则是各种现场设备,如传感器、执行器等,它们接收主站的请求,并根据请求进行相应的操作,然后将结果返回给主站。主站的主要功能包括:发起数据读取或写入请求、控制通信的时序和流程、处理从站返回的数据。

大模型大数据攻城狮的专栏 2042

2023华为od机试【最小循环子数组】C++

2023华为od机试【最小循环子数组】C++ 给定一个由若干整数组成的数组nums,请检查数组是否是由某个子数组重复循环拼接而成,请输出这个最小的子数组。

MISAYAONE的博客 2185

安卓高版本c/c++调用java,通过JNI_CreateJavaVM/JNI_GetCreatedJavaVMs创建虚拟机实例

c/c++调用java;JNI_CreateJavaVM/JNI_GetCreatedJavaVMs创建虚拟机实例;libnativehelper; JNI_CreateJavaVM运行挂载libart

我的博客 2422

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

cocos2dx jni 调用java,cocos2dx 与android函数的互相调用及使用jni

cocos2dx 与android函数的相互调用及使用jni哈喽大家好 ,之前一阵子一直在忙项目,没怎么发过博文,挺想看看cocos2dx与安卓是如何交互的,所以就学习了一下(因为我是小菜嘛 想多学点东西 嘻嘻!!!)做了这么一个小test,虽然不多代码但小菜弄了许久,发上来给大家分享下如果有什么错误或建议欢迎大家为我指出来啊 小菜感激不尽。。。其实一开始是在想如何在cocos2dx中加入广告及第...

weixin_39782433的博客 199

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

安卓studio jni 简单实例demo

安卓studio jni 简单实例 标签(空格分隔): jni 1.Jni 是java native Interface 就是java本地接口,接口就是语言链接的入口。 在安卓中 我们首先写好c文件,然后编译成linux平台的so文件库。 现在,我写一个例子来说: 首先,我们定义一个本地方法,函数内容用C语言来实现/ 新建一个空,新建一个class,自己定义...

blithe影子 1201

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

上一篇: 工具
下一篇: 关于安卓手机 的调试
forevertingting
博客等级 码龄12年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值