apache, DSO原理

3DGS-to-PC实战指南:零代码实现3D高斯场景到点云/Mesh的高效转换 本文详细介绍了3DGS-to-PC工具如何实现3D高斯场景到点云/Mesh的高效转换,无需代码即可完成。通过实战案例和参数调优技巧,帮助用户快速掌握这一开源插件的使用方法,提升3D数据处理效率。特别适合建筑扫描、影视特效等领域的专业人士。 阅读详情

Apache HTTP服务器是一个模块化的软件,使管理者可以选择核心中包含的模块以裁剪功能。可以在编译时选择被静态包含进httpd二进制映象的模块,也可以编译成独立于主httpd二进制映象的动态共享对象DSO,DSO模块可以在编译服务器之后编译,也可以用Apache扩展工具(apxs)编译并增加。

本文阐述如何使用DSO模块及其工作原理。

工作原理

DSO是Dynamic Shared Objects(动态共享目标)的缩写,它是现代Unix派生出来的操作系统都存在着的一种动态连接机制。它提供了一种在运行时将特殊格式的代码,在程序运行需要时,将需要的部分从外存调入内存执行的方法。Apache在1.3以后的版本后开始支持它。因为Apache早就使用一个模块概念来扩展它的功能并且在内部使用一个基于调度的列表来链接扩展模块到Apache核心模块.所以,Apache早就注定要使用DSO来在运行时加载它的模块。

让我们先来看一下Apache本身的程序结构:这是一个很复杂的四层结构--每一层构建在下一层之上。
第四层是用Apache模块开发的第三方库--比如open ssl一般来说在Apache的官方发行版中这层是空的,但是在实际的Apache结构中这些库构成的层结构肯定是存在的。

第三层是一些可选的附加功能模块--如mod_ssl,mod_perl。这一层的每个模块通常实现的是Apache的一个独立的分离的功能而事实上这些模块没有一个是必须的,运行一个最小的Apache不需要任何一个此层的模块。

第二层是Apache的基本功能库-这也是Apache的核心本质层--这层包括Apache内核,http_core(Apache的核心模块),它们实现了基本HTTP功能(比如资源处理(通过文件描述符和内存段等等),保持预生成(pre-forked)子进程模型,监听已配置的虚拟服务器的TCP/IP套接字,传输HTTP请求流到处理进程,处理HTTP协议状态,读写缓冲,此外还有附加的许多功能比如URL和MIME头的解析及DSO的装载等),也提供了Apache的应用程序接口(API)(其实Apache的真正功能还是包含在内部模块中的,为了允许这些模块完全控制Apache进程,内核必须提供API接口),这层也包括了一般性的可用代码库(libap)和实现正则表达式匹配的库(libregex)还有就是一个小的操作系统的抽象库(libos)。

最低层是与OS相关的平台性应用函数,这些OS可以是不同现代UNIX的变种,win32,os/2,MacOS甚至只要是一个POSIX子系统。

apache模块功能分层

                                           图1 apache模块功能分层

在这个复杂的程序结构中有趣的部分是---事实上第三层和第四层与第二层之间是松散的连接,而另一方面第三层的模块间是互相依赖的--因这种结构造成的显著影响就是第三层和第四层的代码不能静态地连接到最低层平台级的代码上。因此DSO模式就成了解决它的一种手段。结合DSO功能,这个结构就变得很灵活了,可以让Apache内核(从技术上说应该是mod_so模块而不是内核)在启动时(而不是安装时)装载必要的部分以实现第三层和第四层的功能。

现代类Unix的系统都有一种叫动态共享对象(DSO)的动态连接/加载的巧妙的机制,从而可以在运行时刻,将编译成特殊格式的代码加载到一个可执行程序的地址空间。

加载的方法通常有两种:其一是,在可执行文件启动时由系统程序ld.so自动加载;其二是,在执行程序中手工地通过Unix加载器的系统接口执行系统调用dlopen()/dlsym()以实现加载。

按第一种方法,DSO通常被称为共享库(shared libraries)或者DSO库(DSO libraries),使用libfoo.so或者libfoo.so.1.2的文件名,被存储在系统目录中(通常是/usr/lib),并在编译安装时,使用连接器参数-lfoo建立了指向可执行程序的连接。通过设置连接器参数-R或者环境变量LD_LIBRARY_PATH,库中硬编码了可执行文件的路径,使Unix加载器能够定位到位于/usr/lib的libfoo.so,以解析可执行文件中尚未解析的位于DSO的符号。

