J2ME开发初探

基于J2ME的手机游戏开发 随着通信技术的发展和手机的普及,手机游戏的开发技术越来越为人们所关注。以J2ME为开发平台,利用Java提供强大工具,不但可以在手机上实现静态HTML技术所无法实现的计算处理、数据存储、与服务器的通信等功能,而且能够开发各种手机游戏。本文在介绍J2ME及其体系结构的基础上,以贪吃蛇游戏为实例,描述了借助J2ME的MIDlet类库开发手机游戏的过程。 阅读详情

摘要:本文是J2ME开发的入门性文章,从零开始介绍了进行J2ME开发首先需要了解的一些东西。阅读本文几乎不需要相关的基础知识。

1.1.        J2ME简介

J2ME是Java 2 Platform, Micro Edition的简称。它是Sun Microsystems公司在Java的品脾之下的四种平台之一,其他三种分别是J2SE, J2EE和Java Card。J2ME的目标是消费类设备和嵌入式设备市场,包括各种电子产品,比如手机、PDA、传呼机、机顶盒等等。J2ME的开发进程同样由JCP(Java Community Process)来负责。

J2ME继承了Java优秀的跨平台兼容性,这是它与其他无线开发技术相比的优势之一。它为创建小型设备上的各种应用程序提供了完整的解决方案。

1.2.        J2ME总体架构介绍

J2ME架构如下所示:

各种Profile(MIDP,Foundation profile,KJava等)

各种Configuration(CLDC/CDC)

各种Java虚拟机(KVM/CVM)

主机操作系统

其中各种Java虚拟机,Configuration以及Profile构成了J2ME程序完整的运行时环境。

由Configuration决定了相应的Java虚拟机。比如CDC Configuration决定了CVM。而Profile则是一组位于Configuration之上的API,为开发特定领域的应用提供支持。

此外,还有一些开发和部署各种应用的工具。

1.2.1.    Configuration介绍

划分Configuration的主要依据是目标设备的处理器能力和内存容量,而与其网络连接的类型和速度无关。这样做的理由之一就是,即便各种小型设备在功能和形式等方面大相径庭,但是它们通常使用相似的处理器和数量接近的内存,所以以此为依据,对它们进行横向的分组是比较合理的。

目前J2ME的两种标准Configuration是:

l         CDC(Connected Device Configuration)

l         CLDC(Connected Limited Device Configuration)

1.2.1.1.        CDC

    CDC的目标设备为间歇性的连接到网络的设备,比如机顶盒,汽车导航系统等等。相对来说,它要比CLDC的覆盖范围更广一些,其目标的处理能力也更强大一些。CDC包含功能完整的Java虚拟机,与J2SE当前使用的虚拟机类似。

以下列出了部分官方J2ME规范定义的CDC设备资源需求:(请以JCP网站上最新的相应规范为准)

l         具有32位处理器

l         具有2M以上内存供Java使用

l         连接到网络,通常是无线间歇连接,而且具有有限的带宽。

l         用户界面不是必须

l         其他的要求…….

1.2.1.2.        CLDC

    CLDC Configuration的应用更为广泛一些,它的目标设备主要包括手机,PDA,掌上电脑等等。其处理能力比CDC设备要相应的弱一些。

以下列出了部分官方J2ME规范定义的CLDC设备资源需求:(请以JCP网站上最新的相应规范为准)

l         具有160K到512K以上内存供Java使用

l         具有有限的电源(通常是用电池来供电)

l         连接到网络,通常是无线间歇连接,而且具有有限的带宽。

l         用户界面不是必须

l         其他的要求…….

 

需要注意的是,区分这两种Configuration的主要依据应该放在处理能力,内存量,是否使用电池等。而不是其网络连接的类型和速度。而且这两种规范之间的界限也越来越模糊了。

1.2.2.    虚拟机介绍

    如前所述,Configuration定义的功能决定了相应的虚拟机。所以目前有两种虚拟机:

l         KVM(Kilo Virtual Machine),对应于CLDC

l         CVM,对应于CDC

