Android Launcher桌面循环

Android12 Launcher3客制化:添加非抽屉模式(可动态切换)、图标自动补位功能 网上的很多博客这个地方都有点不太一样,PendingInstallShortcutInfo都是 InstallShortcutReceiver.PendingInstallShortcutInfo的,但是Android12的代码里面根本就没有InstallShortcutReceiver这个类了,所以全局搜索PendingInstallShortcutInfo发现ItemInstallQueue才有这个类,并且是私有的,我们需要把它改成public。这时候小部件就会消失了,所以我这边还是采取方案二。 阅读详情

桌面循环的Launcher主要是需要通过canvas的translate(dx, dy)来实现。比如现在有5屛,当屏幕向右滑动的时候,当mCurrentScreen=4(下标从0开始)时,继续往右滑动,这个时候需要判断该桌面是否需要循环,如果需要循环需要对代码做特殊处理,详细见代码:

修改1:Worksapce的onTouchEvent()方法:

               if (deltaX < 0) { // left
                    if (mTouchX > 0) {
                        mTouchX += Math.max(-mTouchX, deltaX);
                        mSmoothingTime = System.nanoTime() / NANOTIME_DIV;
                        invalidate();
                    } else if (true && mTouchX > -getWidth()) {
                        mTouchX += deltaX;
                        mSmoothingTime = System.nanoTime() / NANOTIME_DIV;
                        invalidate();
                    }
                } else if (deltaX > 0) { // right
                    /*final float availableToScroll = getChildAt(getChildCount() - 1).getRight() -
                            mTouchX - getWidth();*/
                    final float availableToScroll = getChildAt(getChildCount() - 1).getRight() -
                            mTouchX - (true ? 0 : getWidth());
                    if (availableToScroll > 0) {
                        mTouchX += Math.min(availableToScroll, deltaX);
                        mSmoothingTime = System.nanoTime() / NANOTIME_DIV;
                        invalidate();
                    }
                } else {
                    awakenScrollBars();
                }

修改2:Workspace的onTouchEvent()的up处。

        case MotionEvent.ACTION_UP:
            if (mTouchState == TOUCH_STATE_SCROLLING) {
                final VelocityTracker velocityTracker = mVelocityTracker;
                velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
                final int velocityX = (int) velocityTracker.getXVelocity(mActivePointerId);
                
                final int screenWidth = getWidth();
                final int whichScreen = (mScrollX + (screenWidth / 2)) / screenWidth;
//                final int whichScreen = (int)Math.floor((getScrollX() + (screenWidth / 2.0)) / screenWidth);
                final float scrolledPos = (float) getScrollX() / screenWidth;
                
                if (velocityX > SNAP_VELOCITY && mCurrentScreen > (true ? -1 : 0)/*mCurrentScreen > 0*/) {
                    // Fling hard enough to move left.
                    // Don't fling across more than one screen at a time.
                    final int bound = scrolledPos < whichScreen ?
                            mCurrentScreen - 1 : mCurrentScreen;
                    snapToScreen(Math.min(whichScreen, bound), velocityX, true);
                } else if (velocityX < -SNAP_VELOCITY && mCurrentScreen < getChildCount() - (true ? 0 : 1)/*mCurrentScreen < getChildCount() - 1*/) {
                    // Fling hard enough to move right
                    // Don't fling across more than one screen at a time.
                    final int bound = scrolledPos > whichScreen ?
                            mCurrentScreen + 1 : mCurrentScreen;
                    snapToScreen(Math.max(whichScreen, bound), velocityX, true);
                } else {
                    snapToScreen(whichScreen, 0, true);
                }
            }
            mTouchState = TOUCH_STATE_REST;
            mActivePointerId = INVALID_POINTER;
            releaseVelocityTracker();
            break;



修改3:Worksapce的snapToScreen:
把whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));改为--->whichScreen = Math.max((true ? -1 : 0),
Math.min(whichScreen, getChildCount() - (true ? 0 : 1)));

