【Android进阶】Android里webview不支持input file的解决方法(上传按钮点击失效的原因)

Vue.js 图片上传实战:vue-picture-input + FormData + axios 完整链路解析 图片上传是 Web 开发中基础却高危的技术环节,其本质是浏览器原生 File API 与表单数据编码(multipart/form-data)的协同过程。核心原理在于利用 FormData 构建符合 RFC 7578 规范的二进制载荷,并由 axios 等 HTTP 客户端在不干扰 boundary 自动生成的前提下完成传输。该技术方案的价值在于兼顾前端交互可控性、网络层可调试性与后端协议兼容性,广泛应用于头像管理、商品图上传、表单附件提交等场景。本文聚焦 Vue 生态下稳定落地的关键实践,深度解析 vue 阅读详情

三星、华为等android里webview不支持input file的解决方法

原文地址:http://camnpr.com/archives/1093.html

由于安全因素android webview屏蔽了文件上传控件,但是他并没有完全封掉。

<form method="POST" enctype="multipart/form-data">
File to upload: <input type="file" name="uploadfile">  
<input type="submit" value="Press to Upload..."> to upload the file!
</form>


1.activity定义

private ValueCallback mUploadMessage;
private final static int FILECHOOSER_RESULTCODE = 1;


2.扩展WebChromeClient

WebChromeClient chromeClient = new WebChromeClientImpl();
webView.setWebChromeClient(chromeClient);

3.实现WebChromeClientImpl类

public class WebChromeClientImpl extends WebChromeClient {
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
            builder.setTitle("提示").setMessage(message).setPositiveButton("确定", null);
            builder.setCancelable(false);
            AlertDialog dialog = builder.create();
            dialog.show();
            result.confirm();
            return true;
        }

        public void openFileChooser(ValueCallback uploadMsg) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
        }

        //扩展浏览器上传文件
        //3.0++版本
        public void openFileChooser( ValueCallback uploadMsg, String acceptType ) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("*/*");
            startActivityForResult(
                    Intent.createChooser(i, "File Browser"),
                    FILECHOOSER_RESULTCODE);
        }

        //For Android 4.1
        public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
        }
}

4.解决选择文件后按钮失效问题,需要覆写onActivityResult方法

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
	if(requestCode == FILECHOOSER_RESULTCODE){
	    if(null == mUploadMessage)
		return;
	    Uri result = data ==null || resultCode != Activity.RESULT_OK ?null:data.getData();
	    mUploadMessage.onReceiveValue(result);
	    mUploadMessage = null;
	}
}


下面是原文的一个完整案例,很有参考价值

public class MyWb extends Activity {
	/** Called when the activity is first created. */

	WebView web;
	ProgressBar progressBar;

	private ValueCallback mUploadMessage;
	private final static int FILECHOOSER_RESULTCODE = 1;

	@Override
	protected void onActivityResult(int requestCode, int resultCode,
			Intent intent) {
		if (requestCode == FILECHOOSER_RESULTCODE) {
			if (null == mUploadMessage)
				return;
			Uri result = intent == null || resultCode != RESULT_OK ? null
					: intent.getData();
			mUploadMessage.onReceiveValue(result);
			mUploadMessage = null;
		}
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		web = (WebView) findViewById(R.id.webview01);
		progressBar = (ProgressBar) findViewById(R.id.progressBar1);

		web = new WebView(this);
		web.getSettings().setJavaScriptEnabled(true);
		web.loadUrl("http://www.script-tutorials.com/demos/199/index.html");
		web.setWebViewClient(new myWebClient());
		web.setWebChromeClient(new WebChromeClient() {
			// The undocumented magic method override
			// Eclipse will swear at you if you try to put @Override here
			// For Android 3.0+
			public void openFileChooser(ValueCallback uploadMsg) {

				mUploadMessage = uploadMsg;
				Intent i = new Intent(Intent.ACTION_GET_CONTENT);
				i.addCategory(Intent.CATEGORY_OPENABLE);
				i.setType("image/*");
				MyWb.this.startActivityForResult(
						Intent.createChooser(i, "File Chooser"),
						FILECHOOSER_RESULTCODE);
			}

			// For Android 3.0+
			public void openFileChooser(ValueCallback uploadMsg,
					String acceptType) {
				mUploadMessage = uploadMsg;
				Intent i = new Intent(Intent.ACTION_GET_CONTENT);
				i.addCategory(Intent.CATEGORY_OPENABLE);
				i.setType("*/*");
				MyWb.this.startActivityForResult(
						Intent.createChooser(i, "File Browser"),
						FILECHOOSER_RESULTCODE);
			}

			// For Android 4.1
			public void openFileChooser(ValueCallback uploadMsg,
					String acceptType, String capture) {
				mUploadMessage = uploadMsg;
				Intent i = new Intent(Intent.ACTION_GET_CONTENT);
				i.addCategory(Intent.CATEGORY_OPENABLE);
				i.setType("image/*");
				MyWb.this.startActivityForResult(
						Intent.createChooser(i, "File Chooser"),
						MyWb.FILECHOOSER_RESULTCODE);
			}

		});

		// 这句干啥的(⊙o⊙)?
		setContentView(web);

	}

