开发应用时如何利用C#自定义属性

C#编程-自定义属性 让我们继续漏洞修复示例,在这个示例中新的自定义属性被命名为BugFixingAttribute。通常的约定是在属性名称后添加单词Attribute。编译器通过允许您调用具有短版名称的属性来支持附加。在上述代码段中,编译器首先寻找名为BugFixing的属性的定义。没有找到BugFixing属性的定义时,寻找BugFixingAttribute属性的定义。每个属性必须至少包含一个构造函数。在下面的漏洞修复示例中,漏洞编号、开发人员姓名、修复日期是定位参数,标记是命名参数。getsetget。 阅读详情

本文可以从技术文章下载出获得,其中包含了一个使用定制属性的Visual Studio项目示例文件。

属性类是设计时可应用于类、properties和方法的特殊文类。属性类提供描述元素某些方面属性的方式或决定依附于该元素的其它类的行为,进而在运行时可以访问和检验这些描述与行为。你可以将属性类看作为类成员添加特殊修改器的一种方式。

例如,如果你曾经写过Web服务,那肯定知道要使得方法在整个服务中是公开的,必须要使用WebMethod属性。这是一个演示属性应用的很好的例子,因为我们要用WebMethod属性扩展编程模型。C#中没有内建的方式来指定某个方法通过Web服务是可见的(因为内建有表明一个方法是私有的方式),因此需要添加WebMethod属性来满足这一需要。

设计自定义属性

设计自定义属性的过程十分简单,在设计属性前只需要考虑以下几个方面:

◆使用属性的目的是什么?



属性可以以很多方式使用。你需要定义属性到底要完成什么功能并确保这些特定功能没有内建在.NET框架集中。使用.NET修改器要比使用属性好,因为这将简化同其它装配件的集成过程。

◆属性必须储存什么信息?



属性是打算用来指示某个功能的简单标志吗?或者属性是否要储存信息?一个属性可以拥有设计时赋予的一组信息,并在运行时查看这些信息。例如,看一下示例应用中的别名属性。

◆属性应该驻留在哪个装配件中?

大多数情况下,可以将属性包含在使用该属性的装配件中。不过也有这样的例子,将属性驻留在公共的、轻量级的、共享装配件中会更好些。这种类型的配置允许客户使用属性时不必引用不需要的装配件。

◆哪些装配件将会识别属性?



如果没有模块读取属性,那么它将一文不值。你很可能将读取属性的类放在属性驻留的同一个装配件中。然而,正像前面提到的,也有这样的例子,你想将读取属性的方法与属性自身分别放在不同的装配件中。

使用属性

在我们深入了解如何设计自定义属性之前,我们需要先看一下它们是如何使用的。例如,假定我们有一个称为“Hide”的属性它能够有效地隐藏Properties,因此它们不会显示在屏幕上。如果我们将这个属性应用于“SSN”property,那么代码将会如列表A所示。

列表 A

[Hide ()]

public string SSN

{

get { return _ssn; }

set { _ssn = value; }

}

作为更复杂一点的例子,假设我们将有一个属性称为“Alias”。该属性的任务是检查一个property可能拥有别名。这将允许将一个property值映射给另一个property即使批roperty的名字不匹配。这个属性接受一系列字符串值作为映射名。(列表B)

列表 B

[Alias ("FirstName", "First")]

public string FName

{

get { return _fName; }

set { _fName = value; }

}

在这个例子中,property“FName”被映射到“FirstName”和“First”,请查看示例应用以更详细的了解这种应用。

创建属性

创建属性是一个简单的过程。你可以定义继承自System.Attribute类的一个包含你想要储存的数据的类。列表C的前半部分显示了如何创建一个名为“Alias”的属性。

列表 C

Class Alias : System.Attribute

{

string[] _names;

public Alias(params string[] names)

{

this.Names = names;

}

public string[] Names

{

get { return _names; }

set { _names = value; }

}

}

