在无线J2ME设备上实现HTTP协议

编写一个期货跨期套利的程序,谈谈思路及案例 🏆本文收录于《优快云问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 阅读详情
随着越来越多手提电话和个人数字助理开始融入到信息高速公路之上,从移动设备上访问Web站点变得越来越重要。Java开创了消费设备中小型的储存容量的先河,它是用于开发手机、传呼机及其他微型设备应用程序的理想语言。
  在本文中,我们将学习如何从一个J2ME客户机上向服务器发送一条HTTP GET请求和一条HTTP POST请求。虽然这只是一篇探讨性质的文章,但是我还是假定读者已经熟悉Java,J2ME,以及Java Midlets(MIDP应用程序)的运作机制。我们将使用J2ME的MIDP简表,并利用SUN的J2ME的无线应用程序开发工具包编译、配置和测试我们的应用程序。对于HTTP服务器,任何WWW地址都可以被访问,但是默认时我们将使用一个简单的Java Servlet来返回我们的HTTP请求的细节。

  如何使用J2ME客户机向Web服务器和类似的支持HTTP的服务器发送HTTP请求呢?答案就是使用可在javax.microedition.io程序包中可找到的J2ME的网络类。本文就想具体阐述这个问题。

  本文概述∶
  使用J2ME设计无线网络应用程序
  .发送一条超文本GET请求
  .发送一条超文本POST请求
  .使用J2ME进行无线网络编程

  Java的网络编程能力是相当健壮的。Java 2标准版( J2SE)在java.io和java.net程序包中定义了100多个接口程序,类和异常。通过这些库实现的功能是很强大的,但是这只适用于传统的计算 机系统,这些计算机系统有强大的CPU处理能力,快速的内存和持久的数据储存,但是这些在大多数的无线设备上是不现实的。因此,J2ME定义了这些函数的 子集,并提供了一套用于网络和文件访问的固定的程序包--- javax.microedition.io程序包。由于可移动设备种类繁多,这个程序包仅仅定义了一套接口,而为每个可移动设备供应厂商留下了实际的应 用程序接口实现。这就在可移植性和设备特定特征的应用中找到了一个最佳的平衡点。

  定义在javax.microedition.io类中的抽象网络和文件输入输出框架称为通用连接框架(Generic Connection Framework,简称GCF)。GCF定义了一套有关抽象化的内容来描述不同的通信方法。最高级的抽象被称作连接(Connection),还声明了 六个接口(四个是直接的,两个是间接的)。这七个接口就构成了J2ME的CLDC的一部分,CLDC是大多数的能使用Java的无线设备使用的配置。设计 这个配置的目的就是为所有的CLDC设备(手提电话,双向传呼机,低档的PDA等等)提供公用的网络和文件输入输出能力。虽然GCF的目的是公用网络和文 件输入输出框架,但是生产商并不要求实现GCF中声明的所有的接口。有的厂家可以决定只支持socket连接,而其它的厂家可以选择只支持基于数据报的通 信。为了促进跨越类似装置的可移植性,MIDP规范要求所有的MIDP设备实现HttpConnection接口。HttpConnection不是 GCF的一部分,但是它是从GCF的一个接口ContentConnection衍生出来的。我们将使用HttpConnection接口构造我们样本应 用程序。

发送一个HTTP GET请求

  这一节将重点解释程序代码,在下一节中我们将只讲述被用来发送HTTP请求并检索由服务器返回的响应通用连接框架接口和HttpConnection接口。创建MIDP用户界面的程序代码见附录。

  我们先要定义一个方法来放用于发送HTTP GET请求的代码。因为这个方法中的有些操作有潜在的抛出IOException的可能,所以我们将把这样的意外(exception)抛给调用方法。

