VC实现动画应用两则

Windows下Nginx闪退问题排查:端口占用、配置错误与权限解决 在Web服务器部署与运维中,服务启动失败是常见的故障场景,其背后往往涉及网络端口管理、配置文件语法解析、系统权限控制等基础技术原理。理解端口监听机制、进程绑定原理以及配置文件解析逻辑,对于保障服务稳定运行具有重要技术价值。特别是在Windows环境下,系统服务与第三方应用对默认端口的抢占、配置文件路径格式差异、以及运行时权限限制等典型问题,直接影响Nginx等服务的启动成功率。本文聚焦Nginx在Windows平台启动时闪退的实战排查,通过分析端口占用检测、配置语法验证、文件权限管理等高频故障点,系统化梳理 阅读详情
Windows(9x)支持的VC曾是应用最广的语言之一,现在仍然有着广大的用户。笔者是VC的“信徒”之一,在这上面耗费了不少时间,与将笔者的两则应用实例介绍给大家,希望能与大家共同交流。

---- 一.在VC中实现快速动画

---- 快速动画是指每隔一段很小的时间间隔就快速擦去原有画面,并重新画上新的画面的动画技术。快速动画成功的关键就在于擦去和重画的速度必须很快,否则画面就会有闪烁现象。

---- 在VB中制作快速动画比较简单,只要把窗体的AutoRedraw属性设置为true,再直接调用API函数BitBlt,画完一帧Refresh一次。但VC的窗体没有AutoRedraw属性,只要一使用BitBlt,窗体就会自动刷新,由于一帧画面往往要几次用到BitBlt,画面就闪烁起来了。解决的办法就是自己定义一个不可见的缓冲区,其大小应与目标窗体相同,先在缓冲区上把一帧的画面画完,再用一次BitBlt函数把缓冲区的图案贴到窗体上。请看下例: //在TForm1 *Form1;的后面添上这三句

Graphics::TBitmap *p;Graphics::TBitmap *q;int xx=0;//---------------------void __fastcall TForm1::FormCreate(TObject *Sender){p=new Graphics::TBitmap;//这存放的就是要贴到窗体上的小图案p->Handle=LoadBitmap(HInstance,"aaa");//从资源文件中载入小图案q=new Graphics::TBitmap;//定义缓冲区qq- >Width=Width;//使缓冲区的大小与窗体相同q- >Height=Height;PatBlt(q- >Canvas- > Handle,0,0,q- >Width,q- >Height,0);//把缓冲区的背景变为黑色}//-------???void __fastcall TForm1::FormDestroy(TObject *Sender){//程序结束时释放内存delete p;delete q;}//--------------------void __fastcall TForm1::Timer1Timer(TObject *Sender){//窗体上要加上一个Timer控件xx+=2;PatBlt(q- >Canvas- >Handle,0,0,Width,Height,0);//把缓冲区的背景变为黑色,同时擦去了旧的画面BitBlt(q- >Canvas- >Handle,xx,0,p- >Width,p- >Height,p- >Canvas- >Handle,0,0,SRCCOPY);//正在缓冲区上制作一帧的画面,这几句是不可见的BitBlt(q- >Canvas- >Handle,xx,50,p- >Width,p- >Height,p- >Canvas- >Handle,0,0,SRCCOPY);BitBlt(q- >Canvas- >Handle,xx,100,p- >Width,p- >Height,p- >Canvas- >Handle,0,0,SRCCOPY);BitBlt(q- >Canvas- >Handle,xx,150,p- >Width,p- >Height,p- >Canvas- >Handle,0,0,SRCCOPY);BitBlt(q- >Canvas- >Handle,xx,200,p- >Width,p- >Height,p- >Canvas- >Handle,0,0,SRCCOPY);BitBlt(q- >Canvas- >Handle,xx,250,p- >Width,p- >Height,p- >Canvas- >Handle,0,0,SRCCOPY);BitBlt(q- >Canvas- >Handle,xx,300,p- >Width,p- >Height,p- >Canvas- >Handle,0,0,SRCCOPY);BitBlt(Canvas- >Handle,0,0,Width,Height,q- >Canvas- >Handle,0,0,SRCCOPY);//把缓冲区的画面贴到窗体上}