	public class myWebClient extends WebViewClient

	{

		@Override
		public void onPageStarted(WebView view, String url, Bitmap favicon) {
			// TODO Auto-generated method stub
			super.onPageStarted(view, url, favicon);
		}

		@Override
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			// TODO Auto-generated method stub
			view.loadUrl(url);
			return true;

		}

		@Override
		public void onPageFinished(WebView view, String url) {

			// TODO Auto-generated method stub

			super.onPageFinished(view, url);

			progressBar.setVisibility(View.GONE);

		}

	}

	// flipscreen not loading again

	@Override
	public void onConfigurationChanged(Configuration newConfig) {

		super.onConfigurationChanged(newConfig);

	}

	// To handle "Back" key press event for WebView to go back to previous
	// screen.

	@Override
public boolean onKeyDown(int keyCode, KeyEvent event)

{

 if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {

 web.goBack();
 return true;

 }

 return super.onKeyDown(keyCode, event);

}
}

此外,我想补充一点, “上传页面”像在这个例子中, < 4个版本不会工作,因为它有一个图像预览功能,如果你想使它工作使用一个简单的php上传无预览。

对于一些手机品牌修改了android浏览器,比如:三星,我们可以查看他们官网找到解决办法的。samsung developers








Unity微信小游戏输入框失效:从Python环境到JS适配层的完整解决方案 在跨平台游戏开发中,环境配置与平台适配是保障功能稳定性的基础。其原理在于构建工具链依赖特定的运行时环境(如Python)来执行资源转换、代码生成等任务,若环境缺失或版本冲突,可能导致生成产物存在隐蔽缺陷。对于Unity引擎而言,其技术价值在于通过WebGL标准实现高性能游戏在浏览器环境中的运行,而微信小游戏平台则在此基础上封装了特定的JavaScript桥接层以实现原生功能调用。当游戏从Unity编辑器迁移至微信小游戏时,常见的应用场景包括UI交互组件(如输入框)因环境配置不当或适配层事件传递失败而失效。本 阅读详情

相关推荐

团结引擎Android App View:在3D场景中无缝嵌入原生安卓应用

在智能座舱、XR和数字孪生等前沿领域,实现3D虚拟场景与原生2D应用的无缝融合是提升用户体验的关键技术挑战。其核心原理在于跨进程的图形渲染与输入事件同步,通过捕获应用界面帧缓冲区并转换为动态纹理,同时将3D交互事件精准映射回原生应用。这项技术为车载HMI、混合现实等场景带来了巨大的工程价值,使得开发者无需重写应用,即可将高德地图、网易云音乐等完整功能App或自定义View组件,深度集成到由游戏引擎驱动的3D环境中。本文以团结引擎的Android App View功能为例,深入解析了其实现架构、系统权限配置、

weixin_34175509的博客 391

android webview之inputfile无效的问题