public String sendHttpGet( String url ) throws IOException {;
HttpConnection hcon 
= null;
DataInputStream dis 
= null;
StringBuffer message 
= "";
try {;


  第一步是使用Connector类打开一个到服务器的连接,这是GCF的关键。我们将把这个连接强制转换为需要的类型,在本例中为HttpConnection类型。

hcon = ( HttpConnection ) Connector.open( url );


  接下来,我们得到HttpConnection上的一个DataInputStream,允许我们一个字符一个字符的读取服务器的响应数据。

dis = new DataInputStream( hcon.openInputStream() );


  使用DataInputStream的read ()方法,服务器响应的每个字符都被集中起来放入StringBuffer对象。

int ch;
while ( ( ch = dis.read() ) != -1 ) {;
message 
= message.append( ( char ) ch );
}
;


  最后,连接对象被净空以保存资源,而信息从这个方法中返回。

}; finally {;
if ( hcon != null ) hcon.close();
if ( dis != null ) dis.close();
}
;//结束try/finally代码段
return message.toString();
};
//结束 sendGetRequest( String )


  如何发送一个HTTP POST请求

  你可以想象,发送一个HTTP POST请求的处理过程其实与发送一个GET请求非常地类似。我们将修改一个现有命令,添加少量的新的命令,并添加一个来自通用连接框架的附加的对象和一 个附加的StringBuffer对象把POST请求体重的内容发送到服务器中。剩下的命令将保持不变。

  复制我们刚才创建的sendHttpGet()方法,把它粘贴进同一个类文件,改名为sendHttpPost()。现在,我们将修改这个新方法来发 送一个HTTP POST请求到服务器。 在方法的顶部添加两个新的变量说明。声明一个类型为DataOutputStream的变量和另一个String类型的变量。我们将使用 DataOutputStream对象把存在于字符串变量中的POST请求体发送到服务器中。

DataOutputStream dos = null;
String requestBody 
= null;

  修改connector.open()命令包含另一个参数,指出连接将允许客户端可以通过连接在服务器上读和写。

hcon 
= ( HttpConnection ) Connector.open( url, Connector.READ_WRITE );

  设置HttpConnection对象使用的请求方法为POST(默认的方法是GET)。

hcon.setRequestMethod( HttpConnection.POST );

  得到一个用于现有的HTTP连接的DataOutputStream对象。

dos 
= hc.openDataOutputStream();

  声明一个字节数组并通过检索一个来自requestBody字符串的字节数组初始化。 然后把DataOutputStream的缓冲写入字节数组内。

byte[] byteRequest = requestBody.getBytes();
for( int i = 0; i < byteRequest.length; i++ ) {;
dos.writeByte(byteRequest);
}
;//结束for( int i = 0; i < byteRequest.length; i++ )

dos.flush(); 
//包含本句,在某些设被上将可能会产生不可预期的结果

  调用flush ()方法的意图是发送已经写入的数据到DataOutputStream的服务器的缓冲区中。在某些电话上,这个操作工作正常,在其他的电话上,它导致 HTTP请求的Transfer 
- Encoding被设置为" chunked ",有一些随机字符被放到请求本身的前面和后面。那又怎样处理这个问题呢?这个方法调用实际上是根本不需要的。在接下来的一行中,服务器连接打开(通过 openInputStream ()),将自动输入缓冲区。因此,你最好不要调用缓冲区的flush()方法。这个方法其余的部分保持不变,除了DataOutputStream对象必须在finally{;};语句块中关闭。

}; 
finally {;
if ( hc != null ) hc.close();

if ( dis != null ) dis.close();

if ( dos != null ) dis.close();
}
;//结束 try/finally



  这就是所有的程序代码!并请参见本文后附带的程序代码。

  随着可以使用国际互联网络和支持网络的无线设备日益的增多普及,Java和J2ME的重要性也在不断的变大。因为HTTP协议是当前仅有的,被所有的遵从MIDP规范的设备支持的网络协议,它也是用于开发无线网络应用程序的最好的候选者。

  在本文中,我们探究了无线网络编程的基本结构和几个核心问题,我们看了如何调用两个最常用的HTTP请求方法:GET和POST。J2ME仍然在它的 发展初期,并且无线设备也即将得到大面积的普及。所以,所有有志投身于无线网络编程中的开发者们将得到大展拳脚的好机会。

  附录:

/*
* HttpMidlet.java
*/

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;