正如你所看到的,这就是一个普通的类,唯一的例外就是继承自System.Attribute类。我们不需要作任何特别的事情使它成为一个类。我们只是简单的定义了一个需要使用的构造函数并创建了一个property和一个存储数据的私有成员。

列表D是个更简单的属性——“Hide”属性。这个属性不需要构造函数(使用默认的构建函数),也不储存数据。因为这个属性只是一个简单的标志类型的属性。

 

列表 D

Class Hide : System.Attribute

{

//This is a simple attribute, that only requires

// the default constructor.

}

从代码中读取属性

读取属性并检查其中的数据比使用属性或创建属性显著地更加复杂。读取属性要求开发人员要对如何使用一个对象的反射信息有个基本了解。如果你不熟悉反射机制,可以阅读“应用反射”系列文章。

假设我们正在查看一个类,我们想知道该类的那个properties使用了Alias属性以及都有哪些别名。列表E实现了这个功能。

列表 E

Private Dictionary<string, string> GetAliasListing(Type destinationType)

{

//Get all the properties that are in the

// destination type.

PropertyInfo[] destinationProperties = destinationType.GetProperties();

Dictionary<string, string> aliases = newDictionary<string, string>();

for each (PropertyInfo property in destinationProperties)

{

//Get the alias attributes.

object[] aliasAttributes =

property. GetCustomAttributes( typeof(Alias), true);

//Loop through the alias attributes and

// add them to the dictionary.

foreach (object attribute in aliasAttributes)

foreach (string name in ((Alias)attribute).Names)

aliases.Add(name, property.Name);

//We also need to add the property name

// as an alias.

aliases.Add(property.Name, property.Name);

}

return aliases;

}

这段代码最重要的地方是对GetCustomAttributes的调用以及循环遍历属性提取别名的地方。

GetCustomAttributes方法可以在我们从对象类型中提取的PropertyInfo类中找到。在上面的应用中,我们将要查询的属性类型作为参数传给GetCustomAttributes方法,同时还将“true”传递给该方法使得可以列出继承的属性。如何发现匹配的属性,GetCustomAttributes方法将返回一个对象数组。还有另外一种超负荷方法可以列出property上的所有属性,而不管属性类型是什么。

一旦有了属性,我们需要检查它们并从中提取需要的信息。这可以通过遍历由GetCustomAttributes方法得到的对象数组并将每个对象映射成我们要查询的属性来完成。在完成映射后,我们就可以像访问任意其它类的properties一样来访问属性的properties。

正如我在前面所说,读取属性是最困难的部分。然而,一旦我们写后读取属性的代码后,将来回忆和实施起来就相当容易了。

应用示例

我强烈建议你下载本文包含的这个应用示例。这个应用示例在一个简单的Windows应用中实现了下面的属性,并演示了如何读取和使用它们。

◆Alias——这同上面提到的Alias属性一样。当你需要将一种类型的对象翻译为另一种类型时,需要使用该属性。例如,如果你有一个Customer对象和一个Address对象,你可能需要将它们都翻译为一个合并的包含人名和地址的Person对象,当一个不能使用直接映射时,可以使用该属性。

◆DisplayName——示例代码中包括检查一个类实例并将它的property名称与值输出到屏幕上的代码。这个属性可用于覆盖送到屏幕显示的property名称。例如,一个名为“FName”property可以使用DisplayName属性,因此它显示为“First Name”。

◆Examine——这个属性使得示例应用中的PrintObject方法进入更深一层,并输出使用了Examine属性的property的值。例如,示例应用中的Customer对象将Examine属性应用到Address property。这将指示PrintObject方法输出address property中的所有信息。

◆Hide——这个属性指示PrintObject()方法不要将当前property输出到屏幕。该属性用在Customer对象的SSN property上。



示例应用中包含了实现和读取属性每一步的注释,仔细看一下,我敢保证你会发现一些在自己的应用中可以利用的功能。

相关推荐

C#中实现自定义属性