1.2.2.1.        KVM

    KVM专门为资源受限的小型设备所设计。它来源于Sun研究院的“Spotless”工程。KVM是符合JVM规范的虚拟机,除了在为满足某些特殊的需求而背离JVM规范之外。

1.2.2.2.        CVM

    CVM用于处理能力较强的消费类和嵌入式设备,它支持Java 1.3虚拟机的全部功能。

1.2.3.    Profile介绍

Profile定义了应用程序所支持的设备类型,为特定域的应用开发提供支持。J2ME目前已经包括了多种Profile,比如MIDP,PDA Profile,KJava, Foundation Profile等等。以下只介绍MIDP。

1.2.3.1.        MIDP

    MIDP即Mobile Information Device Profile,它提供了移动设备使用的API,比如手机。它定义了用户界面,网络以及持久存储等相关的类。运行于MIDP下的应用称为MIDlet。后续的示例程序就是一个MIDlet。MIDP允许把新的应用程序下载到用户设备上,比如下载一个小游戏到手机上面并运行。

1.3.        搭建简单的开发环境

本文只介绍基于Sun提供的J2ME无线开发工具包的开发活动。不包括与各种IDE的配合使

用比如JbuilderX等等。也不包括其他厂商提供的开发包的介绍,比如Nokia S40系列的开发包。您有兴趣的话,可以参考其他资料自行学习。

1.3.1.    下载JDK和J2ME无线开发工具包(WTK)

这些都可以到Sun的官方网站免费得到,安装也很方便。本文基于JDK1.4.2和WTK1.0.4。您可以下载更高版本的开发工具。

本文的安装路径为:

C:/jdk142以及C:/wtk104,您可以根据自己的情况合理更改。

1.3.2.    设置环境变量

在Windows 2000和XP上面,通常可以这样设置:右击我的电脑—>属性—>高级—>环境变量—>系统变量,然后添加JDK和WTK的路径即可,也就是将C:/jdk142/bin以及C:/wtk104/bin添加到PATH变量的后面即可。

验证以下是否设定正确,可以在命令行输入WTK包含的preverify命令。如果系统提示找不到命令,则说明没有设定好,反之则已经设定好了。

此外,设置如下的环境变量,可以方便在命令行上编译和运行J2ME程序。

变量J2MEWTK_HOME 设定为:C:/wtk104

变量MIDPAPI 设定为: %J2MEWTK_HOME%/lib/midpapi.zip

变量J2MECLASSPATH 设定为:

%J2MEWTK_HOME%/wtklib/kenv.zip;%J2MEWTK_HOME%/wtklib/kevm.jar;%J2MEWTK_HOME%/wtklib/lime.jar

在Windows 2000和XP上可以参考上诉方法,添加相应的变量即可。

1.4.        一个简单的Midlet示例

从伟大的“K&R”开始,“Hello World”几乎成了入门必修课。呵呵,我们也顺其自然吧。本文先列出代码,并适当的讲解以下,然后讲述如何编译和运行它,然后讲述一些其他的知识。

代码如下:

//HelloWorld.java

 

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

 

public class HelloWorld extends MIDlet {

   

    //MIDlet 的显示

    private Display display;

   

    //用于显示"Hello World"字样

    private TextBox box = null;

   

    //Constructor

    public HelloWorld()

    {

        box = new TextBox("Hello World", "Hello World", 20, 0);

    }

   

    //MIDlet应用程序生命周期管理方法之一,负责激活MIDlet

    public void startApp()

    {

        display = Display.getDisplay(this);

        display.setCurrent(box);

    }

   

    //MIDlet应用程序生命周期管理方法之一,负责暂停MIDlet,本例无需如此

    public void pauseApp()

    {

    }

 

    //MIDlet应用程序生命周期管理方法之一,负责释放资源

    public void destroyApp(boolean unconditional)

    {

        box = null;

    }

}

下面对代码进行分析。

该类继承了javax.microedition.midlet.MIDlet类。该类是J2ME中所有MIDlet的父类。

