Android sd相关笔记 - Android4.4上应用写sd卡问题

MTK平台--Android P SD卡检测 SD卡检测 文章目录SD卡检测前言目录代码分析问题追踪所思 前言    最近公司拿到了Android P的代码,需要在原有的项目基础上将Android 8.1升级为Android 9.0;最为一个职场新人,独挑大梁是不现实的,不过帮大佬"打杂"还是可以的,在配置SD卡的时候,过程比较有意思,学到了一些东西,在此做个记录。 目录    对于一个Android项目来说,SD卡应该是属于比较简单的... 阅读详情

Android sd卡笔记


1. Environment.getExternalStorageDirectory() 的使用
(1)Environment.getExternalStorageDirectory()在部分手机中获取到的是内部存储路径,而不是sd卡路径,如三星手机等
(2).如果系统设置了优先存储在内置存储中,那么Environment.getExternalStorageDirectory()获取到的也是内部存储路径
(3)Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)在没有sd的部分手机
(Environment.getExternalStorageDirectory()指向内部路径时)上也返回true
//此方法不知是否可行,没有大量手机测试
public static boolean externalMemoryAvailable(final Context context) {
File[] list = context.getExternalCacheDirs();
boolean hasSd = list != null && list.length > 1;
return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) && hasSd;
}

那么如何正确获取手机存储位置路径呢,这里附上链接:
http://blog.fidroid.com/post/android/ru-he-zheng-que-huo-de-androidnei-wai-sdqia-lu-jing     (sd卡路径获取)
http://www.cnblogs.com/bluestorm/p/3694921.html    (/storage/sdcard, /sdcard, /mnt/sdcard 三者的区别)
http://www.cnblogs.com/yejiurui/p/3421314.html   (android中的目录结构介绍)

2. 在sd卡根目录下创建目录(部分手机)失败

因为在 Android4.4新版本中,Google针对外卡写权限增加了CTS用例,对外卡的写操作增加了限制,由此导致部分开发者的应用可能存在外卡写权限兼容性问题。
Android4.4对外卡的写操作进行增加了如下两条限制:
(1)通过用户态文件系统fuse对外卡的写权限进行了限制;
  • 用户只能在外卡Android/data/<package-name>/目录下进行写操作。
  • 拥有WRITE_MEDIA_STORAGE权限(仅特权用户才能申请这个权限)的用户才能对整个外卡进行写操作。
(2)Android4.4的MediaProvider不允许对外卡进行任何写操作。

注意:随着应用的卸载,Android/data/<package-name>/目录也会被删除

参考:
http://developer.huawei.com/devunion/ui/newsDetail.html?news=/devunion/news/n_00033.html
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1027/1849.html      (Android 外部存储权限分析)
https://developer.android.com/training/articles/scoped-directory-access.html

3. 在sd卡的Android/data/<package-name>/目录下mkdirs()失败(部分手机)
本人经过多次尝试,终于成功了,做法是:
(1)mContext.getExternalFilesDir(null).getAbsolutePath();//要先执行该方法,后面才能创建目录,否则失败
个人猜测是新建了Android/data/<package-name>/目录
(2)然后再调用mkdirs()

4. getExternalFilesDir(null)及getExternalFilesDirs(null)
getExternalFilesDir(null)返回的是SdCard/Android/data/应用包名/files或者内置存储路径/Android/data/应用包名/files
getExternalFilesDirs(null)返回的是内置和sd卡的/Android/data/应用包名/files

