闲聊ROOT权限——ROOT权限的前世今生

战绩分享的具体实现步骤 战绩分享是很多游戏都需要的功能,但是游戏很一般不会在打完一局后自动分享战绩,都需进行手动分享,今天就来说一说怎么分享 首先:闲聊里的战绩自动分享就很简单只需要将分享机器人拉进群里,然后提供闲来合伙人账号、闲聊群名字、亲友圈ID进行绑定就可以了,绑定成功后就可以实现自动分享了 操作步骤来源于➡️具体参考 基本用法 adb能做什么?答案是所有能对手机的操作都能用adb实现。也就是说如果... 阅读详情

最近工作一直很忙,竟然慢慢地疏远了优快云的博客,然而在工作中遇到问题,又会被多次的引导至优快云,故笔者抽空也将自己学习的成果与大家分享在这里,希望能帮助到需要帮助的人。

本文将从几个方面,由浅至深地讲述ROOT到底是什么东西?


一. ROOT权限简单介绍

二.为什么需要ROOT

三. ADBD的ROOT权限

四.深入源代码


ROOT权限简介:

ROOT权限是Linux内核中的最高权限,如果你的身份是ROOT,那么你就具有了ROOT权限。有了最高权限,你就可以为所欲为,换句话说,如果恶意程序获取到了ROOT权限,那么就可以肆意地破坏你的手机,获取的隐私...所以厂商一般在生产手机的时候,不会提供给用户ROOT权限,官方宣称是为了保护用户手机的安全,然后装了一堆开机自动启动,而用户这辈子也用不到也卸载不了垃圾软件(相信使用安卓的同学们都懂我的意思),而苹果所说的越狱,也就是获取ROOT权限。


为什么需要获取ROOT权限?

苹果用户获取ROOT权限,是为了可以免费安装各种软件,以及为了获取更加灵活的操作体验,苹果不会安装一堆恶心的软件;而安卓普通用户获取ROOT权限,最大的目的就是为了卸载这些恶心的自带软件,安卓极客用户则是为了各种折腾安卓手机,安卓开发人员是为了得到日志文件,分析BUG。


ADBD的ROOT权限:

ADBD是什么?相信大家都看过,IT男把手机连上电脑,然后不知怎么的弹出一个黑乎乎的窗口,上面有一排排白色的英文字母,然后帅气的敲击着键盘(一般敲击 adb shell,然后进入手机),啪啪几下,可以帮你解决一些手机的问题。这个可以和手机交互的进程就是ADBD。这就好比,你去朋友家玩,然后你朋友家比较高端,进大门之前有个可视对讲机,那么你首先通过对讲机呼叫朋友(敲击adb shell),看看在不在家(手机是否相应adb shell这个命令),如果朋友在家,那么就会通过对讲机为你开门(成功进入手机中),提供这个服务的可视对讲机就相当于ADBD。说白了,ADBD就是可以为你提供一种进入手机内部的服务通道。

那么为什么需要ADBD具有ROOT权限?这就涉及到另一个与ROOT息息相关的东西——su。

我们开机之后,使用手机的身份就是一个普通用户(user),如果执行su,那么就可以直接切换到ROOT身份。就像仙剑奇侠传三里面的景天,是个凡人,法力有限,但是大家都知道,他的前世是飞蓬将军,法力高强,天界无人能敌,只有魔界至尊重楼可以与他一较高下,当他们来到天庭的时候,玉帝施法,让景天直接切换成飞蓬将军,于是他就有了飞蓬将军的记忆和法力,与重楼又一次大战。su就是这样一个神奇的命令。

高通平台上,su的相关代码位于: LINUX/android/system/extras/su/su.c中

其实我们所说的越狱或者ROOT,就是把su安装到手机里面 /system/bin目录下,并把它的权限设置为4755,那么某些程序需要ROOT权限的时候,就可以通过su切换到ROOT身份,然后去执行,因此一般被ROOT的手机都会安装一个“超级用户”这样的应用,就是用于管理哪些软件可以切换到ROOT身份,哪些不可以,保证用户安全,这个想法是很好很天真,对于正规的软件,人家按照你的路子来,不正规的软件,你一个小小的超级用户的应用,岂能挡我获取ROOT,虐不死你。

