Android核心技术-day01-03-短信发送器(授权代码封装)

BMS保护板原理图+PCB+固件源码+bin文件+上位机 BMS保护板原理图+PCB+固件源码+bin文件+上位机 单片机是STM32F303CCT6 1、带有软电源开关输入,带 LED (LOAD) 开/关 + 充电指示灯; 2、具有高压侧电源开关,控制通断; 3、隔离式 CAN 总线接口; 4、电流测量; 5、带有短路检测; 6、带有USB 接口通信和固件升级; 7、蜂鸣器指示错误状态; 8、体积小巧; 9、短时间最大负载电流+/- 100A,长时间约为70A; 10、最大充电电流 10A(带二极管)或 30A(带二极管旁路); 11、电池电压范围为 2.5V 至 4.5V; 12、包电压 12V 至 54V; 立即下载

BaseActivity.java

package com.gaozewen.smssender;

import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;


public class BaseActivity extends AppCompatActivity {
    //**************** Android M Permission (Android 6.0权限控制代码封装)
    private int permissionRequestCode = 88;
    private PermissionCallback permissionRunnable;

    public interface PermissionCallback {
        void hasPermission();

        void noPermission();
    }

    /**
     * Android M运行时权限请求封装
     *
     * @param permissionDes 权限描述
     * @param runnable      请求权限回调
     * @param permissions   请求的权限(数组类型),直接从Manifest中读取相应的值,比如Manifest.permission.WRITE_CONTACTS
     */
    public void performCodeWithPermission(@NonNull String permissionDes, PermissionCallback runnable, @NonNull String... permissions) {
        if (permissions.length == 0)
            return;
        // this.permissionrequestCode = requestCode;
        this.permissionRunnable = runnable;
        // Build.VERSION.SDK_INT 来自 build.gradle.
        if ((Build.VERSION.SDK_INT < Build.VERSION_CODES.M) || checkPermissionGranted(permissions)) {
            if (permissionRunnable != null) {
                permissionRunnable.hasPermission();
                permissionRunnable = null;
            }
        } else {
            //permission has not been granted.
            requestPermission(permissionDes, permissionRequestCode, permissions);
        }

    }

    private boolean checkPermissionGranted(String[] permissions) {
        boolean isGranted = true;
        for (String p : permissions) {
            if (ActivityCompat.checkSelfPermission(this, p) != PackageManager.PERMISSION_GRANTED) {
                isGranted = false;
                break;
            }
        }
        return isGranted;
    }