---- 如果实际应用时,像上面的程序那样,把画动画的语句放在Timer控件的OnTimer事件中,就可能会有一个小问题。如果用户暂停了动画,窗体又正好产生了重画事件(比如窗体被最小化后又被恢复),那窗体上的画面就会消失。这是因为窗体被重画时,只画了窗体的通用部分,Windows并不知道原来的窗体上有自定义的画面。要想让Windows把画面恢复原样,必须把画动画的语句放在窗体的OnPaint事件中,Timer控件的OnTimer事件中只写决定图案位置的语句(如本例中的xx+=2;)和一句RePaint。修改后具体的程序我就省略了,大家可以自己完成。

---- 二.在VC程序中插入微型动画

---- 下面利用CImageList类保存数幅画面,利用Draw函数在一定的时间间隔播放出来,形成了类似GIF动画的效果。该方法可以在Window的客户区内、工具条上、状态条上播放动画。这里还给出了利用SetIcon函数在窗口标题栏上播放动画的方法。

---- (一)、原理

---- 在VC中有一个CImageList类可以以图像列表的方式管理图像,图像列表中的图像大小相同,索引以0为开始,每个图像都可以单独引用。Microsoft 的API提供了一系列的函数,您可以利用这些函数创建、销毁图像列表,可以显示图像、增加和删除图像,替代、合并和拖动图像。

---- CImageList 类提供了Windows图像列表通用控件功能。下面对本文用到的函数简要说明如下:

BOOL Create( int cx, int cy, UINT nFlags, int nInitial, intnGrow );

---- 该函数用于创建一个图像列表。 cx,cy 是每个图像的宽度和高度;nFlags是图像列表的类型,其值仅可包含一个ILC_COLOR值。其详细取值参见VC在线帮助。nInitial为图像列表最初含有的图像数目;nGrow为当图像数量需要改变时,每次动态增长的图像数。

BOOL Draw( CDC* pdc, int nImage, POINT pt, UINT nStyle );

---- 该函数用于显示一个图像。pdc为目标设备上下文的指针;nImage为要显示的图像索引;pt为图像显示的位置;nStyle为图像显示风格,详见在线帮助。

HICON ExtractIcon( int nImage );利用该函数可以得到一函数的句柄:int Add( HICON hIcon );该函数把一个图像加入图像列表中。

---- (二)、编程与实现

---- 首先,建立图表资源。在VC6.0中利用资源编辑器,建立几幅图表,IDI_ICON1、IDI_ICON2、IDI_ICON3......在编辑图标时选择Custom,将图标设置成大小为64X32。由于Windows的各个部件不完全相同,其实现方法也不完全相同,下面对在窗口不同位置显示动画的方法分别加以介绍。

---- 1. 在View类客户区绘制动画

---- 在类的定义文件中加入下列变量:

POINT pt1;//图像显示的位置int m_Play; //将要显示图像的索引void CreateImageList();//创建图像列表的函数CImageList m_ImageList1;//图像列表对象int m_ImageNumber; //图像列表中图像的总数目首先初始化pt1.m_Play、m_ImageNumber:CImageView::CImageView(){// TODO: add construction code herept1.x =1;pt1.y =1;m_Play=0;m_ImageNumber=0;}CreateImageList()的实现如下:void CImageView::CreateImageList(){m_ImageList1.Create (64,32,ILC_COLOR,5,2);HICON hIcon = ::LoadIcon(AfxGetResource-Handle(),MAKEINTRESOURCE(IDI_ICON1));m_ImageList1.Add(hIcon);m_ImageNumber++;hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2));m_ImageList1.Add(hIcon);m_ImageNumber++;hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3));m_ImageList1.Add(hIcon);m_ImageNumber++;//把您要播放的所有资源加入图像列表。}在OnCreate函数中设置计时器,并创建图像列表:int CImageView::OnCreate(LPCREATESTRUCTlpCreateStruct){if (CView::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code hereCreateImageList();SetTimer(1,500,NULL);return 0;}响应ON_TIMER消息,显示动画:void CImageView::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();if(m_Play >m_ImageNumber)m_Play=0;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);m_Play++;ReleaseDC(pDC);CView::OnTimer(nIDEvent);}

---- 最后别忘了在OnDestroy函数中,增加在窗口撤销时中止定时器的代码。

---- 2. 在状态条上显示动画

---- 由于状态条也是窗口,所以也可以在其上显示动画。在CMainFrame类中可以看到下列代码:

protected: // control bar embedded membersCStatusBar m_wndStatusBar;