android webview 如果不对h5页面中的 input file进行特殊设置的话是无效的,下面就讲讲具体怎么做 我们需要调用webview的setWebChromeClient来重写input file接口 webview.setWebChromeClient(new WebChromeClient() { // For Android 3.0+ public

jinxin610的博客 3553

Unity光标系统深度解析:从API原理到跨平台实战

光标(Cursor)是人机交互中最基础却最易被误解的输入反馈机制,其本质是操作系统原生接口的封装,而非Unity渲染管线的一部分。理解光标在Windows/macOS/WebGL/Android等平台的底层实现差异,掌握`Cursor.lockState`与`InputSystem 2.0`的状态耦合逻辑,是保障UI响应、XR手势、格子地图连续移动等关键功能稳定运行的前提。本文围绕光标热点坐标系、跨平台纹理规范、中文动态生成、锁定竞态控制等高频痛点,提供可落地的技术方案与避坑指南,特别适用于中阶Unity开

weixin_30500473的博客 357

android webview不支持input type=file 标签解决办法

项目中遇到  H5的input type="file" 标签在android的webview中失效,查了一下是安卓禁用掉了 重写webview 的WebChromeClient 可以解决 webView.setWebChromeClient(new WebChromeClient(){ //For 3.0+ Devices (Start) // onActivityResu...

zuola8579的博客 1万+

OpenClaw本地通讯桥接系统:0代码连接微信飞书钉钉

通讯协议适配器是一种将私有移动应用通信能力标准化输出的技术方案,其核心原理是通过ADB/UI自动化绕过官方API限制,在本地设备构建轻量级协议转换层。相比依赖云端服务或逆向协议的方案,它具备低延迟、高可控、零数据上传等技术价值,广泛应用于企业微信自动化、智能家居联动、个人知识管理等对隐私与实时性要求严苛的场景。OpenClaw正是这一理念的典型实现,支持微信、飞书、钉钉等主流APP的本地桥接,真正实现‘手机即服务端’。

weixin_33859231的博客 326

clipboard.js实战指南:解决浏览器剪贴板API兼容性与安全上下文问题

剪贴板API是Web前端实现文本复制的核心能力,其底层依赖浏览器安全模型与用户交互信任机制。现代标准要求navigator.clipboard必须运行在安全上下文(HTTPS或localhost)中,并严格绑定于click等主动手势事件。当遇到NotAllowedError或'Write permission denied'错误时,本质是环境不满足W3C规范,而非代码缺陷。clipboard.js的价值在于自动检测浏览器能力、优雅降级至document.execCommand方案,并封装iOS Safari

weixin_30681121的博客 460

【Android进阶】Android里webview不支持input file的解决方法(上传按钮点击失效的原因)...

三星、华为等android里webview不支持input file的解决方法 原文地址:http://camnpr.com/archives/1093.html 由于安全因素android webview屏蔽了文件上传控件,但是他并没有完全封掉。 [html]view plai...

568

Android-解决在webview中input标签type="file"不能使用的问题

解决在webview中input标签type="file"不能使用的问题

智齿客服H5聊天链接接入及WebView不支持input file文件上传解决

接入智齿客服网页端流程: 主要问题就是Android webview 屏蔽了上传文件功能,本文附带解决了WebView 不支持<input type=file>文件上传,WebView 点击没有反应的问题; 智齿客服网页端接入有两种部署方式。1、网页组件;2、聊天链接。本文档不涉及业务流程,只讲述开发接入过程; 今天主要说一下Android 、ios 对 聊天链接 这种方...

xxlyzgt的博客 1753

android webview input=file 失效解决方案

android webview input=file 失效解决方案

Android WebView 不支持 H5 input type=”file” 解决方法

最近因为赶项目进度,因此将本来要用原生控件实现的界面,自己做了H5并嵌入webview中。发现点击H5中 input type=”file” 标签 不能打开android资源管理器。 通过网络搜索发现是因为 android webview 由于考虑安全原因屏蔽了 input type=”file” 这个功能 。 经过不懈的努力,以及google 翻译的帮助 在 stackoverflow 中找到了解决的方法。 具体可以理解为 重写webview 的WebChromeClient ,废话不多说直接贴代码: private ValueCallback mUploadMessage; p

Vue 2 文件上传实战:绕过 v-model 限制与原生 API 坑点

文件上传是 Web 开发中最基础又最易出错的交互场景之一,其本质涉及浏览器原生表单控件、HTTP 协议传输机制与前端框架响应式系统的三方协同。在 Vue 2 中,由于 Object.defineProperty 无法劫持 FileList 对象、v-model 明确不支持 file 类型输入框、以及 XMLHttpRequest 进度与断点续传需手动实现等底层限制,导致中文乱码、大文件内存爆炸、进度条失效、keep-alive 状态错乱等高频问题。掌握 FormData 编码规范、分块读取(chunked

weixin_34161029的博客 474

Win11下WSL2安装Ubuntu22.04避坑指南:从镜像源到C++环境配置

本文提供了一份详细的Win11下WSL2安装Ubuntu22.04的实战避坑指南。内容涵盖从WSL2核心安装、自定义安装路径,到更换国内镜像源以解决更新缓慢问题,并一站式配置完整的C++开发环境(包括GCC、CMake、vcpkg等),最后分享提升开发体验的进阶技巧,助你在Windows上打造高效的Linux开发工作站。

weixin_29260291的博客 562

深入解析前端文件选择交互:从原生input到现代API的完整实践指南

文件上传是Web开发中的基础交互,其核心在于文件选择机制。从HTML原生<input type="file">元素出发,开发者可以控制文件类型、多选等基础行为,但需注意其样式定制和浏览器兼容性。随着Web应用复杂度提升,拖放选择、剪贴板粘贴以及新兴的文件系统访问API(File System Access API)提供了更丰富的交互模式。在客户端进行文件预处理,如格式校验、大小验证和图片预览,能显著提升用户体验和服务器效率。对于大规模文件处理,分片读取、流式处理和虚拟列表等技术是优化性能的关键。本文聚焦于s

weixin_34259232的博客 427

Notion访问卡顿?一键优化DNS与Hosts提升加载速度

本文针对Notion访问卡顿问题,提供了两种核心优化方案:修改Hosts文件与配置DNS。详细解析了卡顿根源在于网络链路,并手把手指导用户在Windows、Mac、iOS及Android设备上实施优化,旨在通过替换为更优线路,显著提升Notion的页面加载与同步速度。

fff88的博客 1197

factory机制-重载(一)

这里写自定义目录标题1.SystemVerilog对重载的支持2.对约束的重载3.factory 机制式的重载4.重载的方式和种类5.factory机制的调试 1.SystemVerilog对重载的支持 SystemVerilog是一种面向对象的语言。面向对象语言都有一大特征:重载。当在父类中定义一个函数/任务时,如果将其设置为virtual类型,那么就可以在子类中重载这个函数或任务。 重载的最大优势是使得一个子类的指针以父类的类型传递时,其表现的行为依然是子类的行为。 2.对约束的重载 在测试一个DUT时

sinat_41774721的博客 2960

前端文件交互全流程实践:从基础选择到工业级文件处理方案

在Web前端开发中,文件上传与处理是构建交互式应用的基础能力,其核心原理基于HTML5 File API和Blob对象。通过理解文件选择、读取、校验和上传的技术机制,开发者能够实现高效、安全的客户端文件处理流程。这一技术价值在于提升用户体验、减轻服务器压力,并保障应用安全性。在实际应用场景中,无论是图片预览、文档上传还是大文件分片传输,都离不开对文件元数据校验、内容预览和内存管理的精细控制。本文聚焦于构建健壮的前端文件交互模块,深入探讨了文件选择器的深度定制、拖放交互的实现,以及如何通过文件头校验和分片上传

weixin_34167819的博客 404

如何在Ubuntu 22.04上为AlphaFold3配置NVIDIA A100 GPU(含驱动安装避坑指南)

本文提供了在Ubuntu 22.04系统上为AlphaFold3部署NVIDIA A100 GPU的完整安装教程。内容涵盖从系统环境准备、NVIDIA驱动安装与避坑指南,到Docker容器化部署、数据库获取以及最终构建运行AlphaFold3的详细步骤,旨在帮助研究者和开发者高效配置高性能计算环境,充分发挥A100的硬件潜力。

nft7creator的博客 468

前端如何安全可控地调用Android ADK原生能力

在现代前端架构中,Web应用常需突破浏览器限制,访问Android设备的原生能力(如传感器、硬件安全模块、离线AI等),但直接集成ADK易引发构建失败、热更新中断、类型丢失与安全风险。其本质是跨执行环境的能力编排问题:需在声明式、松耦合的前端世界中,实现对强生命周期、强平台依赖的Android原生模块的安全调用。关键技术路径包括契约驱动设计、广播通信替代WebView桥接、线程隔离的ADK封装及标准化错误映射。本文聚焦于React/Vite/TS工程中,通过Zod能力契约、LocalBroadcastMan

weixin_30861459的博客 461

告别零散脚本:用Playwright+Pytest+Yaml+Allure搭建可维护的UI自动化项目

UI自动化测试是软件质量保障的关键环节,其核心在于模拟用户操作,对Web应用界面进行功能验证。传统的脚本堆砌方式常因代码耦合度高、维护成本大而难以为继。工程化解决方案通过分离关注点,将测试逻辑、数据和配置解耦,从而显著提升项目的可读性、可维护性和可扩展性。其技术价值在于构建可持续运行的自动化资产,而非一次性脚本。典型的应用场景包括Web应用的回归测试、兼容性测试及CI/CD流水线中的质量门禁。本文以Playwright、Pytest、Yaml和Allure为核心技术栈,详细阐述了如何从项目架构、页面对象模型

weixin_42529328的博客 299

Cadence Virtuoso VIVA波形分析:从背景色修改到线宽调整的完整指南

本文详细介绍了Cadence Virtuoso VIVA波形分析工具的核心使用技巧,包括背景色修改、线宽调整等高级功能。通过具体操作步骤和配置方法,帮助工程师优化波形显示效果,提升工作效率。特别强调了与Calculator组件的配合使用,以及专业波形图的输出技巧。

weixin_27330481的博客 621

Gemma 3 270M移动端部署实战:轻量大模型离线推理指南

轻量大模型(如Gemma 3 270M)正成为移动端AI落地的关键技术路径,其核心在于平衡参数规模、推理延迟与设备资源约束。原理上依赖模型量化(如Q4_K_M)、GGUF格式分块加载、Native层JNI优化及KV缓存动态管理,以规避Android内存碎片、功耗失控与ANR风险。技术价值体现在纯离线运行、毫秒级首token响应(实测33–68ms)、低内存占用(<215MB)和跨芯片平台兼容性。典型应用场景包括离线客服助手、无网环境智能交互、端侧代码辅助等。本文聚焦真实工程链路——从GGUF模型集成、lla

weixin_34326429的博客 447

把注释掉的代码删除掉:在 SAP ABAP 团队里打造可回溯、可测试、可演进的代码库

摘要 SAP ABAP项目中常见的"注释掉代码"反模式存在严重隐患:它增加代码噪音,制造虚假安全感,并可能引发安全和合规风险。Clean ABAP指南明确建议删除这类代码,理由包括: 版本控制系统已提供完整历史回溯能力 注释代码会误导开发者,增加理解成本 临时禁用需求应通过Feature Toggle实现 必须保留的参考代码应放入$TMP等隔离区域 团队应建立自动化检查机制,将"删除注释代码"纳入工程规范,确保代码库只表达当前有效的行为逻辑。在AI时代,可以利用工具辅

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2451

WAV MP3 MIDI本质解析:数字音频三层结构与跨平台播放实战

数字音频不是简单的文件格式,而是采样、编码、容器三层嵌套的技术体系。WAV代表原始脉冲编码调制(PCM)采样数据,MP3依托心理声学模型实现有损压缩,MIDI则是一种指令式乐谱协议而非音频流。理解这三者的底层原理,是解决跨平台播放异常、格式转换失真、小程序静音等高频问题的关键。在移动端、嵌入式(如ESP32-P4)及Web Audio场景中,容器头校验、Codec ID识别、AudioContext生命周期、ID3元数据迁移等细节,直接决定音频能否正确加载与播放。本文聚焦真实工程痛点,覆盖FFmpeg标准化

weixin_30299709的博客 419

【第33话:车辆控制】自动驾驶车辆运动学模型推导及详解

自动驾驶车辆的运动学模型以自行车模型为核心,通过状态方程。

一碗白开水一 831

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Unity游戏内嵌浏览器:ZFBrowser集成与中文输入法修复实战

在游戏开发中,内嵌浏览器技术为动态内容展示提供了强大支持。其核心原理是通过封装浏览器内核(如CEF),在游戏运行时渲染网页内容,实现游戏逻辑与Web技术的无缝融合。这项技术的核心价值在于,它能将Web生态的快速迭代、丰富交互和跨平台能力引入本地游戏,极大提升了商城、活动、公告等动态系统的开发效率与灵活性。在实际应用场景中,开发者常面临中文输入法支持、性能优化和跨平台兼容等挑战。本文聚焦于Unity平台,通过ZFBrowser插件,详细解析了如何实现功能完整的内嵌浏览器,并重点攻克了中文输入法这一常见难题,为

weixin_34130389的博客 500

深度学习工具包 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代码格式化方法和Eclipse重要快捷键
下一篇: 【Android进阶】Android自定义组件之自动换行View,以TextView为例
dodod2012
博客等级 码龄15年 244粉丝 98原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值