Display类来自javax.microedition.lcdui.Display。代表了MIDP设备的显示器。可以通过Display类的静态方法getDisplay()获得显示器,并通过静态方法setCurrent()使得HelloWorld MIDlet可以在设备上显示“Hello World”字样。

TextBox是字符串“Hello World”的载体,它在构造函数中被实例化。

startApp(),pauseApp()和destroyApp(boolean unconditional)是应用程序管理系统(Application Management System)用来管理MIDlet的执行的,称它们为应用程序生命周期管理方法。开发过Applet的读者,可以与Applet的start(),stop()和destroy()相类比。应用程序的有三种可能的状态:运行状态,暂停状态和销毁状态。这些状态和方法之间的转换关系如下:

l         public void startApp() :MIDlet从暂停向运行状态转变时,需要调用这个方法,通常会初始化运行MIDlet的所需的所有对象,并设置当前的显示器。需要注意的是,该方法可以多次被调用,所以对于那些仅需一次初始化的程序,不要放入这个方法里,而是放到MIDlet的构造函数里。

l         public void pauseApp() :MIDlet从运行转向暂停时,需要调用这个方法。一般会执行暂停当前运行的所有线程等活动。

l         public void destroyApp(boolean unconditional) :当应用程序不再需要,而要进入销毁状态时,需要调用这个方法。它将释放应用程序的全部资源。既可以从暂停状态转到销毁状态,也可以从运行状态转到销毁状态。

1.4.1.    编译

    为了方便起见,将本程序源文件置于C:/. 。先在这个目录下建立一个tmpclassess目录,以备后用。

       使用命令行,输入以下命令编译程序:

javac -d tmpclasses -bootclasspath %MIDPAPI% -classpath %J2MECLASSPATH% HelloWorld.java

       该命令编译上诉程序,并在tmpclasses目录下创建HelloWorld.class文件。-bootclasspath 和-classpath的作用是设置正确的启动路径和类路径,从而只使用J2ME的类。

1.4.2.    预验证

在J2SE环境下,只需类文件即可运行Java程序,但是在J2ME环境下,还需要有预验证这一

因为出于安全的考虑,任何进入运行时的class文件,都要经过Byte Code验证器(Byte Code Verifier)的验证,以保证程序代码安全有效。比如:不会溢出堆栈,不包含恶意代码,经过了合理的初始化等等。只有通过了审核的代码,才会被JVM执行。这对于普通应用程序的执行环境来说,是可以接受的硬件要求。但是对于像CLDC这样的设备来说,它们的资源太受限了。如果期望在运行时执行同J2SE VM一样的验证程序,是不现实的。因此,我们需要把大部分的验证工作交给开发MIDlet程序的机器来完成,而MIDlet的目标设备只需执行很少的验证工作即可。这就导致了预验证步骤的出现。

       在预验证的过程中,会在class文件中加入一些特殊的符号,用于简化目标设备的验证工作。

       预验证之前,可以创建一个classes目录,用于保存验证通过的class文件。具体的命令如下:

preverify -classpath %MIDPAPI%;tmpclass -d classes tmpclasses

1.4.3.    创建jar文件

首先进入classes目录,然后执行:

jar cvf HelloWorld.jar HelloWorld.class

       这会把程序包含的所有类和资源压缩到JAR文件,并为其创建打包清单。

1.4.4.    创建jad文件

JAD(Java Application Descriptor)文件,用于描述该JAR文件包括的程序的一些属性,比如

大小等等。在实际部署时,该文件会先被下载到目标设备上,由目标设备的应用程序管理系统(Application Management System)来处理并决定是否下载真正的JAR文件。

    本例的JAD文件如下,HelloWorld.jad:

MIDlet-1: Hello,,HelloWorld

MIDlet-Name: HelloWorld

MIDlet-Version: 1.0

MIDlet-Verdor: ORA

MIDlet-Jar-URL: HelloWorld.jar

MIDlet-Jar-Size: 860

这个文件内容很清晰,包括名称,版本,JAR文件地址和大小等信息。关于JAD文件的具体语法,本文不作具体的介绍,您可以参考相关资源。