测试:
private void getDir(){
    	Context context = getApplicationContext();
    	Log.e(TAG, "getCacheDir():" + context.getCacheDir().getAbsolutePath());
    	Log.e(TAG, "getExternalCacheDir():" + context.getExternalCacheDir().getAbsolutePath());
    	print("getExternalCacheDirs():", context.getExternalCacheDirs());
    	Log.e(TAG, "getFilesDir:" + context.getFilesDir().getAbsolutePath());
    	Log.e(TAG, "getExternalFilesDir(null):" + context.getExternalFilesDir(null).getAbsolutePath());
    	print("getExternalFilesDirs(null):", context.getExternalFilesDirs(null));
    	
    	Log.e(TAG, "getObbDir:" + context.getObbDir().getAbsolutePath());
    	print("getObbDirs():", context.getObbDirs());
    	
    	Log.e(TAG, "Environment.getDataDirectory():" + Environment.getDataDirectory());
    	Log.e(TAG, "Environment.getDownloadCacheDirectory():" + Environment.getDownloadCacheDirectory());
    	Log.e(TAG, "Environment.getRootDirectory():" + Environment.getRootDirectory());
    }
    
    private void print(String tag, File[] list){
    	if(list == null){
    		Log.e(TAG, tag + "null or list.length == 0");
    	}else{
    		int i = 0;
    		for(File f : list){
    			if(f != null){
	    			i++;
	    			Log.e(TAG, tag + " " + i + " " + f.getAbsolutePath());
    			}
    		}
    	}
    }

(1)有sd卡
08-24 14:10:23.666: E/DirDemo(26722): getCacheDir():/data/data/应用包名/cache
08-24 14:10:23.666: E/DirDemo(26722): getExternalCacheDir():/storage/emulated/0/Android/data/应用包名/cache
08-24 14:10:23.666: E/DirDemo(26722): getExternalCacheDirs(): 1 /storage/emulated/0/Android/data/应用包名/cache(内部存储)
08-24 14:10:23.666: E/DirDemo(26722): getExternalCacheDirs(): 2 /storage/sdcard1/Android/data/应用包名/cache
08-24 14:10:23.666: E/DirDemo(26722): getFilesDir:/data/data/应用包名/files
08-24 14:10:23.666: E/DirDemo(26722): getExternalFilesDir(null):/storage/emulated/0/Android/data/应用包名/files
08-24 14:10:23.667: E/DirDemo(26722): getExternalFilesDirs(null): 1 /storage/emulated/0/Android/data/应用包名/files
08-24 14:10:23.667: E/DirDemo(26722): getExternalFilesDirs(null): 2 /storage/sdcard1/Android/data/应用包名/files
08-24 14:10:23.667: E/DirDemo(26722): getObbDir:/storage/emulated/0/Android/obb/应用包名
08-24 14:10:23.667: E/DirDemo(26722): getObbDirs(): 1 /storage/emulated/0/Android/obb/应用包名
08-24 14:10:23.667: E/DirDemo(26722): getObbDirs(): 2 /storage/sdcard1/Android/obb/应用包名
08-24 14:10:23.667: E/DirDemo(26722): Environment.getDataDirectory():/data
08-24 14:10:23.667: E/DirDemo(26722): Environment.getDownloadCacheDirectory():/cache
08-24 14:10:23.667: E/DirDemo(26722): Environment.getRootDirectory():/system

(2)无sd卡
08-24 14:22:39.862: E/DirDemo(6457): getCacheDir():/data/data/应用包名/cache
08-24 14:22:39.873: E/DirDemo(6457): getExternalCacheDir():/storage/emulated/0/Android/data/应用包名/cache
08-24 14:22:39.881: E/DirDemo(6457): getExternalCacheDirs(): 1 /storage/emulated/0/Android/data/应用包名/cache
08-24 14:22:39.882: E/DirDemo(6457): getFilesDir:/data/data/应用包名/files
08-24 14:22:39.890: E/DirDemo(6457): getExternalFilesDir(null):/storage/emulated/0/Android/data/应用包名/files
08-24 14:22:39.895: E/DirDemo(6457): getExternalFilesDirs(null): 1 /storage/emulated/0/Android/data/应用包名/files
08-24 14:22:39.903: E/DirDemo(6457): getObbDir:/storage/emulated/0/Android/obb/应用包名
08-24 14:22:39.907: E/DirDemo(6457): getObbDirs(): 1 /storage/emulated/0/Android/obb/应用包名
08-24 14:22:39.907: E/DirDemo(6457): Environment.getDataDirectory():/data
08-24 14:22:39.907: E/DirDemo(6457): Environment.getDownloadCacheDirectory():/cache
08-24 14:22:39.907: E/DirDemo(6457): Environment.getRootDirectory():/system