那么为什么需要ADBD获取ROOT权限呢?经过上面的讲解大家应该能猜到,如果ADBD有ROOT权限,就可以通过adb 工具,为所欲为,而又不留下痕迹(不安装su),可以删除自带垃圾软件,获取任意目录的文件,安全性较高。笔者就是通过这种方式获取一些系统级别文件。


深入代码:

看了上面的文字,也许很多人会有这样的想法,原来ROOT一个手机这么简单?错!一点也不简单。

首先:/system分区是只读的文件系统,即你无法往system分区中写入任何东西,其次就算你侥幸把su安装到/system/bin下,你也没法修改它的权限为4755,再者,即使你侥幸把su的权限设为4755,你也逃不过有些手机的反root机制(即检测到有文件的权限为4755,就删除)。

首先我们来看看su的部分代码:

 /* Until we have something better, only root and the shell can use su. */
   myuid = getuid();
    if (myuid != AID_ROOT && myuid != AID_SHELL) {
        fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
        return 1;
    }
这句话告诉我们,如果执行su的不是ROOT或者SHELL用户,那就直接退出,说明切换身份时候,你必须是这两个用户,还好我们用adb shell进入,是SHELL用户,好险啊。

if(argc < 2) {
        uid = gid = 0;
    } else {
        int gids_count = sizeof(gids)/sizeof(gids[0]);
        extract_uidgids(argv[1], &uid, &gid, gids, &gids_count);
        if(gids_count) {
            if(setgroups(gids_count, gids)) {
                fprintf(stderr, "su: failed to set groups\n");
                return 1;
            }
        }
    }
判断执行su的时候,有没有其它参数,我们只是执行su,即argc < 2成立,su也可以切换成其它用户(argc > 2,详细看su命令的使用),这时候,uid 和 gid 都被设置为0 。即ROOT用户的ID号和组号

if(setgid(gid) || setuid(uid)) {
        fprintf(stderr,"su: permission denied\n");
        return 1;
   }
来了来了,就是它,这就是我们最终的目的,把我变身成飞蓬将军,如果一切顺利,你就可以变身成功了(切换ROOT成功)

/* Default exec shell. */
    execlp("/system/bin/sh", "sh", NULL);
每次su之后,就会变成root#,然后就可以通过控制台继续敲命令,但是不同的是,你已经是ROOT了,权限已经很大了。

Android系统启动的时候,ADBD是ROOT权限,只是后来被降级了,判断是否降级的函数是should_drop_privileges()这个函数:

static int should_drop_privileges() {
#ifndef ALLOW_ADBD_ROOT
    return 1;
#else /* ALLOW_ADBD_ROOT */
首先判断是否定义了ALLOW_ADBD_ROOT,如果系统都不允许你ROOT,就直接返回1,下面什么都不看了,就像找工作的时候,不管你多么厉害,如果你第一条要求都不符合,就直接把你pass了,说什么都没用,够狠的。

    int secure = 0;
    char value[PROPERTY_VALUE_MAX];

  /* run adbd in secure mode if ro.secure is set and
    ** we are not in the emulator
    */
   property_get("ro.kernel.qemu", value, "");
    if (strcmp(value, "1") != 0) {
        property_get("ro.secure", value, "1");
        if (strcmp(value, "1") == 0) {
            // don't run as root if ro.secure is set...
            secure = 1;
下面就是获取系统的属性,判断是否打开ROOT权限,可以看到如果ro.kernel.qumu 这个属性被置为了,没关系再给你一次机会,判断ro.secure是否也是1,如果是,对不起你无法获得root权限,我要把secure置为1了(secure为1意味着要降级,后面会讲解),接着:

           // ... except we allow running as root in userdebug builds if the
            // service.adb.root property has been set by the "adb root" command
            property_get("ro.debuggable", value, "");
            if (strcmp(value, "1") == 0) {
                property_get("service.adb.root", value, "");
                if (strcmp(value, "1") == 0) {
		    secure = 0;
            	}
            }
        }
    }
哈哈,又给了你一次机会,我再来判断ro.debuggable是不是1,如果不是,对不起,我必须要降级,否则再给你一次机会,判断service.adb.root这个属性的值,如果也是1,那么就不降级,一般在编译ROM版本的时候,会同事编译两个版本,一个是工程版本,是具有ROOT权限的ADBD,这样方便开发者调试系统,另一个就是我们用户用的版本,叫user版本,这个是没有ROOT权限的,可以看到,就是通过property_get一系列属性来判断是否降级。

    return secure;
#endif /* ALLOW_ADBD_ROOT */
}
最后,返回secure即可。可以看到最后决定是否降级的变量就是secure,所有如果有源代码的话,只有最后将secure赋值为0,不管什么版本,最后都是ROOT权限。