1.4.5.    在仿真器中运行

    首先,需要把JAD和JAR文件置于同一个目录下,比如classes。

    然后运行如下命令即可:

emulator -Xdescriptor:HelloWorld.jad

 

1.5.        开发技巧,性能注意事项

使用局部变量。使用局部变量会比使用类成员要快。

使用StringBuffer而不是字符串串联。字符串串联会引起大量对象的创建和回收,降低了性能。

使用尽量少的方法调用。由于JVM使用堆栈来加载和存储方法调用,所以应尽量少用方法调用,降低开销。

尽量重用对象。对象的创建和回收都会带来开销,所以应该精心设计,尽量重用现有的对象。比如在方法内传递对象的引用,然后修改对象的值。

使用线程,避免同步。对于运行时间较长的操作,需要一个独立的线程来执行,避免同步可提高性能。

对PNG图片进行优化处理。

使用“混淆器”。除了可以防止class文件被反编译之外,也可以在一定程度上减少class文件的尺寸。

1.6.        总结

正如本文的摘要所述,这是一篇入门的文章。为此,文章舍弃了许多内容。笔者认为那些内容更适合出现在其他主题的文章中。呵呵,希望这篇文章能给您带来一些收获,帮助您顺利的搭上J2ME开发的快车。

欢迎指正,欢迎讨论!

欢迎转载,请注明出处!保留相关权力。

J2ME程序开发基础详解与示例代码 J2ME是Java平台的一个子集,专门用于开发嵌入式设备和移动设备上的应用程序。J2ME(Java 2 Platform, Micro Edition)是一种用于开发移动设备上的Java应用程序的平台。本文对J2ME程序开发的基础知识进行了详细讲解,并提供了一个简单的计算器应用程序示例。以上示例演示了一个简单的计算器应用程序,用户可以输入两个数字并点击计算按钮,应用程序将计算结果显示在界面上。下面是一个简单的J2ME程序示例,演示了如何创建一个简单的计算器应用程序。三、J2ME程序开发步骤。 阅读详情

相关推荐

JAVA基于J2ME的手机游戏开发(论文+源代码)

现在JAVA-JAVA2 Platform大致可分为J2SE、J2EE、J2ME三类。J2SE为JAVA-JAVA2 Platform 的标准版,通常在PC上使用的JAVA。J2EE是在J2SE的API上,扩展了给企业使用EJB与Servlet等主要使用在服务器上的功能。而J2ME则是面向家电和通信工具等微小设备。

2301_76992670的博客 755

J2ME开发入门(老java游戏)

一.文件下载 链接:https://pan.baidu.com/s/1JLTE8UagTVYNVNanQmhysA 提取码:iarr 1.WTK2.5.2,32位的 2.eclipse,老版本的,新版不知道什么问题,不能新建J2ME项目 3.eclipseme,J2ME插件 4.jdk1.8,32位,因为WTK只有32位 二.安装 1.jdk直接安装就行 2.WTK也能直接安装 3.eclipse直接解压出来就能运行 4.eclipseme 点击help - install new software 点

u011727804的博客 4700

机器学习-深嵌交叉验证(Nested Cross-Validation)

Section I: Code and Analyses 第一部分:代码 from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from...

Santorinisu Blogs 2714

J2ME开发的一般步骤

最近一段时间发现身边有一本买了一年多的J2ME的书没看,于是抱起来大概看了一下,我的E72是Symbian系统,支持J2ME,所以做了几个简单的小玩意。在学习J2ME开发的过程中有一些简单的心得和体会,现在写下来备忘,如果有朋友也正在学习J2ME开发,觉得有帮助的话,那是最好不过的事情了。   1.开发环境安装配置 目前开发J2ME应用的环境有多种,有基于NetBean的,不过仍以Ecl...

weixin_33850890的博客 370

电涡流位移测量技术深度解密