通常,DSO不会引用可执行文件中的符号(因为它是通用代码的可重用库),也不会有后继的解析动作。可执行文件无须自己作任何动作以使用DSO中的符号,而完全由Unix加载器代办(事实上,调用ld.so的代码是被连入每个可执行文件的非静态运行时刻启动代码的一部分)。动态加载公共库代码的优点是明显的:只需要在系统库libc.so中存储一个库代码,从而为每个程序节省了磁盘存储空间。

按第二种方法,DSO通常被称为共享对象(shared objects)或者DSO文件(DSO files),可以使用任何文件名(但是规范的名称是foo.so),被存储在程序特定的目录中,也不会自动建立指向其所用的可执行文件的连接,而由可执行文件在运行时自己调用dlopen()来加载DSO到其地址空间,同时也不会进行为可执行文件解析DSO中符号的操作。Unix加载器会根据可执行程序的输出符号表和已经加载的DSO库自动解析DSO中尚未解析的符号(尤其是无所不在的libc.so中的符号),如此DSO就获得了可执行程序的符号信息,就好象是被静态连接的。

最后,为了利用DSO API的优点,执行程序必须用dlsym()解析DSO中的符号,以备稍后在诸如指派表等中使用。也就是说,执行程序必须自己解析其所需的符号。这种机制的优点是允许不加载可选的程序部件,直到程序需要的时候才被动态地加载(也就不需要内存开销),以扩展程序的功能。

虽然这种DSO机制看似很直接,但至少有一个难点,就是在用DSO扩展程序功能(即第二种方法)时为DSO对可执行程序中符号的解析,这是因为,“反向解析”可执行程序中的DSO符号在所有标准平台上与库的设计都是矛盾的(库不会知道什么程序会使用它)。实际应用中,可执行文件中的全局符号通常不是重输出的,因此不能为DSO所用。所以在运行时刻用DSO来扩展程序功能,就必须找到强制连接器输出所有全局符号的方法。

共享库是一种典型的解决方法,因为它符合DSO机制,而且为操作系统所提供的几乎所有类型的库所使用。另一方面,使用共享对象并不是许多程序为扩展其功能所采用的方法。

截止到1998年,只有少数软件包使用DSO机制在运行时刻实际地扩展其功能,诸如Perl 5(通过其XS机制和DynaLoader模块), Netscape Server等。从1.3版本开始,Apache也加入此列,因为Apache已经用了基于指派表(dispatch-list-based)的方法来连接外部模块到Apache的核心。所以,Apache也就当然地在运行时刻用DSO来加载其模块。

优点和缺点

上述基于DSO的功能有如下优点:

  • 由于服务器包的装配工作可以在运行时刻使用httpd.conf的配置命令LoadModule来进行,而不是在编译中使用configure来进行,因此显得更灵活。比如:只需要安装一个Apache,就可以运行多个不同的服务器实例(如标准&SSL版本,浓缩的&功能加强版本[mod_perl, PHP3],等等)。
  • 服务器包可以在安装后使用第三方模块被轻易地扩展。这至少对厂商发行包的维护者有巨大的好处,他可以建立一个Apache核心包,而为诸如PHP3, mod_perl, mod_fastcgi等扩展另建附加的包。
  • 更简单的Apache模块原型。使用DSO配合apxs,可以脱离Apache源代码树,仅需要一个apxs -i和一个apachectl restart命令,把开发的模块新版本纳入运行中的Apache服务器。

DSO有如下缺点:

  • 由于并不是所有的操作系统都支持动态加载代码到一个程序的地址空间,因此DSO机制并不能用于所有的平台。
  • 由于Unix加载器有必须进行的符号解析的开销,服务器的启动会慢20%左右。
  • 在某些平台上,独立位置代码(positon independent code[PIC])有时需要复杂的汇编语言技巧来实现相对寻址,而绝对寻址则不需要,因此服务器在运行时会慢5%左右。
  • 由于DSO模块不能在所有平台上为其他基于DSO的库所连接(ld -lfoo),比如,基于a.out的平台通常不提供此功能,而基于ELF的平台则提供,因此DSO机制并不能被用于所有类型的模块。或者可以这样说,编译为DSO文件的模块只能使用由Apache核心、C库(libc)和Apache核心所用的所有其他动态或静态的库、含有独立位置代码的静态库(libfoo.a)所提供的符号。而要使用其他代码,就只能确保Apache核心本身包含对此代码的引用,或者自己用dlopen()来加载此代码。

