WPF的几个关键点

C#Winform向WPF过渡入门(二) 总目录:https://www.v2know.com/MainPage/Category/WPF 好的,直接开始说wpf的前台,也是xaml语言的注意点: 1. Window标签里面只允许存在一个Grid标签 即一个窗口只能包含一个元素, 学过Winform的我一开始还以为是Grid是GridView用来导入数据的。 2. 不应当使用坐标来确定Button的位置 这里要说一下,拖入一个Button控件的话,下面的XAML也会跟着自动生成一串标签代码,其中的Margin属性,是以坐标来定义按钮在M 阅读详情
强大的组合能力

WPF的UI元素可以很灵活的相互嵌套,从而可以实现很复杂的效果。比如,一个Button内部,可以嵌入Image,这样实现常见的位图按钮就很简单。

<Button>
    <Image Source="btn.jpg">
</Button>

还可以使用Layout元素,对内部的对象进一步进行排列

<Button>
    <StackPanel>
        <Image .../>
       <TextBlock .../>
   </StackPanel>
</Button>


用户也可以通过Template来定义Button到底应该长啥样(每一个控件都是可以自由定义的)。

虽然Button的模样可以随便定义,但是Button对外的行为却没有发生变化,最重要的就是在点击的时候会产生Click事件!我们可以简单认为,所有 具备了这个行为特征的元素组合就是Button。同样的,常见控件也有自己的行为特征。对外的行为的统一,为外部的使用提供了方便。

为了能够实现灵活组合,就不得不提到WPF的另外两个机制:

Retained-Mode Graphics

我们一直使用的GDI、DirectX等等,都是直接对屏幕进行绘画的(或者是屏幕缓冲区里),即immediate-mode graphics。具体绘制的内容操作系统是不知道的,只知道一个位图点阵。所以,当窗口因为覆盖而需要重绘屏幕的时候,需要应用程序自己来重新绘制画面 --也就是响应WM_PAINT事件。当年发明这种绘制技术,是因为硬件资源的限制,没有那么多内存资源来保存所有应用程序的屏幕。在WPF发明的时候, 内存已经足够多了,可以尝试新的模式了。应用程序在绘制屏幕的时候,不再只是描绘点阵数据,而是一个基本的图形元素,比如方形,圆形等等,再由WPF来把 这些图形元素转换成实际的位图写入图形缓冲区。除非图形元素有变更,否则屏幕的重绘工作全部由WPF自行完成。这样,应用程序就可以解放出来了。以前,要 在基于窗口的WM_PAINT上实现显示特效是多么的困难啊,为了避免闪烁,需要搞双缓冲区等等--现在就很轻松了。

Route Event

在以前基于窗口的模型里,鼠标等在子窗口上产生的事件,父窗口是收不到的,除非子窗口主动转发。这样,多个元素嵌套组合而成的UI,其事件响应就很麻烦。就 像前面的Button控件,如果在其内部子元素上点击鼠标,是否可以产生Click事件呢?是否需要每个子元素进行转发?

在WPF里,每个元素产生的事件,会以冒泡的方式从产生的地方开始一步步升到根节点。因此,它的每一个父元素都有机会对事件进行处理。这样,前面的Button控件,就可以在外围元素上接收事件,而不用担心内部有多少内嵌的元素了。



Property Value Inheritance 和Attached Property

父 元素的属性,可以自动被子元素所继承,这就是Property Value Inheritance,这样就可以大大的简化代码量,而且可以让界面的风格统一。但是,父元素和子元素的类型很多是不一样的,所以子元素要设定的属性在 父元素里不存在怎么办?于是WPF提出了Attached Property,允许任意增加的属性。比如

<StackPanel TextElement.FontSize=”30”>
    <Label />

本来StackPanel是没有FontSize这个属性的,为了传递给Label,所以通过TextElement.FontSize这种方式硬加上去了。


Dependency Property

这 个属性,跟WPF里其它的属性实现方式不一样。因为在WPF里,会存在大量的对象,而每个元素还有大量的属性值。如果每个属性值都对应一个成员变量的话, 那么将会占用大量的内存资源。所以Dependency Property并没有一个成员变量与其对应,其存贮空间在设置属性值时向WPF临时申请的。所以,其实现代码会比较复杂--因为类方法是共享的,所以相 对会比较省内存资源。

