设计启动屏幕

Android动画资源与启动屏幕设计实践 本文探讨了Android动画资源的使用和启动屏幕的设计实现。从单一动画的XML配置开始,展示了如何通过不同的插值器实现平滑的动画效果。随后,介绍了如何使用Java代码创建动态动画,并将其应用于具体视图。此外,文章详细讲解了如何处理动画生命周期事件,以及如何从启动屏幕平滑过渡到主菜单界面。 阅读详情

设计启动屏幕

       *********************************************************

版权声明:

 

此文章是本人正在撰写之.NET 4.0著作中的一部分,出于技术共享与交流目的而发布,作者金旭亮拥有全部版权。任何人及机构不得将其用于商业用途,如收费培训及出版同类技术书籍,有这方面需求的个人及培训机构请与本人直接联系。

 

本人联系方式:

JinXuLiang@bit.edu.cn  北京理工大学计算机学院 100081

更多技术与学习资源请关注作者博客:

http://blog.youkuaiyun.com/bitfan

 

                         金旭亮

                         2009.8.26

*************************************************************************

 

       许多大家熟知的应用程序都有启动屏幕(另一常见称呼为“启动窗体”),比如Word在启动时就会先呈现一张图片,然后再显示主窗体。

       另外一些应用程序具有更复杂的功能的启动窗体,比如著名的PhotoShop软件在启动屏幕上会动态扫描并装载用户安装的各种插件,并在启动窗体上显示出相关信息。

       在这一小节中,我们将介绍两种类型的启动屏幕:一种似于Word,仅快速显示一张图片以通知用户“程序已经运行,请稍候……”,另一种则类似于PhotoShop,在显示启动屏幕的同时,程序会在后台进行系统初始化。

       第一种方式的启动屏幕非常易于实现,甚至简单到不用写一行代码。

       第二种方式则比较复杂一些,详细分析一下:

       这种类型的应用程序在程序初起时都有两个线程,一个是主线程,通常负责在完成所有的系统初始化工作后显示主窗体,而启动屏幕则由另一线程负责创建并显示,通常要求将主线程所执行系统初始化的信息显示在启动屏幕上,很明显,这是一个两个线程同步及跨线程访问可视化控件的问题。如果读者阅读了本书前面的章节,则在这儿解决这个问题已没有任何难度,但仍然需要有一些技巧。

1在程序启动时显示一张图片

       这是最容易实现的一种启动屏幕。只要安装了.NET Framework 3.5 SP1以上的版本,可以不需要写一句代码。其步骤如下:

       1 在Visual Studio 2008 SP1或Visual Studio 2010中将启动屏幕图片加入到项目中。

       2 设定此图片的“Build Action”属性为“SplashScreen”(图 1):

 

 

 

图1 为启动屏幕图片文件设置“Build Action”

 

       编译并运行程序,可以看到你所选择的图片在屏幕上显示约0.5秒后自动消失,程序主窗体出现。

2 多功能程序启动屏幕的实现

       请看示例程序SplashScreenForWPF,程序运行时如图2所示:

 

 

图2 启动屏幕

 

       此示例程序在运行时启动了两个线程:主线程和UI线程,这两个线程所完成的工作如图3所示:

 

 

 