---- 所以为了在状态条上显示动画,其编程代码应在CMainFrame类中加入。首先创建资源文件和图像列表类,具体方法和代码见View类客户区绘制动画一节,此处不再重复。下面给出ON_TIMER的响应函数:

void CMainFrame::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultif(m_Play >m_ImageNumber)m_Play=0;//如果图画为最后一个,显示第一幅图片CDC *pDC=this- >m_wndStatusBar. GetDC();ASSERT(pDC!=NULL);pt1.x=1;pt1.y =1;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);m_Play++;CFrameWnd::OnTimer(nIDEvent);}

---- 上述代码将在状态条左上方播放动画。

---- 3. 在工具栏上播放动画

---- 由于工具栏的性质与状态条差不多,其播放动画的方法也相似,下面给出ON_TIMER的响应函数:

void CMainFrame::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultif(m_Play >m_ImageNumber)m_Play=0;//如果图画为最后一个,显示第一幅图片CRect rect;CDC *pDC;pDC=this- >m_wndToolBar.GetDC();ASSERT(pDC!=NULL);this- >m_wndToolBar.GetClientRect(&rect);//获得显示有效区域pt1.x =rect.right -64; //将显示位置定在最右边pt1.y=1;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);m_Play++;CFrameWnd::OnTimer(nIDEvent);}

---- 上述代码将在工具栏右上方播放动画。但如仔细观察,动画的位置并不是靠近窗口最右边,这是因为工具栏的窗口有边界,采用如下方法,可以把画面移到窗口右边:

pDC=GetDC ();//获得CMainFrame的画图设备指针ASSERT(pDC!=NULL);this- >GetClientRect(&rect);pt1.x =rect.right-64 ;pt1.y=rect.top+3 ;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);这是因为工具栏占据的位置属于CMainFrame的客户区。

---- 4. 使图标变成动画

---- 在CWnd类中有一个函数:

HICON SetIcon( HICON hIcon, BOOL bBigIcon);可以改变窗口的图标,所以您可以通过使用该函数不断地改变图标使图标动起来,效果像GetRight一样。 在OnTimer函数中加入下列代码:SetIcon(m_ImageList1.ExtractIcon(m_Play),FALSE);

---- 就可以使图标动起来。当然为了使程序工作得更好,您最好重建一套图标资源。

VC 自定义消息 postmessage用法 VC 自定义消息 postmessage用法1. 在 resource.h文件添加如下代码 定一个自己的消息#define WM_MY_MESSAGE      WM_USER + 100       //---------------------by tyds2.在...view.h的文件添加如下://{{AFX_MSG(CPostmessageView)afx_msg void 阅读详情

相关推荐

VC++帧动画设计实例

这是一款使用帧变换的基于MFC程序设计的动画实例,其中做变换的为五幅ICON的图像。

VC++实现动画弹出/弹入式窗口

<br />俗话说"佛靠金装,人靠衣装",一个好的软件如果能配上精美的界面一定会让更多的用户认同它。喜欢上网的朋友对NetAnt(网络蚂蚁)这个软件一定不会陌生,它的下载速度,断点续传的功能都给我们留下了深刻的印象,同时它的软件界面也是相当棒的。在NetAnt的1.23版中,当下载任务完成或出错时,在主窗口的中央会以动画的方式展开一个窗口,报告当前下载的状况;当用户关闭窗口时,窗口又以收缩的方式关闭起来。那么这个动画窗口是怎样实现的呢?本例就来讨论一下在Visual C++中如何实现这种动画窗口。<br /

momosp的专栏 884

用VC++编写的一个动态效果的简单动画

该程序是用VC++编写的,运行时是一个球绕一个锥形物体旋转的动态视图,具有友好的界面,视觉效果较好~

看透木马

一、必备基础知识在介绍木马的原理之前有一些木马构成的基础知识我们要事先加以说明,因为下面有很多地方会提到这些内容。一个完整的木马系统由硬件部分、软件部分和具体连接部分组成。小知识:    “木马”全称是“特洛伊木马(Trojan Horse)”,原指古希腊士兵藏在木马内进入敌方城

forpersonal 1万+

vc++实现动画程序

vc++实现动画程序vc++实现动画程序vc++实现动画程序vc++实现动画程序

vc动画图形的制作

vc图形绘制的一个实例,帮助初学者们更好的理解vc的原理,操作简单

VC实现图片移动(动画效果)

