【Qzone】把喜欢的事做到极致 Kernel->JNI->Application

vue高仿饿了么vue-router版本不一致问题解决 问题 在学习的过程中遇到了三个问题: 1、vue-router版本不一致,不能按照老师的方法来 2、按照官网中的方法写,出现了duplicate declaration “router” 的问题。 3、一番随心修改后编译过了,网页上什么都没有。 解决方案 import Vue from 'vue'; import App from './App'; import Router from 'vue-... 阅读详情

2015-4-1 22:49 

ANDROID 应用控制 PWM

从硬件到软件
从C语言到JAVA语言

中间没有涉及HAL和Framework

GEC210 S5PV210
20150401  为什么骗我?  

图片 

1st
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Kernel
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/*

 * linux/drivers/char/gec210_pwm.c

 * This program is free software; you can redistribute it and/or modify

 * it under the terms of the GNU General Public License version 2 as

 * published by the Free Software Foundation.

 */

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/init.h>

#include <linux/platform_device.h>

#include <linux/fb.h>

#include <linux/backlight.h>

#include <linux/err.h>

#include <linux/pwm.h>

#include <linux/slab.h>

#include <linux/miscdevice.h>

#include <linux/delay.h>

#include <mach/gpio.h>

#include <mach/regs-gpio.h>

#include <plat/gpio-cfg.h>


#define DEVICE_NAME    "pwm"

#define PWM_IOCTL_SET_FREQ    1

#define PWM_IOCTL_STOP    0

#define NS_IN_1HZ    (1000000000UL)

#define BUZZER_PWM_ID    0

#define BUZZER_PMW_GPIO    S5PV210_GPD0(0)


static struct pwm_device *pwm4buzzer;

static struct semaphore lock;
 

static void pwm_set_freq(unsigned long freq) {

    int period_ns = NS_IN_1HZ / freq;

    pwm_config(pwm4buzzer, period_ns / 2, period_ns);

    pwm_enable(pwm4buzzer);

}


static void pwm_stop(void) {

    pwm_config(pwm4buzzer, 0, NS_IN_1HZ / 100);

    pwm_disable(pwm4buzzer);

}

static int gec210_pwm_open(struct inode *inode, struct file *file) {

    if (!down_trylock(&lock))

        return 0;

    else

        return -EBUSY;

}

static int gec210_pwm_close(struct inode *inode, struct file *file) {

    up(&lock);

    return 0;

}

static long gec210_pwm_ioctl(struct file *filep, unsigned int cmd,

unsigned long arg)

{

    switch (cmd) {

        case PWM_IOCTL_SET_FREQ:

            if (arg == 0)

                return -EINVAL;

            pwm_set_freq(arg);

        break;

        case PWM_IOCTL_STOP:

        default:

        pwm_stop();

        break;

}

return 0;

}

static struct file_operations gec210_pwm_ops = {

    .owner    = THIS_MODULE,

    .open = gec210_pwm_open,

    .release= gec210_pwm_close, 

    .unlocked_ioctl= gec210_pwm_ioctl,

};

static struct miscdevice gec210_misc_dev = {

    .minor = MISC_DYNAMIC_MINOR,

    .name = DEVICE_NAME,

    .fops = &gec210_pwm_ops,

};

static int __init gec210_pwm_dev_init(void) {

    int ret;

    ret = gpio_request(BUZZER_PMW_GPIO, DEVICE_NAME);

    if (ret) {

        printk("request GPIO %d for pwm failed\n", BUZZER_PMW_GPIO);

        return ret;

    }

    gpio_set_value(BUZZER_PMW_GPIO, 0);

    s3c_gpio_cfgpin(BUZZER_PMW_GPIO, S3C_GPIO_OUTPUT);

    gpio_set_value(BUZZER_PMW_GPIO, 0);

    pwm4buzzer = pwm_request(BUZZER_PWM_ID, DEVICE_NAME)

    if (IS_ERR(pwm4buzzer)) {

    printk("request pwm %d for %s failed\n", BUZZER_PWM_ID, DEVICE_NAME);

    return -ENODEV;

    }

    pwm_stop();

    gpio_set_value(BUZZER_PMW_GPIO, 0);

    s3c_gpio_cfgpin(BUZZER_PMW_GPIO, S3C_GPIO_SFN(2));

    gpio_free(BUZZER_PMW_GPIO);

    gpio_set_value(BUZZER_PMW_GPIO, 0);

    init_MUTEX(&lock);

    ret = misc_register(&gec210_misc_dev);

    printk(DEVICE_NAME "\tinitialized\n");

    return ret;

}