图3 两个线程的任务流程图

 

       图3中,双向箭头表示这两个线程的这两个处理工作之间存在着线程同步关系。下面简要叙述一下示例程序中的技术关键点。

       使用Visual studio创建WPF应用程序时,默认情况下会生成一个App.xaml和App.xaml.cs作为程序的入口点,但如果要显示启动屏幕,就不能使用它来启动程序了。

       首先删除这两个文件,然后,向项目中添加一个Program.cs类文件,此文件与Visual studio为控制台应用程序生成的结构一样,也是在Program类中放置一个Main()函数作为程序入口点。

       双击“解决方案资源管理器”中项目节点下的“Properties”节点,在打开的项目属性卡片中设置程序的启动对象为Program类,这将确保程序从Main()函数开始执行。

       下面向项目中添加一个将作为启动屏幕的窗体,可以根据你的美术天份自行设计,在本示例中,我就放了一个背景图片,一个TextBlock用于显示文字信息,一个ProgressBar用于显示工作进度。

       很重要的,由于启动屏幕的窗体需要被主线程访问,因此,需要给其添加一个公有的方法用于显示外部传过来的信息

 

        public void ShowProgress(int Value)

        {

            pgbProcess.Value = Value;

            tbInfo.Text ="已完成"+ Value.ToString() + "%";

        }

 

       所有的关键工作由运行于主线程中的Main()函数完成。

      

        [STAThread]

        static void Main()

        {

            //在一个独立UI线程中显示启动屏幕

            Thread th = new Thread(ShowSplashScreenThenMainWindow);

            th.SetApartmentState(ApartmentState.STA);

            th.Start();

            //启动初始化过程

            SystemInit();

        }

 

       注意需要设置线程模式为STA,这是为了与Windows Form相兼容而一直沿用下来的。

       上述代码中的线程函数ShowSplashScreenThenMainWindow()负责创建启动屏幕和显示主窗体:

 

    static winSplash win = null; //引用启动屏幕对象

    static void ShowSplashScreenThenMainWindow()

    {

            win = new winSplash();

            win.ShowDialog();

            //显示主窗体

            Application myApp = new Application();

            myApp.Run(new winMain());

    }

 

       注意上述代码中通过调用ShowDialog()方法显示启动屏幕并阻塞当前UI线程的进一步执行。

       主线程在启动UI线程之后,调用SystemInit()方法开始系统初始化过程,在此可以放置各种初始化代码,然后使用win.Dispatcher.Invoke和BeginInvoke方法在启动屏幕上显示信息。

       这里面的关键之处在于,SystemInit()方法在执行时必须确保启动屏幕窗体已经显示并可以接收外界传入的信息,为此,示例程序设置了一个ManualResetEvent对象作为线程同步对象,并将其初始化为non-singaled状态:

 

     public static ManualResetEvent mre = new ManualResetEvent(false);

 

       在SystemInit()方法的开头,调用

 

    mre.WaitOne();

 

       阻塞等待通知。

       而在启动屏幕的Loaded事件(它表示窗体已初始化完成)中触发ManualResetEvent对象的状态转换:

 

       private void Window_Loaded(object sender, RoutedEventArgs e)

        {

            //通知主线程自己已经启动完毕

            Program.mre.Set();

        }

 

       当系统初始化完成,SystemInit()方法再通过win.Dispatcher.BeginInvoke方法向UI线程提交一个“关闭启动屏幕”的工作项请求,从而导致UI线程关闭启动屏幕,进而创建应用程序主窗体并显示,应用程序就可以被用户所访问了。

       上面就是本示例的所有技术关键点,其余的技术细节请自行阅读源码。

       这个示例采用WPF开发,但其中所介绍的技巧完全可用于Windows Form。笔者开发了对应的Windows Form,其示例项目名为SplashScreenForWinForm,供读者参考。

 

 

===============================

 

下载本文示例源码和PDF文档

 

       (注:给的示例项目为VS2010格式,使用VS2008的读者请新建一个空白的Windows Form或WPF项目,然后手工向其中追加文件)。