通过自定义属性,我们可以为代码添加更多的元数据,以便在需要时进行进一步的处理和分析。在C#编程中,我们可以使用自定义属性来为代码添加额外的元数据。自定义属性允许我们将信息附加到类型、成员或其他编程结构上,以满足特定的需求。通过继承该基类,我们可以创建自己的自定义属性类,并使用它们来装饰代码中的各种元素。下面,让我们通过一个示例来说明如何在C#中自定义属性,这里我们创建一个名为。的自定义属性类,并将其应用到一个类的字段上。最后,我们输出了获取到的自定义属性的描述信息。的测试类,并在其中的一个字段。

TechPr的博客 687

3.C#中通过反射来获取Attribute中的信息

  阅读目录   一:属性   二:自定义属性类BookAttribute实例   . 属性是由属性类来实现的,向上篇文章《C#温故而知新学习系列之.NET框架高级特性—.NET框架中自身提供的属性(二)》我们讲的Obsolete一样,我们还可以自定义属性类,属性类是由System.Attribute派生而来的   . 在C#中为了方便起见,使用自定义属性时可以省略属性名后面的Attrib...

weixin_33852020的博客 786

C#中动态加载PropertyGrid自定义属性的策略

NET框架中的PropertyGrid控件是一个功能强大的工具,它可以以属性表的形式展示对象的属性,并允许用户编辑这些属性。这种控件广泛应用于各种应用程序的开发过程中,特别是在需要动态显示和编辑对象属性的场景中。PropertyGrid控件的核心价值在于其高度的可定制性和灵活性。开发者可以根据需要,通过编程方式控制属性的显示、编辑以及验证等各个方面。例如,可以通过自定义属性描述符来改变属性的显示名称、类型转换器、编辑器等,从而提供更为丰富和友好的用户界面。

weixin_34268462的博客 1244

C#自定义属性

<br />1 .描述<br />属性提供功能强大的方法以将声明信息与 C# 代码(类型、方法、属性等)相关联。属性与程序实体关联后,即可在运行时使用名为“反射”的技术查询属性。 <br />属性以两种形式出现: <br />一种是在公共语言运行库 (CLR) 中定义的属性。<br />另一种是可以创建的用于向代码中添加附加信息的自定义属性。此信息可在以后以编程方式检索。<br />2. 示例代码: <br /> <br />using System;<br />using System.Collectio

aspnetSky的专栏 1482

C#自定义属性的创建与应用深度解析

本文深入探讨了C#中自定义属性的创建、使用和限制机制。通过属性(Attribute)的概念,介绍了如何定义和限制属性的使用范围,以及如何通过反射(Reflection)技术在运行时获取相关属性信息。文章通过代码示例清晰地展示了属性在类中的应用,包括如何定义属性类、如何将属性与类关联,以及如何通过反射访问这些属性。此外,本文还分析了AttributeUsage属性的使用,它允许我们限制自定义属性只能与特定的代码类型或目标相关联。

weixin_31419153的博客 510

自定义属性在C#中的应用与反射

本文深入探讨了C#中的自定义属性,包括属性的定义、使用、以及如何通过反射在运行时获取属性信息。首先介绍了属性的基本概念和参数使用,然后通过示例展示了如何创建和使用自定义属性,并讨论了属性的限制和定义方法。最后,文章通过代码示例展示了如何利用反射技术访问和展示类上关联的属性信息。

weixin_42360846的博客 486

反射中属性的用法

首先自定义属性继承 System.Attribute [AttributeUsage(AttributeTatget.All,AllowMultpie=true,Inherited=false)] //关于自定义属性的约束 作用范围/可否多次设置/可否继承 public class myAttribute:Attribute {     //可以有属性,方法以及构造函数 } /

炘的专栏 403

ROS Navigation global_planner框架解析

ROS Navigation global_planner框架解析主要讲一下我看源码总结的框架,如果大家跟着这个框架看源码的话可能会看的比较快。主要讲解global_planner关键配置参数含义及关键函数Astar,Dijkstra,QuadraticCalculator::calculatePotential,PotentialCalculator::calculatePotential,GridPath::getPath,GradientPath::getPath.