static void __exit gec210_pwm_dev_exit(void) {

    pwm_stop();

    misc_deregister(&gec210_misc_dev);

}

module_init(gec210_pwm_dev_init);

module_exit(gec210_pwm_dev_exit);
 

MODULE_LICENSE("GPL");

MODULE_AUTHOR("GEC");【资料来自班主任周老师的光盘】

MODULE_DESCRIPTION("S5PV210 PWM Driver");


------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/Kernel
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2nd

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JNI
------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 

#include <jni.h>
 

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <utils/Log.h>


#define LOG_NDEBUG 0

#define LOG_TAG "pwm"


int fd=-1;


/ *

*此方法为上述Java文件openPwmDev方法的实现体

*native方法代表此方法实现体在C组件动态库完成

*/


JNIEXPORT void JNICALL Java_com_gec_pwmjnitest_activity_PwmJniTestActivity_openPwmDev(JNIEnv * env, jobject object)

{

    LOGE("Java_com_gec_pwmjnitest_activity_PwmJniTestActivity_openPwmDev\n");

    //打开PWM设备节点

    fd=open("/dev/pwm",O_RDWR);

}


/*

*freq变量就是从Java层传入的频率

*通过ioctl调用驱动控制pwm频率

*/

JNIEXPORT void JNICALL Java_com_gec_pwmjnitest_activity_PwmJniTestActivity_opPwm(JNIEnv * env, jobject object,jint op,jlong freq)

{

    LOGE("Java_com_gec_pwmjnitest_activity_PwmJniTestActivity_opPwm\n");

    ioctl(fd, op , freq );

}


JNIEXPORT void JNICALL Java_com_gec_pwmjnitest_activity_PwmJniTestActivity_closePwmDev(JNIEnv * env, jobject object)

{

    LOGE("Java_com_gec_pwmjnitest_activity_PwmJniTestActivity_closePwmDev\n");

    //关闭PWM设备节点

    close(fd);

} 


------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/JNI
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3rd

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Application
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package com.gec.pwmjnitest.activity;


import android.app.Activity;

import android.os.Bundle;

import android.view.View;


import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

public class PwmJniTestActivity extends Activity {


/** Called when the activity is first created. */

private EditText freId;

private Button btnStart,btnStop;


/ *

*静态加载C组件动态库(动态库名称是libpwmtest.so)

*注意动态库名称不是pwmtest.so,必须要在pwmtest前面加上lib

*/


static

{

System.loadLibrary("pwmtest");

}


@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);


openPwnDev();



       freId=(EditText)findViewById(R.id.freId);

       btnStart=(Button)findViewById(R.id.btn_start_id);

       btnStop=(Button)findViewById(R.id.btn_stop_id);




    btnStart.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

    // TODO Auto-generated method stub

    String sfreq=freId.getText().toString();

    //输入参数频率

    opPwm(1,Long.parseLong(sfreq));

    }

    });


    btnStop.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {

    // TODO Auto-generated method stub

    String sfreq=freId.getText().toString();

    opPwm(0,Long.parseLong(sfreq));


    }

    });


   }


    @Override

    protected void onDestroy() {

    // TODO Auto-generated method stub

    super.onDestroy();

    closePwmDev();

    }


    /*

    *声明三个native方法

    *native方法代表此方法实现体在C组件动态库完成

    *op=1:代表启动蜂鸣器, op=0:代表停止蜂鸣, freq:输入蜂鸣器的频率

    */

    public native void openPwmDev();


    / *

    *op=1:代表启动蜂鸣器, op=0:代表停止蜂鸣, freq:输入蜂鸣器的频率

    */


    public native void opPwm(int op,long freq);

    public native void closePwmDev();

}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/Application
------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 



步骤:


开发 Android 应用程序输入频率,控制蜂鸣器


掌握编写 Android 应用程序及通过 JNI 调用 C 函数控制 PWN
 

通过 Eclipse 开发 Android 应用程序界面
 

编写 JNI 程序的 C 语言文件
 

编写 Android.mk 文件


编译 Android 程序


本程序原理Android应用层界面开发由JAVA语言实现, 然后静态加载C语言组件动


态库, C语言组件动态库必须以JNI框架标准(Java Native Interface (JNI)标准是java


平台的一部分,它允许Java代码和其他语言写的代码进行交互。 JNI 是本地编程


接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语


言(如 C、 C++ 和汇编语言)编写的应用程序和库进行交互操作。),然后在C语言