模块实现

相关模块

相关指令

Apache对独立模块的DSO支持是建立在被静态编译进Apache核心的mod_so模块基础上的,这是core以外唯一不能作为DSO存在的模块,而其他所有已发布的Apache模块,都可以通过安装文档中阐述的配置选项--enable-module=shared,被独立地编译成DSO并使之生效。一个被编译为mod_foo.so的DSO模块,可以在httpd.conf中使用mod_so的LoadModule指令,在服务器启动或重新启动时被加载。

用命令行参数-l可以查看已经编译到服务器中的模块。

新提供的支持程序apxs(APache eXtenSion)可以在Apache源代码树以外编译基于DSO的模块,从而简化Apache DSO模块的建立过程。其原理很简单:安装Apache时,配置命令make install会安装Apache C头文件,并把依赖于平台的编译器和连接器参数传给apxs程序,使用户可以脱离Apache的发布源代码树编译其模块源代码,而不改变支持DSO的编译器和连接器的参数。

用法概要

Apache 2.0的DSO功能简要说明:

  1. 编译并安装已发布的Apache模块,比如编译mod_foo.c为mod_foo.so的DSO模块:

$ ./configure --prefix=/path/to/install --enable-foo=shared
$ make install

  1. 编译并安装第三方Apache模块, 比如编译mod_foo.c为mod_foo.so的DSO模块:

$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared
$ make install

  1. 配置Apache以便共享后续安装的模块:

$ ./configure --enable-so
$ make install

  1. 用apxs在Apache源代码树以外编译并安装第三方Apache模块,比如编译mod_foo.c为mod_foo.so的DSO模块:

$ cd /path/to/3rdparty
$ apxs -c mod_foo.c
$ apxs -i -a -n foo mod_foo.la

共享模块编译完毕以后,都必须在httpd.conf中用LoadModule指令使Apache激活该模块。

参考资料:

Ralf S. Engelschall--     Apache 1.3 Dynamic Shared Object (DSO) Support

Apache2.0 文档-- 动态共享对象
Codex CLI 手机号验证失败?5 种接码平台实测对比与绕过地区限制的 3 步操作 揭示 Codex CLI 手机号验证失败的真实原因在于上下文污染而非网络问题,分析其通过 ASN、Accept-Language 和 TLS SNI 三重加权风控的机制,并实测对比 5 种接码平台在 DNS 解析路径、ASN 干净度和复用间隔上的差异,提出剥离浏览器指纹、固化 TLS SNI、隔离 阅读详情

相关推荐

CAN总线错误帧全解析:从数据包到硬件层的故障树分析

本文深入解析CAN总线错误帧的故障树分析方法,从数据包到硬件层全面剖析错误机制。通过物理层信号测试、数据链路层错误解码和应用层协议排查,提供系统化的诊断框架。结合CANoe配置和示波器波形分析,帮助工程师快速定位总线故障,提升系统可靠性。

weixin_26742753的博客 488

apache各个配置文件的详细说明

默认情况下,当处理一个请求并不需要访问文件内部的数据时(比如发送一个静态的文件内容),如果操作系统支持,Apache 将使用 sendfile 将文件内容直接发送到客户端而并不读取文件。包括:服务器池管理,多语言错误消息,动态目录列表形式配置,语言设置,用户家庭目录,请求和配置上的实时信息,虚拟主机,分布式认证和版本控制,Apache 默认设置,支持 HTML4/XHTML1 等。根据 MIMEMagicFile 文件的规则,Apache 通过检查文件开始的几个字节,来判定文件的 MIME 类型依据。

雾隐雾现的至渝博客 5989

【第一篇】Xshell连接服务器部署前后端项目(连接服务器)

利用Xshell连接服务器部署前后端项目

blog 1073

DSO原理与apache模块

关键词:apache, DSO, apxs, LoadModule,mod_soApache HTTP服务器是一个模块化的软件,使管理者可以选择核心中包含的模块以裁剪功能。可以在编译时选择被静态包含进httpd二进制映象的模块,也可以编译成独立于主httpd二进制映象的动态共享对象DSO,DSO模块可以在编译服务器之后编译,也可以用Apache扩展工具(apxs)编译并增加。本文阐述如何使