Jeff_Lee_的博客 4694

C#中的自定义控件中的属性、事件及一些相关特性的总结

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33775582的博客 235

ISO26262功能安全--产品开发过程

目录 1.总体理解 2.概念阶段——吹牛,我们是打草稿的 2.1 相关项定义 2.2 HARA分析 2.3 功能安全目标 2.4 安全需求与安全概念 3. 系统阶段——闭门造神车,我们开始修炼 3.1 技术安全需求(TSC) 3.2 系统架构设计 3.3 安全分析与独立性分析 3.4 软硬件接口(HSI) 4. 硬件阶段——苦其心志,苦练经骨 4.1 硬件架构...

AgingMoon的博客 1万+

用V E S C 6-M K V I 第六代调速控制器给VESC电调刷固件

文章摘要:本文介绍了一款先进的电机控制器,具备多项创新技术。核心亮点包括三相电流/电压检测、四象限无缝运行、多模式兼容等先进电机控制技术,以及智能感知与安全保护、高效能电源管理、多样化连接与扩展功能。此外,该控制器支持实时数据监测与用户交互,具备开源生态和工业级可靠性,适用于电动载具、机器人及工业领域。用户需注意散热要求和兼容性提示,可通过VESC-Tool软件进行灵活配置。产品可在常竹科技淘宝店购买,并加入技术交流群获取支持。

2403_89422757的博客 1366