组件动态库调用PWM驱动程序。



编写 PWMJNITESTACTIVITY.JAVA 源程序代码
 

工程目录新建 JNI 目录,编写 C 组件动态库 APPPWM.C 文件


根据 JNI1.0 调用规则
 

C 语言: appPwm.c 文件里面的
 

openPwmDev ------->Java_com_gec_pwmjnitest_activity_PwmJniTestActivity_openPwmDev


opPwn ------->Java_com_gec_pwmjnitest_activity_PwmJniTestActivity_opPwm


closePwnDev ------> Java_com_gec_pwmjnitest_activity_PwmJniTestActivity_closePwmDev


左边是在 JAVA 类声明的 native 成员方法,右边是 C 语言函数对应成员方法实现体
 

编写生成 JNI 动态库的配置文件 ANDROID.MK


LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)


LOCAL_MODULE:=libpwmtest                     a


LOCAL_SRC_FILES:=appPwm.c                  b


LOCAL_C_INCLUDES+= \                             c


$(JNI_H_INCLUDE)


LOCAL_PRELINK_MODULE := false


LOCAL_MODULE_TAGS:= debug


include $(BUILD_SHARED_LIBRARY)          d


其中abcd为注释,下同 


a:生成C 动态库名称libpwmtest(JAVA层就是通过加载此库名称来实现互调)


b:编译C文件


c:加载jni库头文件


d:生成libpwmtest动态库,要跟Java静态加载的库名一致

 

编写应用工程 ANDROID.MK 文件


LOCAL_PATH:= $(call my-dir)                                                  a


include $(CLEAR_VARS)                                                          b


LOCAL_SRC_FILES := $(call all-subdir-java-files)                   c


LOCAL_PACKAGE_NAME:= PwmJniTest                                d


LOCAL_JNI_SHARED_LIBRARIES:= libpwmtest                      e


include $(BUILD_PACKAGE)                                                     f


include $(LOCAL_PATH)/jni/Android.mk                                   g


# Use the folloing include to make our test apk.


include $(call all-makefiles-under,$(LOCAL_PATH))                  h


a:一个Android.mk文件首先必须定义好LOCAL_PATH,获得当前目录


b:用来初始化Android.mk文件中” LOCAL_XXX” 的变量


c:编译Java文件


d:生成Android应用apk文件名称


e:生成JNI动态库libpwmtest


f:生成Android应用


g:编译jni目录里面的Android.mk文件


h:编译此工程里面所有的Android.mk文件

 

PWM 应用编译


将应用工程源代码(PwmJniTest)放到 Android-2.3.1\vendor\samsung\gec210\目录中, 先


对整个 Android-2.3.1 系统进行一次完整的编译。编译后按如下流程编译应用程序:


在 Android 源码目录下输入命令


#source build/envsetup.sh (生成的使用环境及环境中的命令)


#lunch 4(选择 full_gec210-eng 开发板)【full_gec210-eng 不知道这个是怎么来的】


#mmm vendor/samsung/gec210/ PwnJniTest(编译当前应用程序)


成功编译后会在 out/target/product/gec210/system/app/目录下生成对应的 
 

PwmJniTest.apk 文件 【虽这个不曾尝试 但亲测编译过模拟器Goldfish版的 确实如此】


仅仅理论 木有实践


THE  END  
 

114

APK通过JNI直接访问Kernel驱动程序实现驱动LED的demo 学习韦东山老师的4412开发板视频,做了点笔记,发出来跟大家分享一下这个学习的过程。学习韦东山老师的4412开发板视频,做了点笔记,发出来跟大家分享一下这个学习的过程 立即下载

相关推荐

JetLinks社区版VS企业版:手把手教你用PostgreSQL+Redis搭建物联网中台(Win7实测)

本文详细对比了JetLinks社区版与企业版的核心差异,并提供了在Windows 7系统上,使用PostgreSQL和Redis搭建物联网中台的完整部署教程。文章深入解析了从环境准备、后端服务构建到前端部署的每一步,为开发者在资源有限环境下构建高性价比物联网平台提供了清晰的实战指南。

w1x2y3的博客 304

ERROR 'duplicate declaration of type/attribute' at token ';' on line 14430

MTK添加Android权限te文件后,编译make bootimage报重复duplicate错误。 错误信息: ------------------------------------------------------------------------ out/host/linux-x86/bin/checkpolicy: loading policy configurati

