缓存依赖、数据库缓存依赖学习以及在LinQ当中使用缓存依赖

高效处理C#中的集合和LINQ:优化查询性能 在C#中,选择合适的集合类型和优化LINQ查询对于提升程序性能至关重要。集合选择:根据操作的特点选择适合的集合类型(如ListDictionaryHashSet等)。LINQ优化:避免不必要的查询链,合理使用ToList()等缓存查询结果,减少枚举次数。数据结构与算法优化:合理使用数据结构和算法,减少不必要的排序、查找等操作,提升查询速度和内存占用。通过理解集合和LINQ的工作原理并采取有效的优化策略,开发者可以大幅提升C#应用程序的性能,尤其是在处理大量数据时。 阅读详情

导读:

◆缘起
◆缓存简述
◆缓存依赖简述
◆自定义缓存依赖分析
◆数据库缓存依赖学习
◆LINQ缓存依赖实现
◆文档更新说明
◆附:缓存依赖研究项目源码(包括数据库)
◆参考资料

一、缘起

(本文发布于博客园,作者在博客园的博客地址是:http://www.cnblogs.com/xpnew/ 原文地址: http://www.cnblogs.com/xpnew/archive/2012/05/03/LinQCacheDependency.html ,由于转载会造成图片、格式丢失,以及不能获得文档的最后更新,所以在此特别声明)
最近做的一个客户项目,客户提出的要求是参数可定制,例如会员积分达到3000可以升一档。
实现这个需求,其实很容易,只要把相关的参数都写到数据库或者xml文件当中,使用的时候再读出然后作比较就可以了。
从性能优化的角度来讲,当然不能是每次使用的时候都重新读取一遍。
在asp时代,优化性能的一个关键就是把数据保存到Application和Session当中,到了asp.net时代,就提供了一个“更好”的工具:Cache。
以前就研究过Cache,不过因为需要优化的数据较少,所以仍然使用Application。
做到这个项目,虽然需要缓存的数据不多,但是因为通过缓存依赖可以“及时”获得更新,所以决定下大力气仔细研究一下。
我现在做东西使用的是LINQ,并且分成DALEntery、DAL、BLL、WEB这4层,所以不能直接使用数据库缓存依赖,于是在网站找了好久,都没有找到在LINQ当中使用缓存依赖的技术资料,最后没办法,只好研究其它的缓存依赖方式。
写出这篇笔记之前,我的学习路线是:先看MSDN当中Asp.net当中使用缓存的部分,然后一些关于“自定义缓存”方面的技术博客,最后是“数据库缓存依赖”的技术资料并且动手做了一些实验,然后是总结分析。

二、缓存简述

缓存的作用就减少对原始数据的访问次数,提高性能。

缓存的使用方法,就是用Add或者Insert方法,把对象存储到缓存当中。

缓存的技术需要研究超时、页面缓存、缓存依赖等细节。


三、缓存依赖简述

缓存依赖就是在正常的缓存到期之前,提前获知原始数据已经更改,以最快的速度保持数据的同步。


缓存依赖有几种形式:

文件、其它缓存、多对象依赖、数据库缓存依赖、自定义缓存依赖

四、自定义缓存依赖分析

从网站看到了一堆资料之后,可以总结出以下几点:

1、派生于CacheDependency


2、通过计时器来轮询


3、需要自己实现比较和判定,以确定缓存是否已经更新/修改


五、数据库缓存依赖学习

《系统缓存全解析6:数据库缓存依赖》阅读了两遍之后,我自己动手做了一下实验,实验的结果和文章描述的完全一致。

为了进一步的理解,我又在数据库里创建了“新闻”、“案例”两个表,作为对比对象。

其中新闻使用了缓存,超时设置为15分钟,案例没有缓存。

实验是在两个页面时行的,一个是list,一个是Insert。前者用GrideView控件显示产品、新闻、案例的列表,后者用DetailsView控件插入数据。

实验的现象一:

1、新添加的产品,立刻能显示在列表页上。

2、新添加的新闻,不会立刻显示在列表页上,直到15分钟之后才出现。

3、新添加的案例,立刻能显示在列表页面上。


初步结论:使用缓存依赖,能够保持数据的同步。

实验的现象二:

新添加了产品,立即在列表页面刷新,列表页面有时候不能立即显示。


进一步结论:

缓存依赖,是“理论”上的即时同步,并非真的分秒不差。究其根源,应该是因为缓存依赖,其实是基于轮询的方式实现的。


然后打开数据库,研究了一下,数据库缓存依赖的原理终于真像大白了:

1、首先是在数据库创建了一系列的存储过程

2、然后是在数据库创建了一个表:AspNet_SqlCacheTablesForChangeNotification

3、在需要监视的表上创建触发器:[P_Product_AspNet_SqlCacheNotification_Trigger]

4、每次被监视的表上修改之后,都要通过触发器=》存储过程=》来修改表AspNet_SqlCacheTablesForChangeNotification相应的记录。

5、Asp.net通过web.config的设置,轮询数据库里的表AspNet_SqlCacheTablesForChangeNotification

6、根据在Cache当中指定了的缓存依赖,比较表名(AspNet_SqlCacheTablesForChangeNotification的[tableName]字段)对应的changeId是否发生变化,判断缓存源数据是否发生变化,然后决定缓存项提前过期。


六、LINQ缓存依赖实现

1、基础工作:

创建表的触发器,准备表修改记录表,以及二者之间的存储过程。
当然,这些可以直接使用Asp.net提供的这些功能。

2、在DAL层写一个类“DBCacheDependencyDAL.cs”,实现查询[表修改记录表]的功能。

3、在BLL层写一个类“LinQCacheDependencyServer.cs”实现自定义缓存依赖,这个类派生于CacheDependency,并且实现以下的细节:

TableName字段,保存要监视的表名

CurrentId字段,保存缓存创建时changeId字段的值,因为缓存失效时,会重新创建,所以这个属性为只读属性。

DBCallBack(object sender)委托,这个委托会被传递给计时器调用,被调用的时候,它调用CheckTableChanged方法检查表是否已经更新,如果已经更新,那么就会调用基类的NotifyDependencyChanged方法,通知依赖项已经更改。

CheckTableChanged方法:比较CurrentId字段和数据库里的changeId字段,不同则表示已经更新。

4、在添加缓存的时候添加LinQCacheDependency类的实例,作为缓存依赖。

◆文档更新说明:

2012年5月3日 17:00

增加了附件,项目的源代码。

增加了原文的链接。

◆附:缓存依赖研究项目源码(包括数据库)

◆参数资料:

《《解剖PetShop》系列之四 PetShop之ASP.NET缓存》
http://www.cnblogs.com/wayfarer/archive/2006/11/01/547060.html


《系统缓存全解析6:数据库缓存依赖》
http://www.cnblogs.com/ltp/archive/2009/06/30/1514331.html


《ASP.NET 3.5核心编程学习笔记(38):自定义缓存依赖》
http://www.cnblogs.com/free722/archive/2011/04/25/2028780.html

《asp.net 2.0 中使用自定义缓存依赖》
http://www.cnblogs.com/sunwaywei/archive/2006/06/11/423312.html


《linq to sql中的自动缓存(对象跟踪)》
http://www.mysjtu.com/page/M0/S438/438073.html

《缓存依赖》
http://hi.baidu.com/reallycan/blog/item/89cb5adff9d60c4f95ee3774.html

流浪是注定的宿命;
漂泊是无尽的轮回。
Unity游戏数据驱动开发实战:BG Database可视化数据库管理 在游戏开发中,数据管理是连接策划与程序的关键环节,其核心在于实现数据与逻辑的解耦。数据驱动设计通过将游戏配置信息(如角色属性、物品数据)从代码中剥离,交由外部结构化数据源管理,从而提升开发效率和团队协作流畅度。这种范式转变的技术价值在于支持快速迭代、内容扩展和职责分离,广泛应用于RPG、策略及运营类手游等需要管理大量静态数据的场景。本文聚焦于Unity平台,深入解析如何利用BG Database这一可视化数据库工具,高效实现游戏数据的配置、本地化与运行时加载,解决开发中常见的Excel管理混乱、版本冲突等痛 阅读详情

相关推荐

ASP.NET Core 中的数据库初始化与数据缓存策略

本文介绍了在ASP.NET Core中如何通过SeedData类进行数据库初始化,并展示了如何利用Entity Framework Core访问和操作数据库数据。同时,探讨了响应缓存的实现方式,包括响应缓存和输出缓存,并且强调了数据敏感性日志记录的启用方法。

weixin_30299319的博客 472

(23)认识Linq:序列与集合,延迟与缓存,链式与查询式,性能提升技巧

初步认识linq为什么要用序列,序列为什么延迟,查询相关应用,性能提升的一些技巧。链式与查询式的linq表达的认识。

白话魔法师 608

LinqToCache缓存技术

非常强大的LinqToSql的缓存技术,自动只需将几个文件拷到项目内就可实现Linq的缓存查询,项目中非常实用的一项技术。

关于Linq的缓存功能

在修改使用Linq提取的数据时,缓存功能比较讨厌。比如在修改数据后再次查询时,无论如何也查询不到修改的新值,显示的仍然是缓存的原值。解决的办法有两个: 1、关闭所有的缓存功能,但在使用查询大于修改功能时,并不合适: DataContext con = new DataContext(); con.ObjectTrackingEnabled = false;//关闭对象跟踪功能 2、建立新的上...

wjhx的专栏 181

linq 的全数据库缓存

自己写的linq 的全数据库缓存,可能还存在bug.

LinqCache:LINQ 缓存框架

链接缓存 LinqCache 是一个用于缓存 LINQ 查询的简单而强大的框架。 无论后备数据存储是对象、XML、LINQ-to-SQL、实体框架、NHibernate 还是任何其他支持 LINQ 的提供程序,该框架都能无缝工作。 您还可以使用自己的自定义缓存容器或自定义缓存失效规则扩展框架。 通过 NuGet 安装 要安装 LinqCache,请在包管理器控制台中运行以下命令: PM> Install-Package LinqCache 您还可以在 NuGet 上查看。 例子 无限期地缓存 LINQ 到对象查询 var query = customers . Where ( customer => customer . Name == " John " ) . AsCached (); 无限期缓存 LINQ-to-SQL/实体框架查询 using ( var context

Linq 笔记

提示错误 "The query results cannot be enumerated more than once." 這段程式碼..會產生上面那段錯誤..原因就是aaaa被判斷成ISingleResult<T>的型別..而ISingleResult<T>不能被enumerate一次以上..所以就會發生exception.. 解決方法就是把ToList()...

ailiu6134的博客 208

从CAD到完美网格:HyperMesh几何清理全流程指南(2023最新版)

本文详细介绍了2023最新版HyperMesh在几何清理和网格划分方面的全流程操作指南。从CAD导入、几何修复到中面提取和网格生成,系统性地分享了实战验证的解决方案,帮助工程师高效处理复杂几何体,提升有限元模型质量。特别针对汽车和航空航天领域的常见问题,提供了智能化工具和优化技巧。

weixin_29306011的博客 224

深度解析.NET中LINQ查询的延迟执行与缓存机制:优化数据查询性能

NET中LINQ查询的延迟执行与缓存机制是提升数据查询性能的重要手段。延迟执行通过避免过早计算提高了灵活性,缓存机制则减少了重复查询的开销。适用于各种数据查询场景,但需注意延迟执行可能带来的意外结果以及合理利用缓存。未来,随着数据量和查询复杂度的增加,LINQ有望在延迟执行和缓存机制上进一步优化,开发者应持续关注并利用这些特性编写高效的数据查询代码。

dotnethello的博客 664

SAP 物料账前期没有运行的解决方法

If you use the actual costing (material ledger), you must have completely closed all period-end closing operations in the actual costing for the penultimate period prior to the period shift. Use the '...

含笑饮砒霜死后更嚣张 3315

【智能制造】- APS系列|05 APS 排产的五大底层算法逻辑

很多人误以为APS只是给生产工单排先后顺序,实则整套系统依托成熟算法体系,完成多维度约束下的最优生产决策在制造业数字化排产普及的当下,依旧有不少制造管理者对APS存在认知误区,将其等同于简易工单排序工具。事实上,专业级高级计划与排程系统,早已脱离单纯按时间排序的基础功能,而是依托一整套成熟完善的底层算法逻辑,整合现场各类生产限制条件,在海量变量中自动推演、筛选、输出最贴合企业经营目标的生产方案。

qq_40821260的博客 433

LINQ赋能设计模式:提升代码灵活性与可测试性

本文探讨了LINQ(Language Integrated Query)在.NET开发中与常见设计模式的协同应用。重点分析了LINQ与仓储模式的结合,通过返回IQueryable<T>实现延迟查询和查询组合,提升代码灵活性;介绍了使用内存集合模拟数据源进行单元测试的方法;以及如何利用LINQ的通用查询语法在不同架构中实现数据访问抽象。LINQ与设计模式的结合增强了代码的可维护性、可测试性和架构灵活性,为现代软件开发提供了高效解决方案。

冰茶的博客 1256

计算机毕业设计springboot股票模拟交易系统的设计与实现u6m959【附源码+数据库+部署+LW】

选题背景: 随着互联网和金融科技的快速发展,股票市场成为了吸引人们关注和参与的重要领域之一。越来越多的人开始对股票投资感兴趣,希望通过交易股票来获取收益。然而,对于初学者来说,股票市场的复杂性和风险往往让他们望而却步。因此,设计和实现一个股票模拟交易系统,可以帮助初学者更好地理解和掌握股票交易的规则和技巧,提高他们的投资决策能力。 意义: 股票模拟交易系统的设计与实现具有以下几个重要意义: 提供实践机会:股票模拟交易系统为投资者提供了一个实践的平台,使他们能够在真实市场环境下进行模拟交易,了解股票市场的

gp12081的博客 1759

C# 反射与LINQ结合使用详细示例

反射与LINQ的结合为C#编程提供了极大的灵活性,可以实现: 动态类型检查和操作 运行时代码生成和执行 复杂的数据查询和分析 灵活的架构设计(如插件系统、ORM等)

让每一个想学习编程的人,都能学会,都能看懂,看了都有收获! 466

C#里使用NModbus来创建一个TCP从站服务

摘要:本文介绍了一个用C#实现的Modbus TCP从站服务器,基于.NET Framework 4.6.1开发。代码使用NModbus库创建TcpListener和ModbusSlaveNetwork,支持设置IP地址、端口号和从站ID。服务器实现了数据存储初始化功能(包括线圈和保持寄存器),并提供了启动/停止操作的UI界面和日志记录功能。该解决方案适用于需要调试Modbus TCP协议的场景,特别适合无法升级到更高版本.NET Framework的环境。

大坡3D软件开发 477

机器学习特征选择-t检验

在特征选择的过程中通过计算检验统计量值,比较特征之间的统计量的大小,并降序排列,选取统计值较高的特征,从而起到去除差别小的特征(此差别小的特征难以区分不同的额类别)的目的。 以t检验(Student's t test)为例: 假设检验 通过比较两类样本的随机变化,通过计算其p值决定是否拒绝零假设,也即是说:通过计算p值,若p值小于某一阈值则认为两个样本具有显著差异,两个样本是不同的,此时拒绝...

heda3的博客 6700

C#进阶实战:异步编程、LINQ表达式树与依赖注入深度解析

在C#开发中,异步编程和LINQ是提升应用性能与可维护性的核心技术。异步编程通过async/await机制,利用Task状态机与线程池协作,在I/O密集型场景下避免线程阻塞,显著提升系统吞吐量。其技术价值在于用同步代码风格编写异步逻辑,同时通过ConfigureAwait(false)优化上下文切换。LINQ则通过IQueryable<T>与表达式树,将查询逻辑转换为SQL等目标语言,在数据源端执行过滤,大幅减少内存开销与网络传输。依赖注入作为控制反转的实现,通过管理服务生命周期(Transient、Sco

weixin_34216107的博客 401

利用baostock获取上市公司财务指标

利用baostock获取上市公司的财务指标 1、导入模块,登录baostock import baostock as bs import pandas as pd import time # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) 2、查询股票代码、行业板块 # 查询股票代码 rs=.

firefox_yau的博客 2097

LINQ的执行时间

LINQ的查询执行遵循以下原则:1、一般情况下(除了下面第三条说的情况),LINQ都是延迟执行,原因:以DLINQ为例,越晚被执行,对业务逻辑的理解就越清晰,DLINQ查询对数据库的请求压力越小。编译器对LINQ查询优化可作的事情越多。2、由于是延迟执行,也就是调用的时候才去执行。这样调用一次就被执行一次,这样就具备了重复执行的功能,参看之前的几个重复执行的例子。而这个重复执行是不需要再此

阿龙的专栏 1057

芒果YOLO11改进59:分类损失函数Loss篇FocalLoss:即插即用|最新改进FocalLoss损失函数,提高处理不平衡数据分类场景下的任务性能,提升YOLO11检测精度

即插即用|最新改进FocalLoss损失函数,提高处理不平衡数据分类场景下的任务性能,提升YOLO11检测精度

包括YOLOv5、YOLOv7、YOLOv8等模型改进 548

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

[转]什么时候用LINQ?

      社区里经常有人问这样的问题:“什么时候用LINQ?”。     什么时候用LINQ?为什么用LINQ?LINQ有什么好处?     1. 首先,如果你们的项目组没有SQL很强的人,我还是很希望你用LINQ。     2. 如果你是一个反对写存储过程,反对将业务逻辑带入数据库层,并且坚定地认为数据库只是发挥持久化数据作用的人,我觉得你也会很喜欢LINQ的...

stoco的专栏 207

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

EF Core查询缓存避坑指南,90%开发者忽略的性能陷阱全解析

揭秘Entity Framework Core查询缓存的正确使用方式,避免常见性能陷阱。涵盖高频查询场景、缓存命中条件与ILocalMemoryCache集成技巧,提升数据访问效率。避坑指南值得收藏。

CompiLume的博客 816

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

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

如何快速上手firebase-database-dotnet?3分钟完成实时数据库集成

firebase-database-dotnet是一款专为C#开发者打造的Firebase实时数据库客户端库,它能帮助开发者在.NET应用中轻松实现实时数据同步功能。无论是构建桌面应用、移动应用还是Web服务,这款库都能提供高效、稳定的数据交互能力。 ## 📦 1. 准备工作:环境与依赖 在开始集成前,请确保你的开发环境满足以下要求: - .NET Framework 4.5+ 或 .NET

gitblog_01069的博客 490

Apache Optiq-Linq4j 开源项目教程

Apache Optiq-Linq4j 开源项目教程 项目介绍 Apache Optiq-Linq4j 是一个开源的Java库,它提供了LINQ(Language Integrated Query)风格的API,用于在Java中进行数据查询和操作。该项目是Apache Optiq项目的一部分,旨在为Java开发者提供一种高效、灵活的数据处理方式。Optiq-Linq4j 允许开发者以声明式的方式编...

gitblog_00429的博客 1023
上一篇: System.Web.HttpContext.Current.Cache和System.Web.HttpRuntime.Cache有什么区别?
下一篇: HttpContext.Current.Cache vs. HttpRuntime.Cache
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值