public class HttpMidlet extends MIDlet implements CommandListener {;
//使用默认的URL。用户可以从图形用户接口改变这个值
private static String defaultURL = "http://localhost:8080/test/servlet/EchoServlet";;

// 主MIDP 显示
private Display myDisplay = null;

// 输入URL的图形用户接口组件
private form requestScreen;
private TextField requestField;

// 用于提交请求的图形用户接口组件
private List list;
private String[] menuItems;

// 用于显示服务器响应的图形用户接口组件
private form resultScreen;
private StringItem resultField;

//用于requestScreen的"send"按钮
Command sendCommand;
// 用于requestScreen的"exit"按钮
Command exitCommand;
// 用于requestScreen的"back"按钮
Command backCommand;

public HttpMidlet(){;
// 初始化图形用户接口组件
myDisplay = Display.getDisplay( this );
sendCommand 
= new Command( "SEND", Command.OK, 1 );
exitCommand 
= new Command( "EXIT", Command.OK, 1 );
backCommand 
= new Command( "BACK", Command.OK, 1 );

//显示请求的URL
requestScreen = new form( "Type in a URL:" );
requestField 
= new TextField( null, defaultURL, 100, TextField.URL );
requestScreen.append( requestField );
requestScreen.addCommand( sendCommand );
requestScreen.addCommand( exitCommand );
requestScreen.setCommandListener( 
this );

// 选择想要的HTTP请求方法
menuItems = new String[] {;"GET Request", "POST Request"};;
list 
= new List( "Select an HTTP method:", List.IMPLICIT, menuItems, null );
list.setCommandListener( 
this );

// 先是从服务器上收到的信息
resultScreen = new form( "Server Response:" );
resultScreen.addCommand( backCommand );
resultScreen.setCommandListener( 
this );

}
;//结束HttpMidlet()

public void startApp() {;
myDisplay.setCurrent( requestScreen );
}
;//结束 startApp()

public void commandAction( Command com, Displayable disp ) {;
// 当用户点击"send"按钮
if ( com == sendCommand ) {;
myDisplay.setCurrent( list );
}
; else if ( com == backCommand ) {;
requestField.setString( defaultURL );
myDisplay.setCurrent( requestScreen );
}
; else if ( com == exitCommand ) {;
destroyApp( 
true );
notifyDestroyed();
}
;//结束 if ( com == sendCommand )

if ( disp == list && com == List.SELECT_COMMAND ) {;

String result;

if ( list.getSelectedIndex() == 0 ) // 发送一个 GET 请求到服务器
result = sendHttpGet( requestField.getString() );
else // 发送一个 POST 请求到服务器
result = sendHttpPost( requestField.getString() );

resultField 
= new StringItem( null, result );
resultScreen.append( resultField );
myDisplay.setCurrent( resultScreen );
}
;//结束if ( dis == list && com == List.SELECT_COMMAND )
}
;//结束 commandAction( Command, Displayable )

private String sendHttpGet( String url )
{;
HttpConnection hcon 
= null;
DataInputStream dis 
= null;
StringBuffer responseMessage 
= new StringBuffer();

try {;
//使用READ权限的标准的 HttpConnection
hcon = ( HttpConnection )Connector.open( url );

//从HttpConnection取得一个 DataInputStream
dis = new DataInputStream( hcon.openInputStream() );

// 从服务器上取回响应
int ch;
while ( ( ch = dis.read() ) != -1 ) {;
responseMessage.append( (
char) ch );
}
;//结束while ( ( ch = dis.read() ) != -1 )
}
;
catch( Exception e )
{;
e.printStackTrace();
responseMessage.append( 
"ERROR" );
}
; finally {;
try {;
if ( hcon != null ) hcon.close();
if ( dis != null ) dis.close();
}
; catch ( IOException ioe ) {;
ioe.printStackTrace();
}
;//结束try/catch
}
;//结束try/catch/finally
return responseMessage.toString();
}
;//结束sendHttpGet( String )

private String sendHttpPost( String url )
{;
HttpConnection hcon 
= null;
DataInputStream dis 
= null;
DataOutputStream dos 
= null;
StringBuffer responseMessage 
= new StringBuffer();
// 请求体
String requeststring = "This is a POST.";

try {;
// 使用读写权限的 HttpConnection
hcon = ( HttpConnection )Connector.open( url, Connector.READ_WRITE );

//设置请求方法为POST
hcon.setRequestMethod( HttpConnection.POST );

// 取得发送请求字符串的DataOutputStream
dos = hcon.openDataOutputStream();
byte[] request_body = requeststring.getBytes();

// 发送请求字符串到服务器
for( int i = 0; i < request_body.length; i++ ) {;
dos.writeByte( request_body );
}
;//结束 for( int i = 0; i < request_body.length; i++ )

// 取得做为接收服务器响应的DataInputStream
dis = new DataInputStream( hcon.openInputStream() );

// 从服务器上取回响应
int ch;
while( ( ch = dis.read() ) != -1 ) {;
responseMessage.append( (
char)ch );
}
;//结束while( ( ch = dis.read() ) != -1 ) {;
}
;
catch( Exception e )
{;
e.printStackTrace();
responseMessage.append( 
"ERROR" );
}
;
finally {;
// 释放输入输出流和HTTP连接
try {;
if( hcon != null ) hcon.close();
if( dis != null ) dis.close();
if( dos != null ) dos.close();
}
; catch ( IOException ioe ) {;
ioe.printStackTrace();
}
;//结束try/catch
}
;//结束try/catch/finally
return responseMessage.toString();
}
;//结束sendHttpPost( String )

public void pauseApp() {;
}
;//结束pauseApp()

public void destroyApp( boolean unconditional ) {;
myDisplay 
= null;
requestScreen 
= null;
requestField 
= null;
resultScreen 
= null;
resultField 
= null;
}
;//结束 destroyApp( boolean )
}
;//结束HttpMidlet
TC3XX - MCAL知识点(四十二):AURIX™ TC3xx实现多相电机需要多核配合使用的场景与实操分析 本文探讨了多相电机控制系统中的关键技术问题,重点分析了多核处理器在电机控制中的应用。针对十二相电机等复杂应用场景,提出了同步采样、多核协同等解决方案。文章详细阐述了相电流同步采样原理及EBTresos配置方法,分析了ADC硬件触发机制和多核配合策略。通过Core0和Core1的协同工作设计,解决了位置信息采集与FOC算法执行的时序问题,并提供了代码实现示例。实验验证了采用ATOM0_7同时触发两个核ADC中断的可行性,为多相电机控制系统的实现提供了技术参考。 阅读详情