VC实现图片移动(动画效果)以下代码显示如何实现透明图片(或者一般图片)在背景图上移动效果示例代码下载:VC实现图片移动.zip (请不要直接使用迅雷下载)http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC^M^M/VC实现图片移动(动画效果).zip注:VC6下编译通过一、原理简介:1.我们把所以图画到一个内存DC里,然后在Blt到屏幕,就是所谓的双缓冲了。2.在内存DC里画图时,先把背景图画到内存DC,再画上前景需要移动的图片就可以了二、具体

jacky_qiu的专栏 9720

VC 动画窗口特效.rar

VC 动画窗口特效,在打开窗口的时候不是一下显示,而是由左到右、由小变大的方式显示,增加了动态动画效果,动画速度和形式这个自己写代码可修改,截图所示是静止后的窗口效果,看不到动画效果哦。可由此示例制作软件的启动画面等效果。

[转]VC实现动画应用两则

VC实现动画应用两则 华北石油研究院 李莉莉 ---- Windows(9x)支持的VC曾是应用最广的语言之一,现在仍然有着广大的用户。笔者是VC的“信徒”之一,在这上面耗费了不少时间,与将笔者的两则应用实例介绍给大家,希望能与大家共同交流。 ---- 一.在VC中实现快速动画 ---- 快速动画是指每隔一段很小的时间间隔就快速擦去原有画面,并重新画...

weixin_33985507的博客 169

最新版IAR9.40和注册工具

IAR最新版的IDE在编译速度和代码提示等各个方面上都有很大提升,软件这个东西果然还是越新越好。之前的时候,IAR v9系列网上很多人都说能用,但是又没有把 IAR v9系列的注册方法写的很清楚,导致我一直都用注册老版本v8的方法去注册v9。结果注册后都会提示。

xue_nuo的博客 4万+

基于STM32的简易电压、频率、占空比测量仪

任务详解:我们需要实现三个功能: 第一个是测频率的功能,输入信号为频率为1kHz~10kHz的三种波形(方波、三角波、正弦波),这也是我们最常见的三种波形。幅度是不需要测量的,所以先不关心幅度。 第二个是电压报警功能,当输入信号的幅度超过15V时,我们需要报警(这里我用了一个红色LED当报警器,有条件的还可以加个蜂鸣器)并且把此时的信号幅度显示在OLED屏幕上。 第三个是通信方式的要求,需要有串口通信功能。 第四个是计算占空比的任务,这个任务的输入是幅度为1V~10V、频率为20Hz ~1kHz的方波,需要

weixin_43469377的博客 7254

VC实现动画应用两则 (转)

VC实现动画应用两则 (转)[@more@] VC实现动画应用两则 华北石油研究院 李莉莉 ---- windows(9x)支持的VC曾是应用最广的语言之一,现在仍然有着广大的用户。笔者是VC的“信徒”之一,在这上面耗...

csd3176的博客 161

Modem2G/3G/4G/5G:RFFE Driver(射频前端驱动):高通平台GRFC配置方法

文 | GentlemanTsao 文章目录前言1.什么是GRFC2.GRFC的配置流程概览3.msm_sig_info的配置与分析msm_sig_info Table位置:msm_sig_info Table示例:Table元素解读:rfc_msm_sig_info_type结构体signal typemsm_gpio |grfc_num:GPIO到GRFC的映射output_typefunction_select4._sig_cfg的配置与分析_sig_cfg table位置:_sig_cfg tabl

GentelmanTsao的博客 7315

断点用例两则

用例一:watchpoint (data breakpoint) watchpoint是GDB中为这类断点取的名字。它用于为断点设置特殊停止条件:当某表达式的值或内存地址的内容被修改,程序就暂停于修改操作处。在VC中叫做data breakpoint。 用例二:断点命令列表 它用于当断点命中,程序暂停时,自动执行一系列自定义动作,如打印当前函数的名字、调用栈等。VC中也有类似的功能,在断点的设置菜单"When Hit..."中。

duanpanda的专栏 329

windows系统下,如何为comfyui如何安装triton

​ 有些加速插件、模型在安装的时候,比如说sageattention的安装,就需要提前安装triton这个包,不过这个包有点特殊,windows下略微不好装,经常会装失败。 🎠如何安装 之前也有人介绍过,要到github上找个wheel文件,找到对应的版本安装下就好了。 问题是:https://github.com/woct0rdho/triton-windows/releases 这个git地址上,已经找不到wheel文件了... ​