Java桌面应用EXE启动器设计与实现(含飞溅屏幕功能) 对于高级用户,可以使用C/C++编写自定义EXE启动器,以实现更高的灵活性和控制能力。以下是一个简单的自定义启动器流程图:graph TDA[启动EXE] --> B[检测系统环境]B --> C{是否找到JRE?C -->|是| D[使用系统JRE启动JVM]C -->|否| E[使用内置JRE启动JVM]D --> F[加载Java类]E --> FF --> G[调用main方法]G --> H[运行Java应用] 阅读详情

相关推荐

两个多线程小程序

多线程 求质数 返回数组中的最大值 bool isPrime(long x) { if (x <= 1) return false; if (x == 2) return true; for (long i = 2; i <= ceil(sqrt((long double)x));i++) if (x%i == 0) return false; return true; } DWORD WINAPI findPrime(void* p) { long result=0; int l = stc(p)->lower, u = stc(p)->uper; int t_id=GetCurrentThreadId(); for (int i = l; i <= u;i++) if (isPrime(i)) { result++; } DWORD dReturn = WaitForSingleObject(mutex_mul_result_h, INFINITE); mul_result += result; ReleaseMutex(mutex_mul_result_h); //EnterCriticalSection(&gCRITICAL_SECTION_Printf); //printf("%d,%d,%d,%d\n", l, u, result,t_id); //fflush(stdout); //LeaveCriticalSection(&gCRITICAL_SECTION_Printf); return 0; } //dispatcher void dispatch() { DWORD Status; timer tm; tm.start(); //srand(time(NULL)); long step = STEP;//ceil(double(TEST/10)); handlenum = 0; for (int i = 1; i <= TEST;) { i += step; handlenum++; } handle_array=new HANDLE[handlenum]; Thread_id = new DWORD[handlenum ]; arg = new FP_ARG[handlenum]; InitializeCriticalSection(&gCRITICAL_SECTION_Printf); mutex_mul_result_h = CreateMutex(NULL, false, mutex_mul_result); handlenum = 0; for (int i = 1; i <= TEST;) { arg[handlenum].lower = i; arg[handlenum].uper = (i + step-1>TEST) ? TEST : i + step-1; handle_array[handlenum]=(HANDLE)CreateThread(NULL, 0, findPrime, &arg[handlenum], 0, &Thread_id[handlenum]); /*EnterCriticalSection(&gCRITICAL_SECTION_Printf); printf("lower:%d uper:%d thread_id:%d\n", arg[handlenum].lower, arg[handlenum].uper,Thread_id[handlenum]); LeaveCriticalSection(&gCRITICAL_SECTION_Printf);*/ i += step; handlenum++; } tm.stop(); Sleep(1000); printf("there are %d threads\n", handlenum); printf("the multithreads use %f msc\n", tm.read()); } //the number of 1-1000000 Primenumber void s_finePrime() { timer tm; long result = 0; tm.start(); for (int i = 1; i <= TEST; i++) if (isPrime(i)) result++; tm.stop(); printf("Single thread result is %d\n", result); printf("Single thread use %f msc\n", tm.read()); } int _tmain(int argc, _TCHAR* argv[]) { dispatch(); WaitForMultipleObjects(handlenum, handle_array, true, INFINITE);//不起作用 printf("the multithreads reslut is %d\n", mul_result); CloseHandle(mutex_mul_result_h); DeleteCriticalSection(&gCRITICAL_SECTION_Printf); s_finePrime(); system("pause"); return 0; }

使用多线程制作启动窗体和登录窗体

对程序简单说明一下,MainForm是主窗体,需要从数据库读取数据来生成界面,程序运行时,首先显示SplachScreenForm,并在SplachScreenForm中执行MainForm中的生成界面的方法。如果MainForm界面生成成功,则显示LoginForm,否则退出应用程序。LoginForm中,用户登录成功,则显示MainForm,取消登录,则退出应用程序。总之,在MainForm显

chenkeliang1990的专栏 967

多线程实现软件启动界面

用C#实现的软件启动界面(其他语言类似),采用单独的线程加载软件资源,(不同于采用两个窗体和Timer组件实现的启动界面,两个窗体的容易造成UI无法响应),避免了在主线程中加载资源造成的窗体UI无法响应,并同时对软件启动窗体的进度条进行修改,软件资源加载完毕后启动窗体消失,启动软件主界面,类似于photoshop myelicpse等等的启动。

桌面软件开发框架大赏

本文基于海康威视桌面端技术专家刘晓伦在「**RTC Dev Meetup • 杭州站丨大前端时代的业务架构和跨端实践**」活动中分享内容二次整理。

声网的博客 9126

中移物联ML307C模组OPENCPU笔记2

本文介绍了如何编译和运行一个DEMO程序,以官方SDK为例。

weixin_43700831的博客 1886

Ego-Planner实战避坑指南:从环境搭建到仿真运行

本文详细介绍了在Windows系统下,通过WSL2搭建Ego-Planner无人机路径规划算法开发环境的完整流程与实战避坑指南。内容涵盖ROS Noetic安装、第三方依赖库(如Ceres Solver)编译冲突解决、Realsense SDK版本降级处理,以及Gazebo仿真与真机调试的常见问题,旨在帮助开发者高效完成环境配置并成功运行仿真。

weixin_29232507的博客 700

Qt中多线程的使用

在进行桌面应用程序开发的时候, 假设应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,多个线程各司其职,不仅可以提高用户体验还可以提升程序的执行效率。默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新子线程负责后台的业务逻辑处理,子线程中不能对窗口对象做任何操作,这些事情需要交给窗口线程处理。

houxian1103的博客 8323

高频面试题-项目介绍篇

聊聊如何介绍项目经历。

m0_73359763的博客 1908

Windows程序设计---多线程1

应用程序被装载到内存之后就形成了进程,这是上一章重点讨论的话题。但是程序在内存中是如何执行的呢?这就涉及到了代码的执行单元——线程。本章就线程的创建、多线程处理展开介绍。本章首先介绍创建线程的方法和线程内核对象,接着详细分析产生线程同步问题的根本原因,并提出一些解决办法。为了扩展多线程的应用和为读者提供更多的实际机会,本章还重点讨论了线程局部存储和CWinThread类的设计,这也是设计框架程

坚持,才是力量.老实做人,踏实做事. 851

FileZilla Server 1.2.0 TLS证书过期问题

FileZilla Server TLS证书过期后重新生成

Wigle的备忘录 7527

GNSS/INS松组合导航实战:如何用卡尔曼滤波提升定位精度(附MATLAB代码)

本文深入探讨了GNSS/INS松组合导航的工程实践,详细阐述了如何利用卡尔曼滤波算法融合卫星与惯性数据以提升定位精度。内容涵盖从仿真环境搭建、误差状态卡尔曼滤波器(ESKF)设计,到状态与观测方程实现、噪声参数调试及常见问题排查的全过程,并提供了可直接运行的MATLAB代码,为开发高精度、鲁棒的组合导航系统提供实战指南。

weixin_29057163的博客 165

人群中看到你的第一眼 -- 启动屏幕设计

原文:人群中看到你的第一眼 -- 启动屏幕设计 背景 用户打开应用后看到的第一个画面就是启动屏幕,虽然说启动屏幕做的好坏对应用的最终功能影响不大,但是对用户来说,第一印象非常重要;另外,用户每次运行应用也都会看到启动屏幕,因此,启动屏幕的地位也还是挺重要的。 应用在显示主界面前,需要初始化一些数据,复杂一些的应用,其初始化用时也会长一些,可能需要初始化一些...

weixin_34015566的博客 131

广义平均(Generalized Mean, GeM)

本位介绍了广义平均操作的定义和简要推导,帮助大家理解其含义。

qq_45802280的博客 4547

XE7 C++Builde +Android 设计APP个人图像和启动屏幕

Project-》Options,Application这里右侧,加载自己的客制化图像 同样的,上图右侧Include splash image及下方这几项就是启动屏幕的设计项。 Splash Gravity 选择fill_horizontal。

地瓜哥哥的博客 623

【黑马点评】项目知识点及面经整理

【黑马点评】项目知识点及面经整理

m0_52031708的博客 6605

第二节_PySide6项目创建流程介绍、手把手教学打包EXE可执行文件

本文详细介绍了如何使用PySide6创建一个带UI界面的Python程序,并将其打包成exe可执行文件。首先,通过Pycharm创建项目,并使用PySide6-Designer工具设计UI界面,将生成的ui文件转换为Python代码。接着,编写主程序,加载UI界面并实现功能,如加载图片、设置图标等。最后,通过资源文件管理图片资源,并确保UI界面的更新能同步到主程序中。整个过程涵盖了项目创建、UI设计、代码编写及资源管理,适合初学者学习如何将Python程序打包为可执行文件。

su桥木的博客 2558

Retro Rampage标题屏幕设计:游戏启动流程与UI动画实现

Retro Rampage是一款使用Swift从零构建的复古风格第一人称射击游戏,其标题屏幕设计融合了经典像素美学与流畅动画效果,为玩家提供沉浸式的第一印象。本文将详细解析游戏标题屏幕的设计理念、实现流程以及核心UI动画技术,帮助开发者掌握复古游戏界面的设计精髓。 ## 标题屏幕视觉设计与资产准备 Retro Rampage的标题屏幕采用了典型的复古FPS游戏风格,以低多边形像素纹理构建场景深

gitblog_00044的博客 770

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

U-Boot启动流程探秘:屏幕初始化背后的时序战争与设计哲学

本文深入探讨了U-Boot在T113平台上的启动流程,重点分析了屏幕初始化过程中的时序挑战与设备树管理。通过解析uboot启动序列、fdt set命令动态修改设备树等关键技术,揭示了多屏幕切换场景下的设计哲学与优化策略,为嵌入式系统开发者提供了一套解决时序依赖问题的实践方案。

wdx01234567的博客 160

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VB.Net程序设计:最简单的初始屏幕(程序启动画面)

做一个系统,打开系统时候要加载和检测一些数据。想到要用像打开Photoshop那样有一个初始屏幕,有提示加载数据情况。感觉很棒。在网上找了许多代码。那些感觉都是特别复杂。或用到事件委托,或消息机制,或单独进程等等。在CodeProject网站上也有一篇比较好和简单的关于初始屏幕的文章。 见文章最后。自己就开始做一个。在你的项目里面,新建一个窗体:FlashScn.vb(名字随便)作为程序启动画

VB.Net+Android.java 6900

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

上一篇: 一道可以成为.NET面试“必杀题”的“简单问题”
下一篇: 墙脆脆?!
bitfan
博客等级 码龄26年 4298粉丝 243原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值