修改4:Worksapce的computeScroll:
     else if (mNextScreen != INVALID_SCREEN ) {
            if (mNextScreen == -1 && true) {
                mCurrentScreen = getChildCount() - 1;
                scrollTo(mCurrentScreen * getWidth(), getScrollY());
                updateWallpaperOffset();
            } else if (mNextScreen == getChildCount() && true) {
                mCurrentScreen = 0;
                scrollTo(0, getScrollY());
                updateWallpaperOffset();
            } else {
                mCurrentScreen = Math.max(0, Math.min(mNextScreen, getChildCount() - 1));
            }
。。。。

最后最重要的是他的dispatchDraw,当scroller的坐标为(0,0)的时候,我们是滑动不了的,这个时候我们可以通过translate来移动坐标原点,到达移动的效果。具体的修改如下:
if (fastDraw) {
                drawChild(canvas, getChildAt(mCurrentScreen), getDrawingTime());
            } else {
                long drawingTime = getDrawingTime();
                int width = getWidth();
                float scrollPos = (float) getScrollX() / width;
                boolean endlessScrolling = true;

                int leftScreen;
                int rightScreen;
                boolean isScrollToRight = false;
                int childCount = getChildCount();
                if (scrollPos < 0 && endlessScrolling) {
                    leftScreen = childCount - 1;
                    rightScreen = 0;
                } else {
                    leftScreen = Math.min( (int) scrollPos, childCount - 1 );
                    rightScreen = leftScreen + 1;
                    if (endlessScrolling) {
                        rightScreen = rightScreen % childCount;
                        isScrollToRight = true;
                    }
                }

                if (isScreenNoValid(leftScreen)) {
                    if (rightScreen == 0 && !isScrollToRight) { // 向左滑动,如果rightScreen是0
                        int offset = childCount * width;
                        canvas.translate(-offset, 0);
                        drawChild(canvas, getChildAt(leftScreen), drawingTime);
                        canvas.translate(+offset, 0);
                    } else {
                        drawChild(canvas, getChildAt(leftScreen), drawingTime);
                    }
                }
                if (scrollPos != leftScreen && isScreenNoValid(rightScreen)) {
                    if (endlessScrolling && rightScreen == 0  && isScrollToRight) {
                         int offset = childCount * width;
                         canvas.translate(+offset, 0);
                         drawChild(canvas, getChildAt(rightScreen), drawingTime);
                         canvas.translate(-offset, 0);
                    } else {
                        drawChild(canvas, getChildAt(rightScreen), drawingTime);
                    }
                }
            }
 
private boolean isScreenNoValid( int screen) {
   return screen >= 0 && screen < getChildCount();
}

这样最后就完成了桌面的循环滚动哦。。。

这里还额外的需要修改几个地方:

在抽屉里拖动图标到桌面或者是从一个桌面拖动到其他桌面需要调用scrollLeft和scrollRight,所以我们需要稍作修改,如下

public void scrollLeft() {
        clearVacantCache();
        final int dest = true ? -1 : 0;
        if (mScroller.isFinished()) {
            if (mCurrentScreen > dest ) snapToScreen(mCurrentScreen - 1);
        } else {
            if (mNextScreen > dest ) snapToScreen(mNextScreen - 1);            
        }
    }

    public void scrollRight() {
        clearVacantCache();
        final int dest = true ? 0 : 1;
        if (mScroller.isFinished()) {
            if (mCurrentScreen < getChildCount() - dest ) snapToScreen(mCurrentScreen + 1);
        } else {
            if (mNextScreen < getChildCount() - dest ) snapToScreen(mNextScreen + 1);            
        }
    }
 
以上就是修改Worksapce实现桌面循环滚动需要更改的地方,如以后发现有什么不足的地方,再额外补充。

这里想上传一个demo的,但是我第一次写这个博客,不知道哪里上传,如果有需要的,可以找我要。
  

Android P 上Launcher3 中实现两种方式替换桌面图标 1.第一种方案,是通过桌面应用的包名,跟图片的包名进行匹配,获取一个图片的资源ID 麻烦点就是需要手动修改图片的名称,跟包名一直。 代码:src/com/android/launcher3/IconCache.java 这是第一次加载DB走的,就是开机会走到这 protected CacheEntry cacheLocked( @NonNull Com... 阅读详情

相关推荐

android11.0 Launcher3 高端定制之循环滑动

待机界面可以向左、向右循环切换页面 效果图 修改清单 packages/apps/Launcher3/res/values-zh-rCN/strings.xml packages/apps/Launcher3/res/values/config.xml packages/apps/Launcher3/res/values/strings.xml packages/apps/Launcher3/res/xml/launcher_preferences.xml packages/apps/Launc

cczhengv 1549

android L1 版本Launcher桌面循环滑动

每个版本的Launcher都有很大的变动,经过测试5.1的launcher可以完美在6.0环境运行 遇到这个需要桌面循环滑动的需求 我就又开始偷懒了 废话不多说 直接上代码 具体过程就不分析了 直接在这里解决问题路径Launcher3\src\com\android\launcher3\Workspace.java */ public Workspace(Context contex

tonyechen的博客 2165

android launcher3源码 循环翻页

android laucnher3 源码,仅供学习使用。

Android系统:Launcher知识点总结

一:如何定制Launcher主菜单中应用程序图标的显示顺序? 请修改res/xml/default_toppackage.xml文件: <toppackages xmlns:launcher=" http://schemas.android.com/apk/res/com.android.launcher2bird13gb"> <app launcher:topPackageName="c

LYJ的IT生活 2355

android4.4 launcher3 循环滑动

安卓4.4 launcher3源码桌面无法循环滚动,修改pagedView实现

Launcher修改(实现左右循环滑动、壁纸的平滑过渡,带文档)

因为公司需要修改Launcher 类似于三星的UI 因为网上资源这方面比较少 经过努力终于花了一个月整好 以上是Launcher主界面的修改以及注释文档、源码,希望对有需要的朋友,帮助。

Android launcher3 循环桌面

最近接了个需求,要在现有的桌面上加上循环桌面的功能,刚开始也是一头雾水,所以静下心来把PagedView.java 绘制看了一遍,然后又找一些资料;主要有以下几个修改点: 以下以android 7.1.1 的 launcher3代码为例 其它版本都一样 先看下效果: 1、scrollTo方法 里面对滑动超过当前页数的前一页和后一页做了处理(绘制了超出效果) @Override publ

lmjssjj的专栏 2911

Laucher 上下左右循环滑动workspace代码修改(新)

(之前上传的代码有bug,经过作者整理和修改,fix掉部分bug) Android Launcher关于屏幕滚动管理的类Workspace,可以在此下载: http://www.oschina.net/code/explore/android-2.2-froyo/com/android/launcher2/Workspace.java 但是,此类只能管理固定数目的屏幕,且不能循环滚动。 而且,目前网上搜到的众多修改方案,对滚动处理不够平滑:边界上的滑动效果与其他不一致,或闪屏。 本文作者,在Workspace基础上,增减修改得到此代码。功能是循环滑动界面,同时实现左右循环和上下循环。 关键技术是理解清楚“onInterceptTouchEvent和onTouchEvent”的关系,以及computeScroll和dispatchDraw等。 可以在百度中搜索关键词获取答案。

Neo-Launcher桌面网格设置:如何自定义布局和图标大小的完整教程

想要个性化你的Android手机主屏幕吗?Neo-Launcher作为一款高度可定制的Android启动器,提供了强大的桌面网格设置功能,让你可以完全掌控主屏幕的布局和图标大小。这篇完整的教程将带你深入了解如何自定义Neo-Launcher的桌面网格布局和图标大小,打造属于你的个性化手机界面。😊 ## 📱 什么是Neo-Launcher桌面网格设置? Neo-Launcher的桌面网格设置

gitblog_01091的博客 1014

Android Launcher4.0滑动浅析及循环滚动实现.pdf

基于4.0源码,实现Launcher循环滚动,待机桌面快捷方式的循环翻页,循环滚动时桌面图标跟随手指移动等功能。有兴趣的朋友可以下载了看看。

【ESP32】1.编译、烧录、创建工程

本文介绍了在VSCode中搭建ESP32开发环境并烧录"Hello World"工程的过程。首先通过串口工具成功下载固件后,解决了OpenOCD报错问题。针对头文件无法识别的问题,修改了c_cpp_properties.json配置文件,调整了编译器路径和IntelliSense模式。文章还详细说明了创建新工程的步骤,包括选择芯片型号和项目模板,并验证了串口打印功能。最后提醒在项目构建时要等待完成,避免文件缺失。整个流程涵盖了环境搭建、代码烧录、调试及新项目创建等关键环节。

梁山1号 1485

Android setting中添加桌面循环滑动选项

首先,我前面有一片博客写的是android桌面(launch2)循环滑动,这里想加以改进,因为在我们所使用的手机中已经在“设置”的“辅助功能”中有选择是否“桌面循环”。 这里我想做的就是在原生的android源码上添加这一功能,主要还是以学习为主。 看这个之前我希望你们看一下android桌面(launch2)循环滑动这篇博客。 首先我是在做好了桌面循环之后去

xiaxiangnanxp1989的专栏 2468

RM机器人麦轮底盘实战:从零搭建到PID调参全记录(附避坑指南)

本文详细记录了RM机器人麦轮底盘从零搭建到PID调参的全过程,涵盖硬件组装、开发环境搭建、底盘解算和PID调参等关键步骤,并附有实用的避坑指南。特别针对麦轮控制、底盘解算和电机调试等核心问题提供了专业解决方案,帮助开发者快速提升机器人性能。

bush的博客 379

android桌面画面循环滑动

Android 的原生代码中的Launch2的一大功能就是支持左右滑动,但是好像它不能支持循环滑动,初想一下好像比较简单,那就是在获取第几屏的时候取余,差不多就可以实现,但是事实上源码里面会有很多误导,那么我就分享一下我分析Android2.3.3的Launch2源码并实现可以循环滑动桌面:首先我们去找到代码的位置:。。。。/package/app/Launch2/src/com/android/...

weixin_30828379的博客 459

ANSYS Twin Builder实战:5步搞定数字孪生模型部署(附ROM配置技巧)

本文详细解析了ANSYS Twin Builder在数字孪生模型部署中的实战应用,重点介绍了ROM(降阶模型)配置技巧。通过5个关键步骤,从环境搭建到工业部署,帮助工程师高效实现高精度三维仿真到轻量化数字孪生的转化,提升预测性维护和系统仿真效率。

weixin_27330481的博客 661

一文讲清CAN和CANFD的区别

本文将从技术原理、协议特性到应用场景,深度解析两者的核心差异。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 3212

Android进阶——解密笔记,阿里资深Android开发带你搞懂Framework

SystemServer进程主要用于创建系统服务,例如AMS、WMS、和PMS都是由它来创建的。 Service进程启动 启动Binde线程池,这样就可以与其他进程进行通信。 创建SystemServiceManager,用于对系统的服务进行创建、启动生命周期管理。 启动各种系统服务(引导服务、核心服务、其他服务)。 时序图 4. Launcher启动过程 Launcher 当系统启动到最后一步时,会启动一个应用程序,也就是我们通常看到的应用桌面,它被称作Launcher,在L

m0_64319496的博客 254

8、硬件工程师笔试面试知识器件篇——二极管(2025版本)

当二极管正向偏置时(阳极相对于阴极为正电压),PN结内部的电场减小,允许电子和空穴复合,形成电流。而当二极管反向偏置时,PN结的电场增强,阻止电流通过。在接触区域,P型半导体中的空穴和N型半导体中的自由电子会相互扩散和复合,形成一个没有自由载流子的耗尽区。在设计电子电路时,平衡二极管的正向电压降(Vf)和最大电流(I)是一个重要的考虑因素,因为这两者直接影响电路的性能和效率。通过这些步骤,可以确保在设计电子电路时选择的二极管能够安全地处理预期的最大正向电流和最大反向电压,从而提高电路的可靠性和安全性。

XU157303764的博客 3504

Octopi Launcher:填补 Nova Launcher空白,开启安卓主屏幕精细定制新时代!

Octopi Launcher提供了丰富的自定义功能,多到你可以花费大量时间,将Android主屏幕打造得完全符合你的心意。作者发现Octopi Launcher的动画效果流畅且出色。你还能自定义面板,增加行数、更改透明度、设置更圆润的边角等等。你也可以调整图标大小,这很棒,因为这样能让面板更小。(作者喜欢手机主屏幕简洁的外观。)这还是在购买专业版之前,现在购买后可选项就更多了。

m0_46163918的博客 62

15、目标检测模型的评估指标与YOLO算法解析

本文详细解析了目标检测模型的评估指标,包括精确率、召回率、AP、mAP及IoU的定义与作用,并深入介绍了YOLO算法的核心原理与推理流程。从网格划分、锚框引入到边界框细化与后处理,全面阐述了YOLO如何实现快速准确的目标检测。同时总结了YOLO在智能安防、自动驾驶和工业检测等领域的应用,并展望了其未来在准确性提升、多类别支持和技术融合方面的发展趋势。

work3的博客 66

5、Raspberry Pi CPU架构与多线程编程详解

本文详细介绍了Raspberry Pi的CPU架构(包括ARMv6Z、ARMv7-A和ARMv8-A),通过/proc/cpuinfo解析硬件信息,并深入探讨了多线程编程的核心技术。内容涵盖pthread库的使用,如线程创建、属性设置、等待与分离、线程同步机制(互斥锁),以及实际应用场景如多媒体处理和网络服务。同时强调了线程安全、死锁预防和资源管理等关键注意事项,帮助开发者在Raspberry Pi上构建高效稳定的多线程应用。

sre5engineer的博客 95

Android应用启动流程

最近看皇叔的《Android进阶解密》,前三张对Android启动讲的很明白,感觉把以前零散的知识点都穿起来了,推荐大家入手一本,非常值得。 Android应用启动流程 点击桌面应用图标,Launcher进程将启动Activity(MainActivity)的请求以Binder的方式发送给了AMS。 AMS接收到启动请求后,交付ActivityStarter处理Intent和Flag等信息,然后再交给ActivityStackSupervisior/ActivityStack 处理Activity进栈相关

E的博客 353

Xilinx FPGA平台GTX简易使用教程(四)GTX IP核配置教程

干货来了,GTX IP核配置,搬砖全靠它~~

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

安卓应用冷启动流程走读源码(Android 15)

大纲Android触控事件处理机制Zygote进程启动和应用进程创建流程Handler消息机制AMS的Activity组件管理应用Application和Activity组件创建与初始化应用UI布局与绘制RenderThread渲染SurfaceFlinger合成显示。

xunyan6234的博客 994

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android开机动画多长时间_Android开机动画原理分析

Android系统开机动画, 是由bootanimation进程将多桢的图片按次序循环播放,在屏幕上形成的动画效果。这里介绍一下bootanimation的原理。1. bootanimation启动bootanimation是一个本地进程,代码由c++编写,它由init进程启动/init.rcservice bootanim /system/bin/bootanimation class core...

weixin_34829543的博客 1359

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

gmailToyou
博客等级 码龄15年 5粉丝 1原创
评论 36
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值