Android4.4之后的外置SD卡文件读写的解决方法 在Android4.4之后,普通应用就没有外置SD卡的写权限了,对于要操作外置SD的应用来说就是个灾难了。 我最近做的功能是要对视频和图片进行加锁,无法写就无法锁了。怎么解决呢?先百度Google大家都在说这个问题,但没有找到好的解决办法,然后我就去看看其它应用怎么做的。找几个需要控制SD卡的应用,ES文件浏览器。 在写外置SD卡文件时会弹出这样一个界面: 点击选择进入系统的一个文件目录界面 阅读详情

相关推荐

【Android-数据存储】外部存储(存储在SD卡上)

android的数据存储主要分为三类: 内部存储:link. 外部存储 sharedpreferences:link. 本文主要介绍外部存储的相关知识。 存储路径:/storage/emulated/0 ———————————————————————————————————————— 1、向SD卡写数据 步骤: manifest中声明写权限: 请求权限:ActivityCompat.req...

qq_40716430的博客 2175

Android常用的Gradle配置和加速编译

Why Gradle Gradle makes the impossible possible, the possible easy and the easy elegant. 在Android开发中经常会用Gradle来构建项目,Gradle能很方便的项目的版本集成和打包,虽Gradle官方已经给出很详细的文档了,但还是有必要抽离出一些常用的配置。 整个Android项

jinhui157的博客 848

我的Android笔记(五)——调用相机并将照片存储到sd卡上

Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据。 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,一般平常的应用只需使用第一种即可。 用Intent启动相机的代码: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); sta

张新强的优快云博客 1万+

Android 沉浸式状态栏攻略 让你的状态栏变色吧

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/48649563; 本文出自:【张鸿洋的博客】 一、概述 近期注意到QQ新版使用了沉浸式状态栏,ok,先声明一下:本篇博客效果下图: 关于这个状态栏变色到底叫「Immersive Mode」/「Translucent Bars」有兴趣可以去 为什么在国...

dawuafang 710

Android9外置SD卡的读写权限报错

外置sd卡相关功能的时候遇到了在9.0上外置SD卡写入权限的问题,在 9.0 之前的平台,申请了 WRITE_MEDIA_STORAGE 的权限后,平台签名的应用就可以通过 java.io.File 接口写入外置 SD 卡了。但之后,想要写入外置 SD 卡,就需要像第三方应用一样,使用 DocumentFile 的接口, 可以阅读 API 文档 存储访问框架 和 使用作用域目录访问 。 android 9加入权限和动态申请都无法对外置SD卡创建文件夹 <uses-permission and..

Alex的博客 3579

Android 监控SD卡的插拔状态

我们是以DV6300-T的平台来做测试的,发现有2种方式来检测android中external media(包括SD卡,USB)的状态。 一种是使用StorageListener监听,还有一种是使用广播的方式。   DV6300-T的存储设备相关分析: 相关的类主要有: RecordDeviceManager   DeviceStateListener  ChoiceRecordDevi

pasterzhang的专栏 1万+

4.28 context.getExternalFilesDir(null).getAbsolutePath()得到相册扫描不到的路径

context.getExternalFilesDir(null).getAbsolutePath() 的获取结果: /storage/sdcard0/Android/data/com.xx.xxx/files/ 该目录下得文件不会被相册扫描到。 来自代码:https://git.oschina.net/yso/JingPai (静拍) CaptureStatus类

touch_ping的专栏 4593

解决Android系统刷机后SD卡无法识别的问题

在Android系统中,刷机是一种常见的优化和自定义设备的方式。然而,在某些情况下,刷机可能会导致SD卡丢失,这是一个困扰许多用户的普遍问题。SD卡丢失不仅意味着用户可能会失去重要的数据,还可能导致设备的存储空间骤减,影响设备性能。因此,理解SD卡丢失的原因,采取适当的预防措施以及掌握丢失后的处理方法,对于Android用户来说至关重要。本章将对这一问题进行概述,为深入分析其原因和解决方案奠定基础。

weixin_31869917的博客 1646

国行ME860升级2.3.4