denny的专栏 2840

最佳解决Maven同一依赖多版本共存问题,重复依赖(同一个jar包,多个版本)-maven-shade-plugin

公司的历史项目在导出功能上引用的是poi-3.12版本,后续再做word模板导出功能时用到了poi-3.15版本,升级完后发现项目的很多导出功能都瘫痪了。用旧版本,新功能无法使用;用新版本,旧功能瘫痪,且整改的工作量比较大。使用maven-shade-plugin,将某个版本的依赖名称进行修改,重新引入即可。

S_White_Island的博客 1万+

DSP(数字信号处理器)技术概要

数字信号处理器(digital signal processor,DSP)是一种用于数字信号处理的可编程微处理器,它的诞生与快速发展,使各种数字信号处理算送得以实时实现,为数字信号处理的研究和应用打开了新局面,提供了低成本的实际工作环境和应用平台,推动了新的理论和应用领域的发展。目前,DSP技术在通信、航空、航天。雷达、工业控制、医疗、网络及家用电器等各个领域都得到了广泛应用。 1.1 DSP系统和芯片的结构特点1.1.1 DSP系统的基本结构通过传感数将非电物理量转换为模拟电信号,预处理一般包括放大器和滤

m0_46582485的博客 2万+

第十一节 动态符号对象(DSO, Dynamic Symbol Object)

You might know so(shared object) or dll(dynamic link library). Essentially, DSO is dependent on so/dll. Now, we call so/dll 'dynamic library' to distinguish from dso. 阅读全文

Cobra 325

CANoe: Panel的上位机控制方法

本文介绍了不同于IG的报文控制方法,实现了Panel面板的控制模式。

Jonsnow3zz的博客 1407

Apache的配置详解

ServerRoot 配置 ServerRoot "" 主要用于指定Apache的安装路径,此选项参数值在安装Apache时系统会自动把Apache的路径写入。Windows安装时,该选项的值为Windows安装的路径,Linux安装时该选项值为编译时选择的路径 Mutex default:logs 互斥:允许你为多个不同的互斥对象设置互斥机制【mutex mechanism】和互斥文件...

Jack huang 的技术笔记 656

Plecs电力电子仿真专业教程-第一季 补充课程 Plecs的安装教程与软件下载

PLECS4.1.64免安装版本–点我下载 Plecs.Standalone-3.7.2版本--关注加私信给我可以提供下载链接 补充课程 Plecs的安装教程与软件下载 详细介绍Plecs软件的安装过程

1万+

基于YOLOv5/v8/v10的答题卡填涂识别与评分系统(附数据集+UI界面+完整代码)

在教育信息化的大背景下,传统的手工阅卷方式正在被智能化技术所取代。答题卡识别作为标准化考试的核心环节,其准确率和效率至关重要。本文将详细介绍如何利用YOLO系列目标检测算法(YOLOv5、YOLOv8、YOLOv10)构建一个答题卡填涂识别与评分系统。文章从数据集的制作与标注开始,逐步深入到模型的训练、评估与对比,最后基于PyQt5设计了一个用户友好的桌面端UI界面,实现了从图像输入到得分输出的全流程自动化。

YOLO 634

Apache动态共享对象(DSO)支持

为了概述Apache HTTP Server 2.x的DSO功能,这里有一个简短的摘要(步骤):第1步 - 构建并将分布式Apache httpd模块(例如mod_foo.c)安装到自己的DSOmod_foo.soShell第2步 - 配置Apache HTTP Server并启用所有模块。服务器启动期间仅加载基本集。可以通过激活或取消激活httpd.conf中的LoadModule指令来更改已加载模块的集合。Shell第3步 - 有些模块仅对开发人员有用,不会构建。使用模块时全部设置。

unber的博客 1106

手把手教您解决 AdGuard Home DNS重写功能失效的问题

AdGuard Home 设置了 DNS 重写,规则明明没问题,客户端却死活解析不到内网 IP?🤯 别急着重装!🚫 本文手把手教你如何解决软路由 DNS 解析“玄学”故障!🛠️🚀

XiaoqiangClub的博客 917

Apache DSO模块原理