新生代CV搬运工 1万+

STM32H7 FOC控制时序优化与PWM中点更新策略

在永磁同步电机(PMSM)的磁场定向控制(FOC)系统中,控制时序精度是决定电流环带宽、观测器收敛性与动态响应能力的基础要素。其核心在于理解PWM生成、ADC采样与控制计算三者之间的硬件级时间耦合关系——尤其在中心对齐模式下,标准更新机制引入的半周期延迟会破坏电压-电流瞬时映射,导致滑模观测器失配与高频相位滞后。通过将PWM更新事件绑定至重复计数器(RCR)清零点,可实现控制指令在开关周期中点生效,使等效电压矢量中心与计算时刻严格对齐。该策略显著提升系统确定性,为20 kHz以上高频电流环提供物理支撑,并广

flink9streamer的博客 857

编译错误和crash汇总

1、java.lang.NullPointerException: Attempt to get length of null array解决方法参考 判断空数据一定要先判断是否为null,再判断数据的长度。 if(array != null && array.leng != 0) {undefined //数据不为空数据的判断 ....... } ......

luyao3038的博客 4117

5分钟搞懂Paris公式:如何用裂纹扩展速率预测零件寿命(附Python代码示例)

本文详细介绍了Paris公式在裂纹扩展速率预测零件寿命中的应用,通过Python代码示例展示了从理论到实践的完整流程。文章涵盖了Paris公式的工程本质、寿命预测计算流程、几何修正因子选择以及实际案例演示,帮助工程师快速掌握这一关键技术。

weixin_29309475的博客 426

ThingsBoard教程(一):ThingBoard介绍及安装

ThingsBoard介绍 最近看了很多开源的物联网的项目,其中有一个让我印象很深,那就是Thingsboard 下面我就给大家介绍一下这个项目,并指导大家如何在本地安装一个Thingsboard来体验它。 首先引用官网的项目介绍就是 一个开源的用于数据收集,处理,可视化和设备管理的开源物联网平台。 它通过行业标准的物联网协议(MQTT,CoAP和HTTP)实现设备连接,并支持云和本地部署。ThingsBoard结合了可伸缩性,容错性和性能,因此您永远不会丢失数据。 用它开源收集链接设备,收集设备的数据,

知无涯 2万+

新增分区 device/mediatek/sepolicy/basic/non_plat/file.te:429:ERROR ‘Duplicate declaration of type‘ at to

Android会将所有的te文件附加到一个文件中。您需要在每个te文件的末尾添加一个空行,否则上一个文件的最后一行和当前文件的第一行会混淆。而且,我更喜欢你在每个te文件的开头添加一个空行,以避免其他te文件的格式错误。原因在于,Android的te权限文件,在两个路径下都可以添加,效果一样,但不能同时有,不然会报重复错误!

hnlgzb的专栏 416

如何让 Mac mini 24小时不休眠运行 OpenClaw

如果 OpenClaw 每 5-10 分钟自动退出,launchd 连续 4 次快速重启后会判定为崩溃循环并卸载服务。:方案一(pmset)+ 方案三(launchd)组合使用,既防止系统休眠,又保证 OpenClaw 开机自启和崩溃自动恢复。:caffeinate 只在进程运行期间有效,终端关闭或进程结束后系统恢复正常睡眠策略。这条命令会自动创建 launchd plist 并启用服务,是最推荐的方式。替换为你的实际用户名路径,Node.js 路径也要改成你自己的。确保 plist 中有。

Maynor的博客 2193

Selinux机制介绍与添加流程

Selinux机制介绍与添加流程 一.Selinux机制介绍 二.Selinux问题分析步骤 三.Selinux添加步骤; 3.1 添加/dev/ttyHSL1 串口字符设备selinux权限; 3.2 添加/sys/class 虚拟设备文件selinux权限; 3.3 添加proc/class 文件selinux权限; 3.4 添加开机脚本的selinux权限; 四.Selinux编译及验证; ...

hjlgs的博客 3502

DeepSeek:为文化创意产业注入AI新动能

沪南胜境,闵行新章。随后,2024 年 5 月,DeepSeek 宣布开源第二代 MoE 大模型 DeepSeek-V2,以其比肩 GPT-4Turbo 的卓越性能,以及仅为 GPT-4 百分之一的价格优势,迅速在市场中掀起波澜,收获了 “AI 届拼多多” 的独特名号,让更多人看到了高性价比 AI 大模型的可能性。创作者自身也应提高对创作伦理的认识,树立正确的创作观念,在使用 AI 工具时,保持对创作的主导权,充分发挥自己的创造力和想象力,将 AI 作为创作的辅助工具,而不是替代品。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1960

GEE:基于MODIS数据计算NDVI时间序列,并使用Savatsky-Golay(SG)滤波器对其进行平滑处理

优快云@_养乐多_本文将介绍如何在 Google Earth Engine (GEE) 平台中,使用 MODIS 数据计算 NDVI 时间序列,并对该数据集应用 Savitzky-Golay 滤波器,得到了一个新的平滑后的数据集。Savitzky-Golay 滤波器可以有效地去除信号中的噪声,并平滑信号的变化。该方法可以扩展到基于 MODIS 数据计算的任何指数或者波段。

养乐多的博客 1422

LDAP启动:slaptest: bad configuration file!

报错:config error processing cn={1}core,cn=schema,cn=config: olcAttributeTypes: Duplicate attributeType: "2.5.4.2" 原因: 更新slapd.d配置文件 slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

周源的专栏 5481

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

Duplicate declaration "UserModel" 重复声明出现的错

废话不多说 直接上错误: 原因是重复声明了: 去掉一个即可 ,自己反的错找了半天错误,以此记录。

qq_42112846的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Xcode:duplicate declaration of method 'XXX'

额...有人问我, Duplicate 是不是double很像! 对就是复制的意思 就是你方法名重复了而已!

juyufeng_HuaZhu的博客 6080

蓝牙模块HM-10手册

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

编译32&64位 fingreprintd

/system/core/fingerprintd/Android.mk select build 32 or 64 LOCAL_MULTILIB :=32 #test bruce

新生代CV搬运工 660

关于Error: Can't compile duplicate declarations of entity "**" into library "work"的错误

今天做SEG7模块添加74138时,出现了Error: Can't compile duplicate declarations of entity "**" into library "work"。“**”是我的一个模块文件名,这个文件名同时有一个.bdf文件,还有一个.v文件。 其中.bdf文件是我为了加74138时新建的文件,存盘时我没有改默认文件名,所以出现和...

weixin_30364325的博客 1003

编绎显示Unknown type name “NSData” 错误解决方法

出现这种错误可能的原因有2个 1.缺少UIKit 解决方法 导入#import  2.将Compile Sources As 改为 Objective-C++

baidu_21172753的专栏 4881

TypeScript 2.x 学习指南(六)

在本章中,我们学习了 TypeScript 编译器的内部组件。我们还学习了如何使用编译器 API 以及如何利用这些特性来开发我们的 TypeScript 开发工具。我希望这一章能够激发你对 TypeScript 编译器内部结构和由 TypeScript 驱动的软件开发工具开发的兴趣。它们的潜力和日益增长的受欢迎程度将把 JavaScript 生态系统提升到新的水平。

龙哥盟 4958

Android 上层界面到内核代码的完整的流程分析,以alarm为例子

很久之前写的一个流程文档,从上层界面一直调用到内核的过程,最近同事跟我要,我看了下又在整理了下,纯属个人分析(不过都运行验证过),不对的请大牛指出 Alarm 调用流程,alarm的流程实现了从上层应用一直到下面driver的调用流程,下面简单阐述: 涉及

Mr.瑞的专栏 9434

从java层到framework到JNI到HAL到kernel的hello 例子

转载自 http://blog.youkuaiyun.com/Luoshengyang/article/category/838604/3   在智能手机时代,每个品牌的手机都有自己的个性特点。正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了。据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market

hello world 7217

How to solve "drivers/ner/igbvf/igbvf.h:129:15: error: duplicate member ‘page’"

include/linux/irq.h: In function ‘alloc_desc_masks’:include/linux/irq.h:441:8: warning: variable ‘gfp’ set but not used [-Wunused-but-set-variable]In file included from drivers/net/igbvf/ethtool.c:36:...

weixin_30876945的博客 294

find & grep 结合查找 某字符串 所在文件

1、 在当前目录下所有文件中查找内容包含 字符串 bruce_xxx 的文件: # find ./ -name "*" -exec grep "bruce_xxx" {} \; ----------------------------------- root@ubuntu:/media/4412-5.0_/bruce-4412-5.0/android-5.0.2/brucepat

新生代CV搬运工 7127
上一篇: 【···[ て]おきます】做好准备
下一篇: 【Qzone】打不死的小强 杀不死的服务 开机自启动服务
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值