聚梦小课堂 4505

三极管自激升压电路设计 - 从参数计算到实践验证

本文详细解析了三极管自激升压电路(焦耳小偷电路)的设计原理与实践方法。通过剖析自激振荡机制与三极管电流关系,指导读者完成从核心参数计算、关键元件选型到面包板搭建调试的全过程。文章重点阐述了如何利用电感、三极管等基础元件实现低压直流到高压的转换,是理解开关电源与电磁能量转换的绝佳实践项目。

weixin_29250573的博客 371

SDL在vc6下的编译

SDL在vc6下的编译 SDL在vc6下的编译 1,复制sdl.dll动态链接文件至你的工程目录文件下,如debug或release下. 2,在VC工具目录下面找到选项,设置其include和lib目录为其你所下载的相关目录; 3,

zhou-jimmy 2292

基于深度学习卷积神经网络的医学图像乳腺癌分类

一、项目背景与意义乳腺癌是女性最常见的恶性肿瘤之一,其早期发现和治疗对于提高患者的生存率和生活质量至关重要。然而,乳腺癌的诊断通常依赖于医生的经验和主观判断,这不仅耗时而且可能存在误差。近年来,深度学习技术特别是卷积神经网络(CNN)在图像处理领域取得了显著进展,为乳腺癌的自动分类提供了新的解决方案。本项目旨在利用深度学习卷积神经网络构建一套高效、准确的医学图像乳腺癌分类系统,辅助医生进行乳腺癌的早期诊断和治疗。二、技术实现。

2301_79810943的博客 977

[转自DFW离线包] 笑话两则:1、话剧:程序员过沟 2、pd国vb, vc, delphi, sdk

1、话剧:程序员过沟投稿:Flier本剧内容纯属虚构,如有雷同……HEHE……俺也没办法了。 话说某市街道改建,某某软件公司门口横七竖八挖了几条大沟。 一群程序员(SDK程序员赵某,VB程序员钱某,VC程序员孙某,DELPHI 程序员李某)下班从公司里出来,看到门前的几条沟,于是各显神通…… 门前第一条沟也就半米来宽,SDK程序员赵某二话没说,轻轻一跃跳了过去,看到其他人纷纷把

能力改变命运,心态决定一切! 2763

ESP32-S3双模CMSIS-DAP调试器:USB+WiFi无线调试方案

CMSIS-DAP是ARM生态中标准化的嵌入式调试协议接口,广泛用于Keil、IAR、STM32CubeIDE等开发环境。其核心原理是通过SWD/JTAG物理层实现目标芯片寄存器访问、内存读写与断点控制,依赖确定性时序和低延迟通信。传统DAPLink调试器受限于USB线缆束缚,而WiFi-USB-DAPLink项目将完整CMSIS-DAP v2协议栈移植至ESP32-S3平台,同时支持USB CDC直连与WiFi TCP远程通道,兼顾实时性与网络化部署能力。该方案无需主机驱动、兼容主流IDE,并支持多机并发

weixin_31185473的博客 373

Android系统去掉长按webview界面弹框中的分享功能

Android 系统去解决长按显示内容,去掉分享功能,不论那个界面,是所有界面都需要满足。如果仅仅去掉系统自带的,那么系统来处理如果客户自定义,部分App自定义的菜单项,不是调用系统的,那么还是需要应用去解决的。之前做过Editext,其实还需要去TextView,最难点的就是WebView中的HTML了 去分享功能了。WebView中涉及到分享功能菜单的界面,/***//***//***//***//***//***//***//***//**

十年饮冰,难凉热血 1020

C语言自动发消息代码,VC自定义消息postmessage用法(消息响应函数)

VC自定义消息postmessage用法(消息响应函数)分类:计算机等级|更新时间:2016-07-07|来源:转载VC 自定义消息 postmessage用法1. 在 resource.h文件添加如下代码 定一个自己的消息#define WM_MY_MESSAGE WM_USER + 100 //---------------------by tyds2.在...view.h的文件添加如下://...

weixin_39636645的博客 735

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VC自定义消息postmessage用法(消息响应函数)

Normal 0 7.8 磅 0 2 false false false ...

cixieku3433的博客 166

假人有限元模型

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

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

上一篇: VC实现对话框上信息的显示
下一篇: 从socket中读取一行语句
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值