相关推荐

2026开源API网关横评:微服务与AI流量治理如何选型

API网关作为微服务架构的流量入口,承担着路由转发、安全管控、限流熔断等核心职责,是分布式系统治理的基础设施。随着大模型应用的普及,AI流量对网关提出了新的要求,如流式响应支持、Token级限流、多模型路由和成本分账等能力。传统网关通过插件拼凑AI功能,而AI原生网关则将这些能力内建。面对众多开源方案,如何根据业务场景做出合理选型?本文对Kong、APISIX、Higress、Envoy Gateway、MAI Gateway等主流开源API网关进行横向评测,从性能、动态性、K8s集成度、AI流量治理等维度

weixin_34242819的博客 482

J2ME写的简单Http服务器,同时是简…

//====================================================================================== //           File 2: SocketHeader.java    // //      A http server/proxy working in port 8088, No right reser

zxg519的专栏 578

基于PaddleX的垃圾分类识别

基于PaddleX的智能垃圾分类识别项目,使用百度开源的PaddlePaddle深度学习框架,结合PaddleX开发套件,实现对垃圾分类的识别检测

Mefishes的博客 8119

J2ME写的简单Http服务器,同时是简单Http Proxy(2)_拔剑-浆糊的传说_新浪博客

//====================================================================================== // File 2: SocketHeader.java // // A http server/proxy working in port 8088, No right r...

拔剑—浆糊的传说 108

【鸿蒙南向开发】OpenHarmony音频驱动audio适配方案

这份鸿蒙(HarmonyOS NEXT)文档包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

HarmonyOS_666的博客 4513

MeloTTS 生成 RKNN 模型

摘要: 本方案基于RK3588平台,利用RKNN工具链实现高效语音合成(TTS)。采用MeloTTS开源模型,支持中英文混合语音生成。部署流程包括:1) 导出ONNX模型;2) 转换为RKNN格式;3) 在RK3588开发板运行。关键步骤包含环境配置(RKNN Toolkit2≥1.4.0)、模型转换(非量化处理)及音频处理实现。方案充分发挥RK3588的NPU加速能力,适用于边缘设备语音合成场景

J。 348

在无线J2ME设备上实现http传输

随着越来越多手提电话和个人数字助理开始融入到信息高速公路之上,从移动设备上访问Web站点变得越来越重要。Java开创了消费设备中小型的储存容量的先河,它是用于开发手机、传呼机及其他微型设备应用程序的理想语言。  在本文中,我们将学习如何从一个J2ME客户机上向服务器发送一条HTTP GET请求和一条HTTP POST请求。虽然这只是一篇探讨性质的文章,但是我还是假定读者已经

冷枫@优快云 3668

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

算法大师! 288