if (should_drop_privileges()) {
        drop_capabilities_bounding_set_if_needed();

        gid_t groups[] = { AID_ADB, AID_LOG, AID_INPUT, AID_INET,
                           AID_NET_BT, AID_NET_BT_ADMIN, AID_SDCARD_R, AID_SDCARD_RW,
                           AID_NET_BW_STATS };
        if (setgroups(sizeof(groups)/sizeof(groups[0]), groups) != 0) {
            exit(1);

        /* then switch user and group to "shell" */
        if (setgid(AID_SHELL) != 0) {<span style="white-space:pre">			</span>//曾经的漏洞,被封住了
            exit(1);
        }
        if (setuid(AID_SHELL) != 0) {<span style="white-space:pre">			</span>//曾经的漏洞
            exit(1);
        }

        D("Local port disabled\n");
    } 
从这段代码可以看到,如果should_drop_privileges返回1,那么就可以降级了,降级函数为setgid(AID_SHELL)和setuid(AID_SHELL),曾经有黑客利用一些方法,使得setgid和setuid执行失败,即降级失败,以前的代码中是没有exit的,那么当setuid和setgid执行失败之后,就不会降级。

ROOT不是那么轻易的,现在有很多已知的漏洞,但是都被封锁了,所有不是每个root工具都能root成功的,要看它采用的是什么方法来ROOT。

Android多用户文件操作与权限管理:路径映射到FileProvider实战 Android系统在Linux用户模型之上引入多用户隔离机制,每个userId对应独立的数据与存储视图,同一应用在不同用户下访问的路径和权限截然不同。理解/data/user与/storage/emulated的映射原理,是避免跨用户文件操作崩溃的基础。FileProvider作为跨应用共享的标准方案,其content URI授权与目标uid绑定,多用户环境下尤其容易因授权失效而抛出Permission Denial。同时,Scoped Storage在Android 11后全面上锁,遍历Android/d 阅读详情

相关推荐

Linux运维之切换到 root 用户

本章介绍Linux里如何操作非root用户,切换到root用户。在 Linux 系统中需要 root 权限执行命令,有两种方式可以做到,一种是使用 sudo 临时切获得 root 用户的权限,一种是使用 su 切换到 root 用户。

Java 技术专栏,从入门到精通,熟悉企业级开发 4058

安卓逆向:什么是root?

最新的安装步骤为:用户下载最新的 Magisk Manager apk 文件进行应用的安装,然后将 apk 文件的扩展名改为 . zip,进入 TWRP 环境刷入即可。此时进入系统,你会发现你已经成功安装了 Magisk(如果显示没有安装则为获取失败,请检查操作过程重新尝试),但这还不够,我们还得进入 Magisk Manager,选择安装(install)——install——Direct Install(直接安装)才能将临时 root 转换为永久 root。

2401_82590480的博客 6073

PFC电压环与电流环的带宽设计:如何避免输入电流畸变?

本文深入探讨了PFC电路中电压环与电流环的带宽设计问题,揭示了快速电压环导致输入电流畸变的机制,并提供了避免THD上升的工程实践方法。通过分析双环控制架构、谐波失真原理及带宽设计黄金法则,帮助工程师优化PFC系统性能,实现高功率因数与低谐波失真的平衡。

weixin_28304023的博客 424

【解决】已root, 提示‘adbd cannot run as root in production builds‘,adb push /adb pull 到系统目录 解决方案

脚本我已经写好了adbpush.sh 、adbpull.sh、 adbpull.bat、adbpush.bat,兼容所有PC系统: 下载地址:adbpush_pull.rar-OS文档类资源-优快云下载 用法和 adb push/pull 一样,参数也一样。 如: 1、push 文件到手机里 adbpush.bat F:\111.txt /data/data/ 2、pull 文件到电脑上 adbpull.bat /data/data/111.txt F:\txt\ 不同系统选择不同目录的...

键盘的起始页 4259

OpenCV教程:超详细的OpenCV入门教程,值得收藏

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。 OpenCV 使用 C/C++ 开发,同时也提供了 Python、Java、MATLAB 等其他语言的接口。 OpenCV 是跨平台的,可以在Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。 OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、..

pythonandaiot的博客 14万+

gsplat在windows本地部署

3DGS的cuda提效和优化内存的版本gsplat,使得在有一定GPU计算能力的电脑上也能够尝尝3DGS的效果。我在2025年的开年之初尝试配置过gsplat,由于过程中遇到很多问题,最终还是有一些windows上字符编码的问题,没有跑通,最近看gsplat的github更新了3DGUT,优化了反射和二次折射,以及适用于非线性相机模型,如鱼眼相机等。在data目录下下载好了360_v2的数据,进入之后images文件夹是原始分辨率的图像,images_2是下采样系数为2的数据,以此类推。

yuleaf_csdn的博客 2371

[置顶] Android adb root权限

永久root带文件 因为开发需要,我经常会用到adb这个工具(Android Debug Bridge),我们都知道adb shell默认是没有root权限的,修改系统文件就很不方便了,adb push一个文件就提示Permission Denied。删除system下的文件也没有权限。其实有两种方法可以获取adb shell的root权限,这两种方法的前提都是手机已经root。 1、用s...

weixin_30655569的博客 1886

从外包到转正:一个华为OD亲历者的真实工作体验与避坑指南

本文分享了一位华为OD员工从外包到转正的真实经历与实用建议。通过详细解析华为OD的日常工作、转正核心指标、机试备考技巧及职场突围策略,为读者提供了一份全面的避坑指南。特别针对机试E卷的高频考点和刷题方法,给出了具体的数据分析和实战经验。

weixin_33686714的博客 708

adb复制root到手机,怎样通过adb命令来root手机

注意:获取Root权限过程有风险,后果自负 Universal Androot 手机上运行破解软件(Z4ROOT,KINGROOT,) 这类获取Root权限的软件效果因“机型”而异,而且成功率不高,想想也知道了:在一个没有Root的手机上以普通权限运行软件妄图取得Root权限,难度可想而知。1.先用电脑端的360手机管家为手机安装adb驱动,当然,你也可以直接复制驱动到c:system32。给手机录取权限的话,这个可以去下载一个root大师,然后把手机root一下之后,那么就可以卸载相关的软件了。

weixin_44884047的博客 2万+

上网第二课:办了百兆宽带,为什么测速只有一半?

最慢的那一环。

qq_36765170的博客 111

新手也能懂的Simulink汽车二自由度建模:从公式推导到模型搭建全流程

本文为新手提供了在Simulink中搭建汽车二自由度模型的完整实战指南。文章从模型核心概念讲起,详细讲解了如何将车辆动力学方程转化为状态空间模型,并逐步指导在Simulink中实现从参数设置、模块搭建到仿真验证的全过程。通过阶跃转向测试和参数影响分析,帮助读者直观理解车辆转向特性,并提供了实用的模型扩展思路与常见问题排查技巧。

weixin_29047919的博客 215

几乎万能的安卓root方法,需adb能获取root权限(小白教小白)

此文章部分摘自 bingoCoder2013的博客 最近闲着没事,平常也喜欢搞搞机,搞机过程中遇到需要root权限是很麻烦的,各大root软件没有适配就无法root,现在有了一点收获,也是整理网上各大论坛出来的,用adb安装SuperSU。 我的环境: 瑞芯微RK3368 / Android 7.1.2 / SuperSU-v2.82-201705271822 1.必要前提 ad...

ZLDXXS的博客 9万+

2025年最新自动化/控制保研夏令营&预推免面试真题分享(东南大学苏州校区/华东理工/南航/天大)

笔者来2021级本科自动化专业,以下部分将介绍我在夏令营以及预推免期间发生经历和问题。

Control Everything 2584

权限相关的命令

su 切换用户(root用户切到其他用户不需要输密码,普通用户切到其他用户需要输密码) su - Ylem:切换到Ylem用户 chown 更改文件或文件夹的拥有者 chown 用户:用户组 文件/文件夹:chown wzx:root hades01【将hades01文件的拥有者改为用户组为root的wzx】 chown -R wzx:root hades02【将hades02文件夹及其文件夹内所有文件/文件夹的拥有者改为用户组为root的wzx】 chmod 更改文件/文件夹的权限 一个文件/

Orlando的博客 551

【Embabel Agent】生产级最佳实践与避坑指南

本文围绕架构师最关心的 8 大维度展开:测试策略(FakeOperationContext 实现 Action 级单元测试、Prompt 质量与敏感信息校验)、MCP 集成实战(STDIO/HTTP 双模式、自建 Server、Docker MCP 生态)、RAG 检索增强、OpenTelemetry 全链路可观测性与追踪、Docker/K8s 生产部署、API Key 管理与 @Tool 安全防护、模型选择/缓存/并行等性能优化,以及过度依赖 LLM、忽略错误处理等 8 大常见反模式避坑指南。

program哲学 309

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

nginx $mail->send()发送邮件报错_闲聊nginx之403

序言你也配看我的文章,我和你有何交情?什么样的问题最好玩?诡异的问题。。。什么样的技术最好玩?逻辑复杂的技术。。。什么样的人最令人厌恶?fucking pussy,有本事对刚。nginx 流下了没本事的泪水。一个问题的诞生,一般都只能看到表面现象,而实际的内在则是存在各种各样的问题,而解决一个问题,则是一个逐步判断的过程,根据一些现象,推测其可能出现的问题,...

weixin_39585761的博客 197

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

普通用户nginx访问不了_闲聊nginx之403

序言你也配看我的文章,我和你有何交情?什么样的问题最好玩?诡异的问题。。。什么样的技术最好玩?逻辑复杂的技术。。。什么样的人最令人厌恶?fucking pussy,有本事对刚。nginx 流下了没本事的泪水。一个问题的诞生,一般都只能看到表面现象,而实际的内在则是存在各种各样的问题,而解决一个问题,则是一个逐步判断的过程,根据一些现象,推测其可能出现的问题,...

weixin_35725410的博客 234

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

闲聊mysql的授权方式 -- 小黑框

话说纷纭 ,权限和授权到底是个毛东西? ******1.在企业中老板能看到下面所有的员工信息,而你不能不看到其他人的信息   --- 这就是权限,接下来我们开始解密权限 ********数据库的账号中有个最大的账号也叫初始账号:root   ********它所拥有的权限有查询用户信息等,修改,增加用户或者发布公告等  1.查看数据库账户有哪些: SELECT user,host FROM...

weixin_40428902的博客 396

闲聊:Android 平台网络游戏加速器(二)

上偏关于 Android 网络游戏加速器加速器得文章: ​​​​​​闲聊:Android 平台网络游戏加速器·一(科普文)_liulilittle的博客-优快云博客 本文只谈关于 Android 上面几个 “加速器” 适配器架构方案的方面得问题,目前 Android 上面实现加速器,主要有两个流派: 1、MPA架构(多进程架构) 2、MTA架构(多线程架构) 两个方案各有优缺点,基本适用MTA架构得基本是通过 Golang 实现的,没错就是 Google 那个 Go 语言来实现整个 “网络游戏加

liulilittle的博客 7950

docker迁移root目录

迁移原因:磁盘根目录满了,通过命令du -h --max-depth=1发现/var/lib/docker占用的空间过大把 Docker 的 root 目录(默认 )迁移到新位置,同时完整保留已有镜像、容器、卷,只需 4 步,零 downtime(Docker ≥ 20.10 验证可行): 1. 停止 Docker 服务 2. 迁移现有数据(保留权限、硬链接) -a = 保留权限、时间戳、软硬链接;-P = 进度+断点续传。 数据量大可先做第一次全量,再停 Docker 做第二次增量(几

liu_xue_xue的专栏 87

Ubuntu20.04LTS 安装配置

Ubuntu20.04配置安装,一套完整服务,满足开发需求

汝嫣兮的博客 3509

ubuntu18给当前用户安装cuda11.2 图文教程 、 配置cuDNN8.1 ——【一文读懂】

之前的一篇 Cuda10 安装博文 Linux服务器下给当前用户安装自己的CUDA | Cuda10.0 安装cuda11.2的原因 原因 基础条件 # 服务器当前,Cuda内核版本足够高,使得普通用户能够安装自己的 CUDA Version: 11.2.0 nvidia-smi NVIDIA-SMI 460.80 Driver Version: 460.80 CUDA Version: 11.2 为什么写了该博文 当前的Cuda在Linux服.

专注于AI领域前沿技术学习与分享:目标检测、图像修复、超分重建、AI工程化 4687
上一篇: MTK平台安卓手机性能测试方法
下一篇: 巧妇能为少米之炊(1)——Android下小内存下的生存之道
memoryjs
博客等级 码龄18年 240粉丝 113原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值