我们可以通过以下方式来设置Dependency Property,其优先级别由高至低,高级别的属性值会覆盖低级别的值。

1. Local value
2. Style triggers
3. Template triggers
4. Style setters
5. Theme style triggers
6. Theme style setters
7. Property value inheritance
8. Default value

DataBinding以及Animation也会影响Dependency Property,所以其确切取值需要当时的环境来计算得知。

Dependency Property是WPF里很多特性得以实现的基础。



WPF学习 首先感谢刘铁锰先生的《深入浅出WPF》,学习WPF过程碰上很多新概念,如Data Binding、路由事件,命令、各种模板等。 WPF:编写CS端的UI技术。 怎么去掉WPF窗体靠上多出黑色的长条?在vs界面的菜单栏点击调试-选项,把启用XAML的UI调试工具勾选去掉即可。(我自己觉得偶尔会用用这个) 1 认识WPF 1.1 新建WPF项目 生成 Properties:... 阅读详情

相关推荐

基于WPF开发的几个主流框架的分析

WPF主流框架分析报告摘要 本报告对比分析了三大WPF主流框架:MVVMLight适合中小项目,学习成本低(★★☆☆☆),提供基础MVVM支持;Prism面向企业级应用(★★★☆☆),支持模块化、DI容器等高级特性,适合复杂项目;Caliburn.Micro(★★★☆☆)采用"约定优于配置"理念,可减少样板代码。报告还提及.NET MAUI的跨平台特性。选型建议:新手从MVVMLight入门,大型项目优选Prism,追求简洁约定可考虑Caliburn.Micro,跨平台需求则选择MAUI

ponygame的博客 2257

treeview wpf代码设置选中_WPF的渲染原理原来是这么回事~

对于开发者来说,WPF 中最主要的知识点就是渲染,因为 WPF 是一个界面框架。想用一篇博客就能告诉大家完整的 WPF 渲染原理是不可能的。本文向大家介绍从开发者执行绘图指令到在屏幕显示的过程。本文是从一个全局的角度来看渲染的过程,在本文之后会补充很多博客来告诉大家渲染的细节。从 WPF 画图像到屏幕显示是比较复杂的,本渣也不敢说这就是 WPF 的做法,但是看了很多博客,好像都是这么说的...

weixin_39537977的博客 437

WPF:WPF绘制曲线

简述   WPF开发中经常需要绘制曲线、直方图等。虽然WPF自带了绘制图形等基础功能,但做程序一个很基础的原则就是避免重复造轮子。在GitHub上找到了微软官方的WPF绘制曲线开源库:InteractiveDataDisplay.WPF。我使用的IDE是VS201x,建议使用NuGet安装--引用InteractiveDataDisplay.WPF。如何使用NuGet,请自行百度。以下是我实验的该...

weixin_33700350的博客 4218

WPF类似于WINFORM的Onpaint

似乎不在需要这种重新绘制控件的操作了。其实在WPF中,如果我们需要低级别的自定义绘制同样是可以的,那么我们就需要一个名DrawingContext的类。在WinForm中,要是想自定义一些控件,就需要重写控件的On_Paint属性,例如我写的冰墩墩,就是利用控件的On_Paint属性重新绘制的。1,在我们的代码中,我们不能直接调用OnRender方法,它将被系统异步调用进行布局和绘制(这与Win32不同)。3,我们的绘制不是实时的,事实上我们的绘制将被保存到一个绘制指令集中被图形 系统在某个时候调用。

qq_40098572的博客 697

WPF技术架构:5个关键点,第3个让你想砸键盘!

摘要: WPF技术架构的5个关键点揭示了其核心优势: 技术演进:基于.NET 3.0的矢量图形与XAML声明式开发 核心机制:依赖属性、数据绑定与DirectX渲染的架构优势 自动布局系统:跨语言自适应UI设计(典型痛点案例) 打包体系:ZIP容器与XPS文档支持 样式资源:集中化管理UI元素 对比WinForms,WPF在渲染性能(5ms vs 20ms)、开发效率(提升40%)和维护成本上具有显著优势。常见误区如"复杂度高""性能差"被实测数据推翻,正确使用需遵循