从京东购得ME860, 系统版本:Version 4.1.330.ME860.ChinaRetail.en.CN Android版本:2.2.2 基带版本:BP_N_01.37.00R WEBtop版本:OSHWT_U1_6.60.3_cn 内核版本:2.6.32.9-00029-gb0b33ab w21529@zkr30lnxdroid18 #1 SMP PREEMPT Mon...

weixin_30878501的博客 603

CAN总线开发必看:报文发送类型全解析(含Cycle/Event/CE/IfActive对比)

本文深入解析CAN总线开发中的四种报文发送类型(Cycle/Event/CE/IfActive),对比其核心特征与工程应用场景。通过典型ECU交互案例和决策矩阵,帮助开发者根据实时性、总线效率等需求选择最优方案,并详解信号发送模式与恢复机制,提升车载网络通信可靠性。

weixin_30632089的博客 311

手把手搭建摄像头驱动(一):I2C设备树插件与OV5640实战

本文手把手指导如何搭建OV5640摄像头驱动,重点讲解I2C设备树插件的编写与实战应用。通过硬件连接验证、I2C驱动框架搭建、设备树插件编译及动态加载调试,系统介绍Linux驱动开发全流程,并提供常见问题解决方案,帮助开发者快速掌握摄像头驱动开发技术。

git9versioner的博客 754

ffmpeg android ndk编译,关于使用Android NDK编译ffmpeg

由于项目需求,前两天在在ios项目中使用ffmpeg,写下了“关于ios中编译ffmpeg0.9.2库”,然后有朋友在咨询,如何编译最新版的ffmpeg,其实最新版的编译也差不多,只是看看最新版的改变如何,修改一些参数即可,同时又因为我需要将项目跨平台到android,所以这次又需要在android中使用ndk来编译ffmpeg。索性在android上就编译一个最新版的ffmpeg出来看看。还是先...

weixin_32838901的博客 472

数字IC后端先进工艺设计实现之TSMC 12nm 6Track工艺数字IC后端实现重点难点盘点

如果你仅仅是跑个先进工艺的flow,不懂先进工艺在数字IC后端实现上的不同点,为何有这样的不同点,针对这些不同之处后端实现阶段如何考虑它们,那么你等于0经验!大家可以针对本文所列的要点进行复盘,如果这些都搞透彻了,你就可以大胆把T12 nm的A72和A55项目写到你的简历中。T12这个工艺也是支持Preferred和Non-prefered两个方向来完成routing的,但是它对它们的最小线宽和最小线间距提出了更严格的要求。所有各个子模块的形状,彼此之间的间距都是有严格的要求。为何要有P48这一层?

weixin_37584728的博客 8333

Android 9.0 SD卡写入权限问题

今天在做外置sd卡相关功能的时候遇到了在9.0上外置SD卡写入权限的问题,看到了这篇文章,感觉写的很好,所以转载下来,希望帮助更多的人。转自https://busy.im/post/android-sdcard-write/ 最近升级到 Android 9.0 后,发现文件管理器在写入外置 SD 卡时出现了写入失败的问题,定位到File.canWrite()方法,发现返回了false。经过...

3万+

ABB RobotStudio 和 S7-PLCSIM Advanced V5.0 搭建虚拟通信环境,实现 PLC 对机器人布尔量、数字量和模拟量的控制。

本教程详细介绍了如何利用ABB RobotStudio和S7-PLCSIM Advanced V5.0搭建虚拟通信环境,实现PLC对机器人的布尔量、数字量和模拟量控制。主要内容包括:在TIA Portal V20中配置PLC项目并编写通信程序;通过S7-PLCSIM Advanced创建虚拟PLC运行环境;在RobotStudio中设置机器人PROFINET通信;以及建立虚拟网络连接并进行功能测试。该方案适用于工业自动化虚拟调试,可显著降低现场调试风险。操作需注意软件版本兼容性、网络配置及信号映射准确性,最

CHUXUEZHE8210的博客 2515

Carla中如何渲染opendrive车道线和车道标识(全网独家,附代码)