    private void requestPermission(String permissionDes, final int requestCode, final String[] permissions) {
        if (shouldShowRequestPermissionRationale(permissions)) {
            /*1. 第一次请求权限时,用户拒绝了,下一次:shouldShowRequestPermissionRationale()  返回 true,应该显示一些为什么需要这个权限的说明
            2.第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项时:shouldShowRequestPermissionRationale()  返回 false
            3. 设备的策略禁止当前应用获取这个权限的授权:shouldShowRequestPermissionRationale()  返回 false*/
            // Provide an additional rationale to the user if the permission was not granted
            // and the user would benefit from additional context for the use of the permission.
            // For example, if the request has been denied previously.

            //            Snackbar.make(getWindow().getDecorView(), requestName,
            //                    Snackbar.LENGTH_INDEFINITE)
            //                    .setAction(R.string.common_ok, new View.OnClickListener() {
            //                        @Override
            //                        public void onClick(View view) {
            //                            ActivityCompat.requestPermissions(BaseAppCompatActivity.this,
            //                                    permissions,
            //                                    requestCode);
            //                        }
            //                    })
            //                    .show();
            //如果用户之前拒绝过此权限,再提示一次准备授权相关权限
            new AlertDialog.Builder(this)
                    .setTitle("提示")
                    .setMessage(permissionDes)
                    .setPositiveButton("授权", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode);
                        }
                    }).show();

        } else {
            // Contact permissions have not been granted yet. Request them directly.
            ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode);
        }
    }

    private boolean shouldShowRequestPermissionRationale(String[] permissions) {
        boolean isShow = false;
        for (String p : permissions) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, p)) {
                isShow = true;
                break;
            }
        }
        return isShow;
    }

    /**
     * Callback received when a permissions request has been completed.
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        if (requestCode == permissionRequestCode) {
            if (verifyPermissions(grantResults)) {
                if (permissionRunnable != null) {
                    permissionRunnable.hasPermission();
                    permissionRunnable = null;
                }
            } else {
                Toast.makeText(this, "暂无权限执行相关操作!", Toast.LENGTH_SHORT).show();
                if (permissionRunnable != null) {
                    permissionRunnable.noPermission();
                    permissionRunnable = null;
                }
            }
        } else {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }

    }

    public boolean verifyPermissions(int[] grantResults) {
        // At least one result must be checked.
        if (grantResults.length < 1) {
            return false;
        }

        // Verify that each required permission has been granted, otherwise return false.
        for (int result : grantResults) {
            if (result != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }
    //********************** END Android M Permission ****************************************
}

AndroidManifest.xml

<uses-permission android:name="android.permission.SEND_SMS" />

MainActivity.java

package com.gaozewen.smssender;

import android.Manifest;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends BaseActivity {

    private EditText mEt_phone;
    private EditText mEt_msg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 1. 获取到界面上的控件
        mEt_phone = findViewById(R.id.et_phone);
        // 2. 获取到界面上的控件
        mEt_msg = findViewById(R.id.et_msg);
        // 3. 获取
        Button bt_sendMsg = findViewById(R.id.bt_sendMsg);
        // 4. 设置点击监听事件
        bt_sendMsg.setOnClickListener(new MySendMessageListener());

    }

    private class MySendMessageListener implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            final String phone = mEt_phone.getText().toString().trim();
            final String msg = mEt_msg.getText().toString().trim();
            if("".equals(phone) || "".equals(msg)){
                Toast.makeText(MainActivity.this,"号码和内容不能为空",Toast.LENGTH_SHORT).show();
                return;
            }
            System.out.println(phone + ":" + msg);

            performCodeWithPermission("发送短信权限", new PermissionCallback() {
                @Override
                public void hasPermission() {
                    SmsManager smsManager = SmsManager.getDefault();
                    // 服务商,发送时 要处理的事件, 发送成功后 要处理的事件
                    smsManager.sendTextMessage(phone,null,msg,null,null);
                    // 5. 设置权限 <uses-permission android:name="android.permission.SEND_SMS" />
                }

                @Override
                public void noPermission() {

                }
            }, Manifest.permission.SEND_SMS);

        }
    }
}

MainActivityOld.java (6.0前)

package com.gaozewen.smssender;

import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivityOld extends BaseActivity {

    private EditText mEt_phone;
    private EditText mEt_msg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 1. 获取到界面上的控件
        mEt_phone = findViewById(R.id.et_phone);
        // 2. 获取到界面上的控件
        mEt_msg = findViewById(R.id.et_msg);
        // 3. 获取
        Button bt_sendMsg = findViewById(R.id.bt_sendMsg);
        // 4. 设置点击监听事件
        bt_sendMsg.setOnClickListener(new MySendMessageListener());

    }

    private class MySendMessageListener implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            String phone = mEt_phone.getText().toString().trim();
            String msg = mEt_msg.getText().toString().trim();
            if("".equals(phone) || "".equals(msg)){
                Toast.makeText(MainActivityOld.this,"号码和内容不能为空",Toast.LENGTH_SHORT).show();
                return;
            }
            System.out.println(phone + ":" + msg);
            SmsManager smsManager = SmsManager.getDefault();
            // 服务商,发送时 要处理的事件, 发送成功后 要处理的事件
            smsManager.sendTextMessage(phone,null,msg,null,null);
            // 5. 设置权限 <uses-permission android:name="android.permission.SEND_SMS" />
        }
    }
}

 

【带状电容器计算用于电容式触摸传感器应用】半数值模型的电容式触摸传感器集成于金属基材涂层中研究(Matlab代码实现) 内容概要:本文针对电容式触摸传感器在金属基材上应用时易受干扰导致信号衰减的问题,提出一种集成于金属基材涂层中的带状电容器半数值计算模型。通过理论推导建立传感器电容的数学模型,设定合理的边界条件并采用数值方法求解,利用Matlab实现完整的仿真代码,对传感器在金属背景下的电容特性进行精确建模与性能分析。该方法有效提升了传感器的灵敏度与抗干扰能力,适用于高精度、复杂环境下的触摸感应场景,具有良好的工程应用价值。研究不仅提供了详细的建模流程与仿真验证,还开放了可复现的代码资源,便于后续优化与拓展。; 适合人群:从事电容式传感器设计、嵌入式系统开发、人机交互技术研究及相关领域的科研人员,以及具备电磁场理论基础和Matlab编程能力的硕士、博士研究生;; 使用场景及目标:①用于金属表面电容式触摸传感系统的建模与性能优化;②为抗金属干扰传感器提供有效的半数值仿真方法与技术支撑;③辅助高校科研与教学中对电容耦合机制的理解及仿真平台搭建; 阅读建议:建议结合Matlab代码逐模块调试,深入理解模型中几何参数、材料属性及边界条件对电容输出的影响规律,可进一步推广至其他复杂结构或非理想环境下的传感器设计中。 立即下载

相关推荐

(Multisim课设资料)最全面函数信号发生器(三角波+正弦波+方波信号+锯齿波仿真设计+报告文档

内容概要:本文档是一份综合性科研技术资源汇总,系统梳理了工程与计算机科学领域的多项关键技术及其实现方法,涵盖图像处理、路径规划、无人机应用、通信技术、信号处理、电力系统优化、车间调度、雷达技术、微电网与综合能源系统调度等多个前沿方向。文档重点提供了基于Matlab和Simulink的丰富仿真案例,包括裂纹检测、双目视觉体积测量、卡尔曼滤波状态估计、永磁同步电机控制、无功优化、多目标调度算法(如NSGA-II、粒子群算法)在能源与交通系统中的应用,以及遗传算法、差分进化、人工蜂群等智能优化算法的代码实现。资源强调理论与实践深度融合,配套完整的仿真模型、算法代码与实验结果,具有较强的工程复现价值和科研指导意义。; 适合人群:具备一定编程基础的研究生、科研人员及从事自动化、电气工程、控制工程、通信、人工智能等相关领域工作的技术人员,尤其适合有1-3年工作经验的研发人员。; 使用场景及目标:①用于高校课程设计、毕业设计、科研项目开发和技术复现;②支撑电力系统优化、智能制造调度、智能交通路径规划、无人机控制等实际工程问题的算法研究与仿真验证;③帮助读者掌握主流优化算法与信号处理技术的核心原理与代码实现。; 阅读建议:建议读者结合文中提供的Matlab/Simulink代码与仿真模型进行实践操作,优先选择与自身研究方向相关的主题深入学习,并参考所提供的网盘链接获取完整资源以辅助调试与复现实验结果。

Static interface methods are only supported starting with Android N (--min-api 24): void butterknif

指定项目的 jdk 版本 为 1.8 主工程 app 目录下 build.gradle   android { ... // 指定jdk版本 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VER...

知识改变一切 802

无刷直流电机BLDC无感+滑模观测器+转速电流双闭环PI控制(总共三个仿真模型)(Simulink仿真实现)

内容概要:本文档系统阐述了无刷直流电机(BLDC)在无位置传感器条件下的高性能控制策略,基于Simulink平台构建了三个相互关联的仿真模型,重点实现无感控制与滑模观测器(Sliding Mode Observer, SMO)相结合的转速电流双闭环PI控制系统。该资源摒弃了传统的霍尔传感器,利用滑模观测器实时估算转子的位置与转速信息,有效降低了系统成本并提升了在恶劣环境下的运行可靠性。仿真模型完整涵盖了逆变电路、空间矢量脉宽调制(SVPWM)、三相电流采样、坐标变换(Clark & Park)、PI调节器以及滑模观测器等核心模块,形成了一个闭环的、高动态响应的电机驱动系统。此外,文档还集成了模糊PID、传统PID等多种控制算法的对比仿真模型,便于研究者深入分析不同控制策略在动态响应、抗干扰能力和稳态精度方面的性能差异,为电机控制算法的研究与工程化应用提供了坚实的仿真验证基础。; 适合人群:具备自动控制理论、电机拖动原理及电力电子技术基础知识,并熟悉MATLAB/Simulink软件操作的电气工程、自动化、机电一体化等专业的高年级本科生、硕士研究生,以及从事电机驱动、新能源汽车、工业自动化等领域的研发工程师和技术人员。; 使用场景及目标:①深入学习和掌握无刷直流电机无位置传感器控制的基本原理与实现方法;②系统性地理解滑模观测器的设计思想、稳定性分析及其在转子位置与速度估计中的关键技术;③对比研究传统PI控制、模糊PID控制及滑模观测器在BLDC调速系统中的综合性能,分析其在不同工况下的鲁棒性与适应性;④为毕业设计、科研课题或工业项目中的电机控制系统开发提供可复用的仿真平台与技术参考。; 阅读建议:本资源以Simulink仿真为核心载体,建议使用者结合文档中提供的详细说明报告与参考文献,循序渐进地理解各功能模块的设计逻辑与参数整定方法。在学习过程中,务必动手运行并调试仿真模型,仔细观察并记录在不同负载突变、转速指令变化等工况下,电机的三相电流、转速响应曲线及滑模观测器输出的转子位置与速度的动态波形,从而深刻理解控制算法的内在机理。为进一步提升实践与创新能力,可尝试修改控制器参数(如PI增益、滑模增益),或替换不同的控制策略进行对比实验,探究其对系统性能的影响。

Android核心技术-day06-03-调用系统短信发送(不需要授权)

package com.gaozewen.sendsms; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; public clas...

知识改变一切 666

基于UC3842的反激式开关电源Multisin仿真设计【仿真+原理说明+参考文档】

内容概要:本文系统阐述了基于UC3842电流模式PWM控制器的反激式开关电源在Multisim环境中的完整仿真设计过程。围绕小功率隔离型直流电源的设计需求,深入剖析反激拓扑与电流模式控制的协同工作机制,构建了包含启动电路、高频变压器、RCD钳位网络、TL431与光耦构成的隔离反馈环路以及UC3842核心控制芯片的完整仿真模型。重点对电源的启动特性、辅助供电建立、变压器初级电流与电压波形、反馈环路的稳定性、以及UC3842的逐周期峰值电流限制和在负载突变、输出短路等异常工况下的“打嗝”式保护行为进行了详尽的仿真分析与验证,充分论证了该设计方案的可行性与工程可靠性。; 适合人群:具备模拟电子技术、电力电子技术及开关电源基础知识,从事电源产品开发、电力电子系统设计的工程师、高等院校电气工程及相关专业的师生及科研人员。; 使用场景及目标:①深入学习和掌握基于UC3842的反激式开关电源的核心设计原理、电路拓扑构建与Multisim仿真方法;②透彻理解电流模式控制、变压器参数设计与匹配、隔离反馈环路补偿设计、RCD吸收网络优化以及过流保护等关键技术的实现细节与工程考量;③为实际硬件电路的研发、调试与优化提供精确的前期仿真验证、理论支撑和设计指导。; 阅读建议:建议读者结合Multisim软件进行动手实践,严格按照文中所述的结构与参数逐步搭建电路,通过示波器、探针等工具仔细观测并分析关键节点的电压与电流波形,重点关注系统在不同负载条件下的动态响应与稳定性表现,并充分利用所提供的完整仿真文件、原理说明与参考文档进行对比学习与深入探究。

Zabbix 简介、优缺点、基础原理

(8条消息) Zabbix 的基础概念、原理和架构_Lee木木的博客-优快云博客_zabbix架构类型Zabbix 的基础概念、原理和架构_Lee木木的博客-优快云博客_zabbix架构类型 --------------------------------------------------------------------------------------------------------------------------- 一、Zabbix 简介 Zabbix是由A...

weixin_50196615的博客 2035

Only fullscreen opaque activities can request orientation

manifest里 Activity 中 android:screenOrientation="portrait" 和 styles.xml 中 &lt;item name="android:windowIsTranslucent"&gt;true&lt;/item&gt;  同时设置的话 可出现崩溃 解决方案 去掉 android:windowIsTranslucent=“true” 即可...

知识改变一切 487

1991-2020年气候背景数据集

2011 年,国家气象信息中心对 1951-2010 年 2400 余个地面站气温、气压、降水、湿度、日照等 19 大要素项的定时观测资料和日极值资料中由数字化过程中引起的系统性问题(例如数字化遗漏、整段拷贝等问题)进行质量检测、质量控制和错误数据的更正,形成较高质量的地面基础资料集。1991-2020年中国地面气候值数据集提供了中国2438个站点的气温、降水、气压、风向风速、相对湿度、水汽压、云、天气现象、能见度、蒸发、积雪、地温、冻土、日照共14个要素的气候背景信息。数据时间:30年平均。

地球资源数据云的官方博客 1592

Android核心技术-day05-03-学生信息管理系统小练习

package com.gaozewen.studentsystem.db; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; imp...

知识改变一切 462

【从零搭建到实战运行】基于PX4-1.13与XTDrone的FAST-LIVO2 Gazebo仿真全流程解析

本文详细解析了从零开始搭建基于PX4-1.13飞控、XTDrone仿真框架与Gazebo的FAST-LIVO2无人机仿真平台的全流程。内容涵盖环境配置、Livox雷达插件定制、算法部署与参数调试,旨在帮助开发者快速构建完整的激光-惯性-视觉SLAM仿真环境,并解决集成过程中的常见问题。

weixin_29218509的博客 520

Ubuntu 22.04蓝牙开关秒关?别慌,可能是这个Intel固件文件在搞鬼

本文深入解析Ubuntu 22.04蓝牙开关秒关问题,指出Intel固件文件缺失是常见原因,并提供详细修复方案。通过确认硬件型号、检查固件文件及智能替代方案,帮助用户快速解决蓝牙故障,提升系统稳定性。

weixin_30247307的博客 755

Android核心技术-day02-03-获取手机内部存储空间

package com.gaozewen.storagespace; import android.os.Bundle; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.text.format.Formatter; import android.widg...

知识改变一切 358

利用LTspice设计Pt100测温电路

是一种广泛使用的温度传感器,它属于(RTD, Resistance Temperature Detector)的类型,通常用于温度测量。在0°C时,的电阻值为100欧姆,且它的电阻值会随着温度的升高而升高。PT100热电阻温度阻值对应表)因此可以根据这一特性来检测出环境温度。

2301_77033628的博客 2412

Android核心技术-day02-05-创建别的应用程序可以读写的文件

package com.gaozewen.createfile; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import java.io.FileOutputStream; public class MainActivity extends AppCompatActivity { ...

知识改变一切 335

图像分割 - 使用Mask R-CNN模型在COCO数据集上进行图像分割任务

图像分割是计算机视觉领域的一个重要任务,它旨在将图像中的每个像素分类为对象或背景。Mask R-CNN是一种基于区域的卷积神经网络,可用于图像分割任务。它是Faster R-CNN的扩展,将目标检测与图像分割结合起来,能够同时检测和分割对象。在本博客中,我们将使用Mask R-CNN模型在COCO数据集上进行图像分割任务。我们将介绍如何下载和准备COCO数据集,以及如何使用Mask R-CNN模型进行训练和推理。

斌擎科技 1187

零基础吃透!Python爬虫实战:超详细爬取小红书图文,解析封面+标题+文案全流程

本文为零基础开发者提供小红书图文爬取全流程指南,针对动态加载、严格反爬等核心痛点,从环境配置到数据解析详细讲解。主要内容包括: 核心特性分析:动态加载机制需抓包获取真实接口,严格反爬依赖Cookie验证和请求头伪装 环境准备:Python 3.8-3.10环境,使用requests/beautifulsoup4等库,通过浏览器开发者工具获取有效Cookie 实战步骤: 定位关键API接口(note/list) 配置请求头(含Cookie/User-Agent/Referer) 实现分页爬取和异常处理 解析封

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 728

Android核心技术-day04-01-网络图片查看器(安卓消息循环机制)

package com.gaozewen.netimageviewer; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import a...

知识改变一切 334

库存优化技术提升电商效率

第一部分:库存优化技术基础 第1章:库存优化的基本概念 库存优化是现代电商运营中至关重要的一个环节。简单来说,库存优化指的是通过一系列的策略和技术手段,使得库存管理更加高效、准确,从而降低运营成本,提高销售额。 1.1 库存优化的定义与重要性

AI天才研究院 1247

Android核心技术-day05-05-安卓下的多线程下载(带ProgressBar)有bug版

package com.gaozewen.multidownloader; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.EditText; import android.widget.Lin...

知识改变一切 280

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android核心技术-day01-01-click事件的多种写法

方法一: Button bt_click = findViewById(R.id.bt_click); bt_click.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { System.out.println("哈...

知识改变一切 246

深度学习工具包 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核心技术-day06-04-短信助手

package com.gaozewen.smshelper; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import a...

知识改变一切 234

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android核心技术-day04-02-网页源代码查看器(StreamUtils)

package com.gaozewen.htmlviewer.utils; import java.io.ByteArrayOutputStream; import java.io.InputStream; /** * 流的工具类 * @author gzw * @version $Rev$ * @des ${TODO} * @updateAuthor $Author$ * @u...

知识改变一切 232

Android核心技术-day06-05-Activity生命周期,应用场景

package com.gaozewen.lifecycle; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; public class MainActivity extends...

知识改变一切 227

Android核心技术-day02-06-读取别的程序中公开的文件

package com.gaozewen.hacker; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Toast; import java.io.BufferedReader; import ...

知识改变一切 227

Android核心技术-day06-01-显式意图和隐式意图

package com.gaozewen.intent; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; public cla...

知识改变一切 227
上一篇: Android核心技术-day01-02-拨打电话
下一篇: Android核心技术-day02-01-logcat
心灵泽尘
博客等级 码龄10年 32粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值