电涡流位移传感器凭借非接触测量、高精度(可达纳米级)、强环境适应性(耐高温高压油污)等优势,成为工业精密位移检测的核心技术。其工作原理基于电磁感应:高频磁场在金属靶面感应涡流,通过检测线圈阻抗变化转化为位移信号。应用需注意靶材依赖性(需按实际材料标定)、安装精度及抗干扰措施。广泛应用于磁悬浮轴承、航空发动机、精密制造等领域,实现对微米级位移的可靠监测。

技术工作者 1752

量子城域网建设设备系列(三):网络管理系统(NMS)

本文对量子网络中的网络管理系统进行了初步的介绍。

量子领域相关话题 2012

J2ME MIDlet开发人员的第一个BlackBerry应用

对于任何开发来说,一个helloworld的介绍是必不可少的。对于移动应用开发来说,J2ME也是一种被广泛接受的平台技术,首先,我们用一个BlackBerry上的J2ME开发的HelloWorld为例,来开始我们的BlackBerry的应用开发之旅                                     J2ME MIDlet开发人员的第一个BlackBerry应用1.  

salvatore_zhang的黑莓开发专栏 3190

从零开始安装 Windows 11 和 Ubuntu 22.04 双系统

本文详解Windows与Ubuntu 22.04双系统安装流程:需提前确认BIOS模式(UEFI/GPT或Legacy/MBR),关闭BitLocker加密、设备加密及快速启动;推荐Rufus/Ventoy制作启动盘。安装时需规划分区方案(建议单独划分EFI系统分区),注意引导器安装位置选择。双系统启动通过BIOS引导顺序管理,安装后需同步Windows与Linux系统时间。教程适配主流UEFI+GPT设备,强调操作前数据备份及Windows更新策略调整,避免兼容性问题。

萑澈的博客 3765

J2ME HelloWorld

 HTML Tags and JavaScript tutorialvar encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);

249

手把手教你用UC3844设计多路输出反激电源(附PCB布局避坑指南)

本文详细介绍了使用UC3844设计多路输出反激电源的实战技巧,包括核心电路设计、变压器参数计算、PCB布局优化及EMI抑制方法。通过实验室实测数据和项目经验,帮助工程师避开常见设计陷阱,提升电源性能和可靠性。特别附赠PCB布局避坑指南,助力高效完成开关电源设计。

weixin_30300225的博客 568

人工智能训练师(三级)操作技能考核·自测卷

为您定制了一份。这份试卷严格拆分了“业务分析”、“智能训练”、“智能系统设计”、“培训与指导”四大模块,所有填空题均来源于上一轮整理的。您可以先用它进行“第二步(抛开答案自己填)”,填完后对照末尾的答案速查进行“第一步(补全并运行)”的校验,最后标记错题进行“第三步(针对性重复练习)”。

suny8088的博客 102

J2ME初试 -- HelloWorld

运行环境需要安装 J2SE(Java 2 Platform Standard Edition) 和 J2ME Wireless Toolkit.运行 KToolbar 工具.新建立一个Project. 设置好project name 和 启动类的name. 然后确定.在工程目录下首先建立一个与启动类名称相同的JAVA文件. 例如: HelloWorldMIDlet.javaimpo

Mike的专栏 1082

RT-DETR目标检测模型性能评价指标详解,涉及混淆矩阵、F1-Score、IoU、mAP、参数量、计算量等,一文打尽所有评价指标

本文主要讲解的是计算机视觉网络模型的性能评价指标,这是每一篇论文中都需要展示的内容。熟悉每一个评价指标也能够帮助我们在训练和改进模型过程中,更好的观察模型的变化效果。

Limiiiing的博客 3357

Eclipse开发J2ME程序之Hello World

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 467

Python爬虫实战:利用Requests-HTML与异步技术高效爬取B站视频信息及弹幕数据分析

B站的弹幕,远非简单的评论功能,它是一种独特的、实时互动的社交方式,是观众情感的集体宣泄和共鸣。无论是用于内容创作者优化视频结构,还是用于社会学、传播学的研究,亦或是简单的个人兴趣分析,都具备极高的价值。stop_words = {'的', '了', '是', '我', '你', '他', '她', '它', '在', '有', '不', '吗', '吧', '啊', '这', '那'}本文不仅是代码的堆砌,更注重原理的剖析、反爬策略的应对以及工程化的思考,旨在为读者提供一份紧跟技术前沿的实战指南。