carla是可以单独加载opendrive并渲染路面的,但是无法把车道线渲染出来,这是一个大坑,因为没有车道线就无法给感知输入。楼主已经实现,直接渲染车道线或者带PBR贴图的车道标识。实现起来非常简单,但必须对carla源码以及ue的开发足够了解。在carla源码中有一个很重要的类opendrivegenerator,它是关于opendrive渲染的全部方法,但是你是找不到它实例化的地方的,因为它被定义在蓝图关卡中。网上包括carla官方关于carla源码的分析少之又少,楼主将自己的经验写出来供大家参考。

u013998156的博客 1089

Android 外置 SD 卡写入权限问题

https://busy.im/post/android-sdcard-write/   最近升级到 Android 9.0 后,发现文件管理器在写入外置 SD 卡时出现了写入失败的问题,定位到 File.canWrite() 方法,发现返回了 false。经过讨论追踪定位,发现是由于 Google 的一个更改导致的: diff --git a/data/etc/platform.xml ...

thinkinwm的专栏 8400

RK AVS双目融合记录

NOTE] 调试平台双目avs融合调试,需要先保证两个摄像头能正常出图同时出流。使用默认工具测试vi->avs->venc通路是否正常,-a可指定isp效果文件需要开启CONFIG_VIDEO_ROCKCHIP_AVSP和CONFIG_VIDEO_ROCKCHIP_FEC,dts中使能。

mangofu的博客 103

android外置sd卡读写 安卓sd卡变为内置存储

Android外置SD卡读写及将SD卡变为内置存储 在Android设备中,外置SD卡是一种常见的存储方式,用户可以用它来扩展手机的存储空间。本文将讲解如何对外置SD卡进行读写操作,并介绍如何将SD卡转换为内置存储。我们还将展示相关的代码示例及状态和甘特图,以便于读者更好地理解这一过程。 一、外置SD卡的读写操作 Andr...

weixin_41269508的博客 2075

DeerFlow 系列教程 第十一篇 | Sandbox 沙箱与 Memory 记忆——安全执行与持久认知

用户请求│▼Lead Agent├── 系统提示词组装│ ├── <memory> 段 ← Memory 系统注入用户记忆│ ├── <skill_system> 段│ └── <subagent_system> 段│├── 工具调用│ ├── read_file ├── Sandbox 系统提供隔离执行│ ├── write_file├── 路径虚拟化 + 安全验证│└── 对话结束│▼│├── 过滤消息(去除工具调用中间步骤)├── 检测纠正/强化信号。

weixin_43674738的博客 161

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android读写SD卡

最近遇到一个问题,用平板可以蓝牙接收到txt数据,同样程序,在手机上测试,就找不到txt文本, 之前程序: // ---------创建文件夹WristDay,把采集的数据全放在该文件夹下 //通过创建对应路径的下是否有相应的文件夹。 File dir = new File( "/sdcard/WristDay/"

静下心来吧,让自己变强大点! 888

深度学习工具包 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 P 外置 SD 卡写入权限问题

概述 Android 9.0 后,发现文件管理器在写入外置 SD 卡时出现了写入失败的问题,定位到 File.canWrite() 方法,发现返回了 false。经过讨论追踪定位,发现是由于 Google 的一个更改导致的: diff --git a/data/etc/platform.xml b/data/etc/platform.xml index 04006b1..3021555 10064...

ch853199769的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

假人有限元模型

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

Android 检测SD卡状态

if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // sd card 可用 }else { // 当前不可用 }Environment.MEDIA_MOUNTED // sd卡在手机上正常使用状态  Environment.MEDIA_UNMOUNTED // 用户手工到手机设

超宇的博客 1万+

Android 总结外置 内置SD卡路径问题

我们先来看下android5.1 init.rc中 mkdir /mnt/shell/emulated 0700 shell shell mkdir /storage/emulated 0555 root root mkdir /storage/sdcard1 0000 system system mkdir /storage/usbotg 0700 system

kc58236582的博客 1万+
上一篇: Picasso, ImageLoader, Fresco, Glide 优劣
下一篇: Android Sqlite数据库的升级(一)
安卓鸟
博客等级 码龄15年 14粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值