[C#]C#中的自定义属性

   作者:Mikel 日期:2008-07-25原著:Sadaf Alvi翻译:Abbey 原文出处 Attributes in C#, CodeProject摘要  在这篇指南里,我们将会看到如何自己创建属性(Attribute),并将其用到不同的程序实体(Entity)上,在程序运行时获取属性信息。译注  MSDN将 Attribute 与 P

taonylu的专栏 6755

网络变压器等效电路及网络变压器中间抽头作用详解

       华强盛电子导读:要详细了解网络变压器周边EMC管控及网络变压器BOB-SMITH电路的连接原理,首先我们对网络变压器的认识及其电路各参数影响都要有个简要的认识,本文,对非理想网络变压器等效电路做一个详细的分析,其中重点讨论一下网络变压器中间抽头的作用其影响                          网络变压器等效电路及                        ...

网络变压器专业资料 6006

C# 自定义属性

在.NET框架中,经常用到属性,从定义哪些类是可序列化到选择某个Web服务应用中的哪些方法是可以公开的都会用到属性。使用属性可以在设计时对类、properties和方法添加说明,然后在运行时通过反射信息来检查它们。本文为我们介绍了在开发应用时如何利用C#自定义属性。本文可以从技术文章下载出获得,其中包含了一个使用定制属性的Visual Studio项目示例文件。     属性类是设计时可应

白云的专栏 5227

保姆级教程:手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动

本文提供了一份详细的保姆级教程,手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动。从基础配置到RGMII接口的特殊设置,再到驱动开发的关键步骤和调试技巧,帮助开发者快速掌握PHY芯片的移植与开发。

weixin_33734785的博客 333

Vue - 详细实现低代码平台,支持拖曳式可视化生成应用软件功能,用户通过拖拽元素、搭积木的方式创建应用(适合迭代的基础架构、低代码平台)

Vue低代码平台-拖曳式拖拉拽可视化生成应用软件,拖拽式低代码数据可视化开发平台,vue实现拖拽,拖拽式Vue组件代码生成平台,基于vue的可视化拖拽代码生成工具,Vue实现可拖拽组件的方法,一个低代码平台的前端部分,靠拖拉拽生成页面。Vue技术栈从零实现低代码可视化搭建平台示例,低代码轮子,通过拖拽就可生成Vue代码的平台来了,vue低代码平台开发相关比低代码更强大的零代码开发平台,这款低代码SAAS数据可视化工具,拖拽生成大屏。vue实现拖拽效果,Vue自由拖拽缩放组件,自定义组件(文本、图片

🏆 前端领域优质创作者 1万+

如何利用C#自定义属性

在.NET框架中,经常用到属性,从定义哪些类是可序列化到选择某个Web服务应用中的哪些方法是可以公开的都会用到属性。使用属性可以在设计时对类、properties和方法添加说明,然后在运行时通过反射信息来检查它们。本文为我们介绍了在开发应用时如何利用C#自定义属性。本文可以从技术文章下载出获得,其中包含了一个使用定制属性的Visual Studio项目示例文件。    属性类是设计时可应用

pollop的专栏 770

OpenClaw部署太难?汉化版+中文社区+国产替代品,国内用户零门槛指南

OpenClaw作为GitHub 10万+星的开源AI助手平台,近期在国内AI圈备受关注 🌟 但部署难度和英文界面让很多用户望而却步。本文整理了针对国内用户的友好资源和简便替代方案,帮助国内用户零门槛上手AI助手工具 🚀

XiaoqiangClub的博客 5758

C# Winforms 自定义控件 自定义属性 以及自定义事件

C# Winforms 自定义控件 自定义属性 以及自定义事件第一步 项目部分第二步 代码部分自定义属性定义普通属性定义结合事件的属性自定义事件第三步 生成和配置部分第四步 效果展示 第一步 项目部分 新建项目 选择窗体控件库 点击确定 这个空白区域就是一个新建的控件 其实现在已经基本完成了 自定义控件的创建(可以直接跳到生成和配置部分生成控件了) 因为基本的属性和事件(例如click事件 backcolor属性等几乎每一个控件都需要有的属性和事件)系统已经帮你配置好了 代码部分只是 为了增加 自己自定义

小何程序员的博客 7742

3步!Spring Boot+OCR引擎秒提身份证/营业执照?手把手教你从零实现!

OCR技术革新文档识别效率 本文演示了如何利用Spring Boot+Tesseract OCR+OpenCV构建自动化文档识别系统。相比传统人工录入,OCR技术可实现: 5秒极速提取身份证/营业执照关键信息 精准识别中文文本(准确率90%+) 正则过滤自动匹配结构化数据 技术要点: OpenCV图像预处理(灰度化+二值化) Tesseract多语言OCR识别 正则表达式精准提取证件号码 效率提升达100倍,错误率降低90%,适用于金融、政务等需要批量处理证件的场景。

java专栏 905

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

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

总结一下 C# 如何自定义特性 Attribute 并进行应用

Attribute(特性)是一种用于为程序元素(如类、方法、属性等)提供元数据信息的方法,描述其用途、状态、约束等,可以在运行时通过反射获取并读取,用于实现一些动态的行为,如配置加载、权限检查等,应用范围非常广泛,在实际开发中经常用于标记和控制程序的行为,提高代码的可读性和灵活性

yangshuquan的专栏 2091

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

如何使用C#自定义属性

在.NET框架中,经常用到属性,从定义哪些类是可序列化到选择某个Web服务应用中的哪些方法是可以公开的都会用到属性。使用属性可以在设计时对类、properties和方法添加说明,然后在运行时通过反射信息来检查它们。本文为我们介绍了在开发应用时如何利用C#自定义属性。本文可以从技术文章下载出获得,其中包含了一个使用定制属性的Visual Studio项目示例文件。属性类是设计时可应用于类、p

月黑杀人夜,风高放火时! 1466

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

CATIA二次开发:C方式获取产品属性——一般属性及自定义属性

CATIA二次开发:C#方式获取产品属性——一般属性及自定义属性 【下载地址】CATIA二次开发C方式获取产品属性一般属性及自定义属性 此开源项目专注于CATIA二次开发,通过C#语言实现产品属性的获取与设置,涵盖一般属性和自定义属性的操作。内容详实,步骤清晰,适合有一定C#基础的开发者深入学习。项目从基础理论入手,介绍...

gitblog_06788的博客 937
上一篇: 定制属性
下一篇: 字符串格式化
mydriverc
博客等级 码龄21年 160粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值