在无线J2ME设备上实现超文本传输协议

      随着越来越多手提电话和个人数字助理开始融入到信息高速公路之上,从移动设备上访问Web站点变得越来越重要。Java开创了消费设备中小型的储存容量的先河,它是用于开发手机、传呼机及其他微型设备应用程序的理想语言。  在本文中,我们将学习如何从一个J2ME客户机上向服务器发送一条HTTP GET请求和一条HTTP POST请求。虽然这只是一篇探讨性质的文章,但是我还是

冷枫@优快云 2038

Python从0到100(二):Python语言介绍及第一个Pyhon程序

Python从0到100(二):Python语言介绍及第一个Pyhon程序。与C和Java比,Python的学习成本和难度曲线不是低一点,更适合新手入门,自底向上的技术攀爬路线。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 5440

nvidia系列教程-AGX-Orin基础环境搭建

NVIDIA Jetson AGX Orin 是一款功能强大的嵌入式AI平台,专为需要高性能和低功耗的边缘计算应用设计。无论是自动驾驶、机器人,还是智能监控系统,Jetson AGX Orin 都能为这些应用提供强大的计算能力。本篇博客将为大家详细介绍如何在AGX Orin(32GB)上搭建基础开发环境,包括系统安装、CUDA和cuDNN的配置等,帮助你快速上手这个强大的平台。架构: 搭载 56 个 Tensor Core 的 1792 核 NVIDIA Ampere c GPUCUDA Cores。

flypig has a dream! 2797

J2ME的现状与发展

SUN中国工程研究院 软件技术中心 王刚摘要本文简要介绍了J2ME的有关概念和现状、MIDP2.0的最新特点,并对J2ME的竞争对手、J2ME应用程序的兼容性以及其在Web Services中的应用做了阐述和分析。什么是J2ME?当JAVA平台发展到JAVA 2的版本以后,为了适应不同级别计算机硬件的开发需要,JAVA平台形成了三个主要分支:Java 2, Standard E

优快云_document的专栏 3347

基于R-CNN深度学习的生活垃圾检测与分类系统:数据集、模型和UI界面的完整实现

我们将使用一个公开的垃圾分类数据集来训练我们的模型。一个常见的数据集是TACO数据集(Trash Annotations in Context),该数据集包含多种垃圾类别,适用于垃圾分类任务。TACO数据集中的图像标注了垃圾的类别以及其在图像中的位置,适合用于目标检测任务。图片数据:每张图片中包含不同种类的垃圾。标签文件:每个图像有相应的标签文件,标注了图像中垃圾的类别、位置(通常为边界框坐标)等信息。dataset/images/image1.jpgimage2.jpg......其中,

YOLO 1102

J2ME WEB服务入门教程

作者:C. Enriq  文章来源:SUN中国技术社区 J2ME Web 服务 API( Web Services API,WSA)是作为 JSR 172 在 Java Community Process 中开发的,它拓展了 J2ME, 从而支持 Web 服务。API 的两个可选软件包对两个功能区域进行标准化,这两个功能区域对于 Web 服务的客户机来说是至关重要的:远程服务调用和 XML 解析。

mobilechannel的专栏 1503

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深度学习工具包 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的基本概念 了解CLDC特性 对手机开发有整体上的认识 1.1 J2ME基本概念 手机上的应用软件经历了3个阶段: z 仅提供基本通话功能 z 简单的应用程序(电话簿) z 网络功能(WAP) 使用人群的增长,手机厂商依然闭门造车,导致2个问题的出现: z 没有开放的平台,各自的软件不能相互使用。 z 访问Inter

创业的程序员 2156

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

用 J2ME 进行联网

[转载于IBM DeveloperWorks]  内容: J2ME I/O 与联网:概览 连接框架 J2ME 中的 URL 处理 一个货币兑换应用程序 结束语 在小型设备上获取 Java 网络应用程序Soma Ghosh(sghosh@entigo.com)应用程序开发人员,Entigo2002 年 12 月如果您一直都在关注无线专区中 Soma Ghosh 的文章,那么您就已

1462

J2ME Study

J2ME基本知识:1) 什么是J2ME?   当JAVA平台发展到JAVA 2的版本以后,为了适应不同级别计算机硬件的开发需要,JAVA平台形成了三个主要分支: J2SE :Java 2, Standard Edition,是为台式机而设计的,主要运行在Linux, Solaris, 或Microsoft Windows等操作系统上。 J2EE:Java 2, Enterprise Edi...

松松 238
上一篇: Collection接口分析
下一篇: 全面剖析XMLHttpRequest对象
ichsonx
博客等级 码龄19年 202粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值