2201_76125261的博客 389

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

j2me之hello world

没想到居然我会去写j2me的程序,呵呵。没办法,E2只支持java的软件安装,moto的dev上面都是java的sdk,只能将就一下了。 装了eclipse的插件eclipseme,这样就可以用了。不知道为什么还有pending changes,不过能用,也就没有深究。 总的来说,用java写gui还是相对比较方便的。虽然没有拖拽功能的IDE,但是代码看起来还是比较清晰的。问题主要出在了d...

marvel的专栏 179

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

J2ME学习笔记(二)——建立一个J2ME工程

  搭建完环境后,就来建立我的第一个J2ME project吧。(1)       建立project     打开Eclipse,选择File->New->Project,在弹出的对话框中选择J2ME->J2ME Midlet Suite,如下:(2)为Project新建Java文件     选择File->New->other,在弹出的对话框中选择J2ME->J

Mars_911的天空 1248

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

第一篇J2ME的文章--入门

这几天不忙了,所以就去看了看j2me的开发和介绍(因为很早就听说java很牛,不知道是真的还是假的),经过一番下载,安装,配置,...;第一个j2me的小程序终于显示在模拟器上了(真有点激动),现将过程写下:1.下载工具选择你喜欢的IDE, 就像在Symbian C++里面一样,有好几种IDE可以使用; J2ME也是一样;你可以使用Eclipse, JBuilder,NetBeans.我使

Jrive的专栏 1575

j2me开发环境搭建

学习j2me的开发也有半年了,很多东西需要记住并不断实践。 j2me的环境搭建过程。 要准备的东东:1. JDK;2. 开发工具Eclipse;3. eclipseMe;4. WTK;   一、下载jdk,并安装,安装好后配置环境变量,假设现在jdk的安装目录是E:/Program Files/Java/jdk1.6.0_10,那么按如下配置环境变量:

mmvc2010的专栏 4832

今天来上传个不错的J2ME学习教程

  最近开始学习J2ME了,感觉比起J2SE好像容易点。。也许是才开始学,没有遇到难的呢吧~ 不过还是很好玩~ 看着自己会的越来越多,能做出更多的东西出来,心里就好开心啊!~ 可是J2ME让我最烦恼的地方是API是英文的,可是我英语不太好,没有办法,丢了好几年了(其实就是单词不认识),幸好有金山词霸。。哈哈~ 昨天在网上找到了一个J2ME的学习教程(中文滴),觉得很不错!所以发上来给大家一起分享。...

小丫头的日志簿 139

使用NetBeans进行J2ME开发(一):别让程序员的手机闲着

使用NetBeans进行J2ME开发(一):别让程序员的手机闲着我们是程序员,我们没有各种各样的应酬,电脑和网络就是我们的整个世界。上班之余,我们该如何自娱自乐呢?想一想我们每天别在裤腰带上的手机,再想一想我们已经非常熟悉Java,那么,我们为什么不写几个J2ME的手机程序玩玩呢?  首先,我们需要搭建一个开发环境。Eclipse和NetBeans都是好选择。我这里选择的是NetBea

小李专栏 1606

J2ME WTK 的命令行使用方法

 终于需要好好学习J2ME的使用了, 刚学Java时编译运行程序都是在命令行下进行, 所以这次我也打算从命令行下开始. 恰好找的一本书《J2ME in a nutshell》中第一个实例是命令的, 于是开始下载新版本的J2ME开发工具, 准本从此大干一场. 问题就处在这新版本上了, 下载完后和书中介绍的情景一比较, 大有"物是人非"的感觉. 怎么KVM不见了啊! 这程序可怎么跑? 而且书上clas

飞光流影 1266
上一篇: Symbian开发入门
Simore
博客等级 码龄25年 10粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值