DSO究竟是什么?事实上DSO是Dynamic SharedObjects(动态共享目标)的缩写,它是现代Unix派生出来的操作系统都存在着的一种动态连接机制。它提供了一种在运行时将特殊格式的代码,在程序运行需要时,将需要的部分从外存调入内存执行的方法。Apache在1.3以后的版本后开始支持它。因为Apache早就使用一个模块概念来扩展它的功能并且在内部使用一个基于调度的列表来链接扩展模块到Ap

yishouwangnian的博客 1007

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

apache1.3 DSO模式原理

  事实上DSO是Dynamic Shared Objects(动态共享目标)的缩写,它是现代Unix派生出来的操作系统都存在着的一种动态连接机制。它提供了一种在运行时将特殊格式的代码,在程序运行需要时,将需要的部分从外存调入内存执行的方法。Apache在1.3以后的版本后开始支持它。因为Apache早就使用一个模块概念来扩展它的功能并且在内部使用一个基于调度的列表来链接扩展模块到...

weixin_34033624的博客 136

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Apache DSO -- 动态共享对象(DSO)

Apache DSO -- 动态共享对象(DSO) DSO 究竟是什么?事实上 DSO 是 Dynamic SharedObjects(动态共享目标) 的缩写,它是现代 Unix 派生出来的操作系统都存在着的一种动态连接机制。它提供了一种在运行时将特殊格式的代码,在程序运行需要时,将需要的部分从外存调入内存执行的方法。 Apache 在 1.3 以后的版本后开始支持它。因为 Apache 早就使...

Blau的博客 673

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

APACHE工作原理详解

Apache HTTP服务器是一个模块化的软件,使管理者可以选择核心中包含的模块以裁剪功能。可以在编译时选择被静态包含进httpd二进制映象的模块,也可以编译成独立于主httpd二进制映象的动态共享对象DSO,DSO模块可以在编译服务器之后编译,也可以用Apache扩展工具(apxs)编译并增加。   本文阐述如何使用DSO模块及其工作原理。   工作原理   DSO...

weixin_33919941的博客 255

Apache中关于模块的几个重要的概念

  转载请注明来源:http://blog.youkuaiyun.com/tingya                                                       Apache中关于模块的几个重要的概念 本文分析了Apache中关于模块的几个重要的概念////////////////////////////////////////////////////////

1266

apache-DOS

对DSO的理解还不是特别深刻,所以把自己查来的资料整理一下并想就此作一个总结。暂时先把资料堆到blog里面了,有时间再整理总结。 一、以下源于《Apache HTTP Server Version 2.2 文档》 动态共享对象(DSO)支持 Apache HTTP服务器是一个模块化的软件,管理员可以通过选择服务器中包含的模块进行功能增减。模块可以在编...

aegh86354的博客 242

apache 重点难点

apache 重点难点 apache 重点难点 在于难以理解其工作原理,因为它是c 写的;其模块众多;功能强大而复杂。 其配置也是格式不齐, 比如一下子是 key value , 一下子就成了 xml。 转载: http://blog.163.com/lgh_2002/blog/static/440175262010527852413/ Apa...

weixin_30377461的博客 114

apache工作原理

apache 模块化设计的服务,核心只包含主要功能,扩展功能都是通过模块实现的。不同的模块可以被静态的编译进程序,也可以动态加载; 模块的动态加载通过DSO(dynamic shared object)实现; 可以通过apxs进行编译相应的模块;(实验后补) http 服务器模块化软...

chuanzhu9369的博客 189

APACHE工作原理详解 (三)

为什么80%的码农都做不了架构师?>>> ...

weixin_34163741的博客 331

在ApacheHTTPD服务器中使用DSO完全分析

Apache HTTP 服务器是一个模块化(或说积木式)的程序,管理员可以选择一些模块来增加服务器的某些功能。这些模块,可以在创建服务器程序时静态地编译到httpd服务器的二进制代码中,也可以编译成一些独立于服务器程序的Dynamic Shared Objects (DSOs)文

深度Java 2380

Apache模块管理

Apache是一个模块化设计的服务,核心只包含主要功能,扩展功能通过模块实现,不同模块可以被静态的编辑进程序,也可以动态加载。 # /usr/local/apache/bin/httpd -M 查看模块 # /usr/local/apache/bin/httpd -l 查看静态编译如程序的模块 Apache模块的动态加载,使用DSO实现: DSO:Dynamic share o...

weixin_30763455的博客 193
上一篇: curl简单介绍
下一篇: PHP扩展导出类
逸学堂
博客等级 码龄23年 1104粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值