java专栏 683

wpf画图性能的问题,解决方法的示例。Wpf绘制高性能绘制曲线

wpf画图性能的问题,解决方法的示例。Wpf绘制高性能绘制曲线

基于WPF的开发的知识点

注册WPF事件时,我们需要为传递事件选择一种策略,这个策略指定了事件在元素树中传递的方式。Tunneling:事件首先在根元素激发,然后到达树下的每个元素直到源元素(或者有处理函数处理这个事件终止了传递)。Bubbling:事件首先在源元素激发,然后向上直到根元素(或者有处理函数处理这个事件终止了传递。Direct:事件只在源元素激发。这与普通的.NET事件一样,除了参与事件触发器。在上面的例子中,我们注册的事件策略就是Bubbling。传递事件的处理函数的参数与普通.NET事件一样。

kalvin_y_liu的博客 3624

WPF Grid自绘

WPF Grid自绘

WM_PAINT介绍 及 OnPaint()函数的作用原理

*  WM_PAINT是窗口每次重绘都会产生的一个消息。     系统为什么不在调用Invalidate时发送WM_PAINT消息呢?又为什么非要等应用消息队列为空时才发送WM_PAINT消息呢?这是因为系统把在窗口中的绘制操作当作一种低优先级的操作,于是尽可能地推后做。不过这样也有利于提高绘制的效率:两个WM_PAINT消息之间通过 InvalidateRect和InvaliateRgn使之失

Mirage520的专栏 1298

C#中 paint()与Onpaint()的区别

代码如下:protected virtual OnPaint(PaintEventArgs e){ if(paint != null){ paint(this,e);}}如果直接重写onpaint,paint就会失效;这样就不会失效: 代码如下:protected override OnPaint(PaintEventArgs e){  base.OnPaint(e);  //自己的代码} (一)重绘时候经常会用到OnPaint()和Paint,它们有什么区别呢? 1.OnPaint方法是对一个控件来说的;而Paint事件是对一个控件对象来说的。它们中前者相当于是类的一个成员函数,而后者相当于

单细胞转录组数据分析全流程:从原始数据到细胞注释

本文详细介绍了单细胞转录组数据分析的全流程,从原始数据读取、环境搭建、数据质控与标准化,到降维聚类、细胞类型注释,以及高级质控与多样本整合。重点阐述了如何利用Seurat等工具进行数据处理,并通过标志基因比对与自动注释方法完成细胞身份鉴定,为研究者提供了一套清晰、可操作的分析指南。

coffee的博客 553

不可不知的WPF画笔(Brush)

在WPF中,屏幕上的所有内容,都是通过画笔(Brush)画上去的。SolidColorBrush使用纯Color绘制区域,有多种方法可以制定纯色画笔的颜色,如使用A(Alpha)R(红色)G(绿色)B(蓝色)颜色通道来定义颜色,或者使用系统预定义颜色。或者通过Color属性进行赋值。Opacity,表示画笔的透明度, Opacity 的值为 0 表示完全透明,1 表示完全不透明,0.25表示25%的透明。以上就是《不可不知的WPF画笔(Brush)》的全部内容,希望可以抛砖引玉,一起学习,共同进步!

绳锯木断,水滴石穿,专心写文,无问西东!!! 2028

从5V降到3.3V,你的LDO到底有多烫?手把手算功耗、选散热,避开这些坑

本文详细解析了LDO在5V转3.3V电路中的发热问题,提供了精确的功耗计算公式和散热设计方法。通过对比不同封装的热阻参数和优化PCB布局,帮助工程师有效降低LDO温度,避免热保护触发。文章还探讨了替代方案的技术拐点,为电源系统优化设计提供实用指导。

weixin_30304375的博客 436

WPF - 几个关键点

第一点,关于binding的。binding功能非常强大,也是wpf的基础之一;数据都靠它。 binding使用上的问题,可以看这个帖子 http://blog.youkuaiyun.com/fishhg/article/details/6244986 要想binding之后,数据可以同步更新,那么data source必须要么实现了INotifyPropertyChanged接口,要么是Depe

程序 = 实践 + 思考 (Programming = Practice + Thinking) 619

mot_challenge官方评估代码

mot_challenge官方代码使用介绍 评估mot17验证集:每个视频序列的后一半帧作为验证集 下载源码:git clone https://hub.fastgit.org/JonathonLuiten/TrackEval.git 官网上下载data样例,放在TrackEval/下,结构如下: data |-- gt | |-- bdd100k | |-- davis | |-- kitti | |-- mot_challenge | | |-- MOT15-train |

qq_37866436的博客 4895

cartographer运行错误集合

播放bag的时候错误 Check failed: sensor_to_tracking->translation().norm() < 1e-5 The IMU frame must be colocated with the tracking frame. Transforming linear acceleration into the tracking frame will otherwise be imprecise tracking frame不是imu的link 修改lua文件中的.

Studying…… 2025

WPF实现无线扫码枪无焦点自动获取数据并逻辑处理

USB接口的扫码枪基本就相当于一个电脑外设,在WINDOWS系统中,甚至可以简单到不做任何处理,就能在焦点位置获取扫码枪返回的数据。但是作为一个程序员,总是会遇到客户各种神奇的需求,比如一个比较常见的功能:客户手拿扫码枪不管扫什么,软件都能自动辨别是什么类型的条码,叭叭叭扫好几种条码的时候,软件能够区分出来各种条码,并且根据条码调出相关数据。 呐,这个需求的话,就直接把手动更改焦点位置来扫码的可...

luoqiang_sky的博客 8395

锂电池SOH估计 | 基于LSTM模型的锂电池SOH估计(Python)

锂电池SOH估计 | 基于LSTM模型的锂电池SOH估计(Python)

前程算法屋的博客 1434

WPF那些事儿

概述 感觉学习的东西必须做个记录,不然很快就忘掉了。现在把WPF学习过程中一些零碎的东西记录在下面,没有具体的主题,想到啥、看到啥都写在这里,算是复习一下并做个备忘吧。 1. 等待对话框 看到同事做的项目中需要一个等待对话框大致如下: 同事用定时器实现了这个效果,实际在WPF中,这个效果可以很容易通过动画实现。 <Grid> <TextBlock x:...

weixin_34392843的博客 115

【目标检测】基于yolov5的道路坑洼检测(附代码和数据集)

基于yolov5的道路坑洼检测(附代码和数据集)

学无止境、积少成多、厚积薄发 4620

如何在Ubuntu 22.04系统上安装CUDA 12.9

本文提供Ubuntu22.04系统上安装CUDA12.9的简明指南:1)确认已安装适配575驱动;2)清理旧版本后安装必需依赖库;3)通过deb包方式添加英伟达源并安装CUDA12.9工具包;4)配置环境变量;5)通过nvcc-V和nvidia-smi命令验证安装。文中包含常见问题解决方法及多显卡使用说明,全程约需10分钟完成安装。

2501_93651177的博客 1481

什么是WPF,对WPF的认识

一,什么是WPF WPF(Windows Presentation Foundation)翻译为中文“Windows呈现基础” 是微软新发布的Vista操作系统的三个核心开发库之一,是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用...

qq_42251596的博客 5万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WPF:基于Dlib的人脸关键点检测演示示例

MainWindow.xaml &lt;Window x:Class="Splash.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ...

秦建辉的专栏 1915

visio安装包

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WPF几个 手势执行顺序

WPF其实本身对触摸事件就支持. 其中有些高及触屏的操作的手势路由事件. 大大增强了用户体验性. 使得我们能做出类似iphone手机的的触控效果.并使之这些柔和的效果 移植到桌面触摸应用上. 首先我们介绍几个 手势 他们分别是 ManipulationStarting、ManipulationStarted、ManipulationDelta、ManipulationInertiaStarti

etwdone的专栏 4609

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

上一篇: XAML的几个关键概念
下一篇: 软件开发需要常识
optman
博客等级 码龄26年 64粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值