VI - 从入门到精通

2、vi与Vim编辑器:从入门到精通 本文是一篇关于vi与Vim编辑器的详细介绍,从入门知识到精通技巧,涵盖编辑器的发展历程、特点对比、学习资源与支持,以及版本演变等内容。适合想要深入了解Unix系统下的文本编辑工具的读者,同时也提供了学习示例与技术联系支持信息。通过本文,读者可以全面掌握vi与Vim的核心功能及其在现代编程中的应用。 阅读详情

VI - 从入门到精通

null Wilbur Lang

〖 返回〗〖转发〗

VI - 从入门到精通 (作者Wilbur Lang) 
无论在什么系统上,文本编辑器也许都算得上是最普通和最有用的工具了。一个文本编辑器是一个创建、修改文本和数据对象的程序。他和字处理程序和桌面出版程序的区别是他只处理 plain ASCII 文本,没有格式信息。后者更倾向于处理复杂的文档。一个典型的字处理软件都有图形化的用户界面 (GUI)和 "what-you-see-is-what-you-get" 的效果。 

文本编辑器的一般用途是处理简单的 ASCII 文本、源程序、e-mail等等。因此,他们都对相应的处理对象有一定的扩展。例如格式化相应的程序语言 (C++, Lisp, HTML 等)。 

我们在这里将为您介绍 UNIX 世界中最常见的编辑器:vi 。您也会发现在这个世界上还有一种人狂热地喜欢 VI。 

全屏幕编辑器 VS 行编辑器 
全屏幕编辑器就是指用户工作的时候他可以在终端上看到他所处理的文件的全部或者部分。例如在一个25行的显示终端上,他可以看到文档中的24行。在编辑的时候,你并非在处理硬盘上的实际文件,而是你的文件的一个拷贝。这个拷贝一般叫做缓存。所有对文件的增加、修改、删除操作都是对缓存的操作,只有当你保存的时候,实际的文件才有改变。所以你一定听说过要经常保存你正处理的文件的建议。这个建议对于所有类似处理的程序都有用。 

你可以想象屏幕是个在缓存中移动的视口。这个视口我们称为窗口。 

相对而言,行编辑器则不会连续的显示你正处理的文件。他一次处理一行。因此他的界面很简单。自然而然,你会认为全屏幕编辑器的好处了。 

但是,不要认为行编辑器简单的外表就一定缺乏强劲的处理能力。在行编辑器下,你能完成许多全屏幕编辑器很难完成的工作。 

什么是 vi? 
vi (一般,我们发音为 vee-eye ) 是一个几乎每个 UNIX 系统都具备的行编辑器。还有许多变种存在于许多其他的操作系统中。例如 Amiga、 Atari、Macintosh、MS-DOS、OS/2、Windows 3.1/95/NT。 

vi 和 ex的关系 
vi 和行编辑器 ex很相近。(实际上他们是一个程序!) vi 是可视化 (visual)的 ex。也就是说,你可以用 ex 开始编辑一个文件。任何时候,你都可以调用可视化的 ex。 在 vi 中,你随时可以到 ex 环境中。在后面的文章中可以看到例子。 

为什么对 vi 感兴趣? 
许多计算机用户对于 PC 机上的字处理软件很熟悉。如果你曾经用过这样的软件,也许你会对 vi 很失望。他不是一个 "what-you-see-is-what-you-get" 或 WYSIWYG 的字处理软件。然而,这样的字处理软件在典型的 UNIX 系统上是不多见的。vi 在几乎所有的 UNIX 系统下都有。 

缺乏 GUI 也许对于初学者是个障碍,但是许多高级用户认为高效率的工具是命令行的用户界面。是的,当这些键盘命令成为你的本能的反应后,生产效率将远远超越其他的编辑器。实际上对命令行的用户界面的误解来自:人们总认为自己不可能记忆那么多命令。实际上,对于命令已经是手指的舞蹈而非记忆的功劳了。 

进入和退出 vi 
用一个新程序,首先你要知道的是如何进入和退出这个程序。最简单的进入 vi 的方式是输入程序的名字和你想编辑的文件的名字。如果你没有提供文件名,vi 将开一个空的屏幕,除了左边一列有些怪符号。下面就是你将看到的屏幕: 

~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
Empty buffer 

也许最下面的一行什么东西也没有——这取决于你使用什么版本的 UNIX 系统。在这里,他显示的是 "Empty buffer," 屏幕上弯弯曲曲的符号表明那行是空的,最下面的一行显示信息或者输入的命令。在后面的章节中我们将称呼他为命令行。 

如果你输入了文件名,那么屏幕上将充满了你的文件。而文件名和行数将显示在最后一行。就象这样: 

If wise, a commander is able to recognize changing circumstances and to 
act expediently. If sincere, his men will have no doubt of the certainty of 
rewards and punishments. If humane, he loves mankind, sympathizes with others, 
and appreciates their industry and toil. If courageous, he gains victory by 
seizing opportunity without hesitation. If strict, his troops are disciplined 
because they are in awe of him and are afraid of punishment. 
Shen Pao-hsu ... said: 'If a general is not courageous he will be unable 
to conquer doubts or to create great plans.' 
~ 
~
~ 
~ 
~ 
~ 
~ 
"art1" 8 lines, 576 characters 

你应该知道的另外一件事是你该知道如何退出他。相对于你想如何对待你的缓冲,有几种办法可以达到目的。所有这些命令你必须在命令模式下输入(以后详细讲解)。为了确认你是在命令模式下,按下 ESC 直到你听到喇叭声。 

输入命令 ZZ 将保存文件然后退出。另外的方式是在 ex 模式下的。为了进入 ex 模式,输入冒号,屏幕上最下面一行将显示冒号,光标在冒号右边闪烁,等待你的命令。 

q 键将 "退出" 文件。不过前提是在你上次存盘后你没有修改文件。如果你对文件有过修改,你将不能退出,并得到下面的警告信息:No write since last change (use ! to override) 。命令 wq 可以帮你的忙,他保存文件然后退出。或者你就用 q! 来放弃你做的修改。 

表 3.1 总结了迄今为止我们讲的命令。 

表 3.1. 退出命令 
Keystrokes Result 
ZZ 保存文件,退出 
:wq 保存文件,退出(和 ZZ 类似) 
:q 退出。防止没有保存就退出。 
:q! 退出。无论保存与否,都退出。 

正式开始 
vi 的模式 
vi 是在很久以前就写的程序。在那个时候,键盘上没有现在熟悉的那么多功能键。所以,vi 设计成通过输入字符和 ESC 来控制输入和修改文本。 

可能这对于一些人来说是个遗憾,但是你会发现你不需要改变手在键盘上的位置就可以完成所有的功能。结果是你的输入将快速起来。 

为了完成交互的全屏幕编辑工作, vi 有三种模式。插入模式 (insert) 用于输入文本。在插入模式下,你输入的任何字符都将显示在屏幕并存于文件。命令 (command) 模式用于大多数编辑功能。在命令模式下,所有的输入都将产生一定的响应而不是直接到文本中,例如移动光标、删除一块文本、拷贝文本等。第三个模式是执行另外的功能,例如查找、全局替换、处理多个文件等。这种模式是基于 ex 编辑器的。 

启动 vi 
当 vi 启动后,默认的模式是命令模式。按照下面的步骤试一试:输入程序名称启动 vi : 

$ vi 

你将看到类似下面的东西: 

~ 
~ 
~ 
~ 
~ 
~ 
~ 
Empty buffer 

i--插入 
现在我们输入 "i" 进入插入模式。字符 "i" 将不会回显。此后你输入的任何东西都将显示在缓存中。现在我们来输入一段文字。 例子中的话来自英文版的孙子兵法。注意光标的位置在例子中是个下划线。 

If wise, a commander is able to recognize changing circumstances and to 
act expediently. If sincere, his men will have no doubt of the certainty of 
rewards and punishments. If humane, he loves mankind, sympathizes with others, 
and appreciates their industry and toil. If courageous, he gains victory by 
seizing opportunity without hesitation. If strict, his troops are disciplined 
because they are in awe of him and are afraid of punishment. 
Shen Pao-hsu ... said: 'If a general is not courageous he will be unable 
to conquer doubts or to create great plans.' 
~ 
~ 
~ 
~ 


Esc--Cancel 
当你输入完了,按下 Esc 键返回到命令模式。 (如果你已经处于命令模式下,按 Esc 时会听到喇叭的声音。) Esc 可以撤消未完成的命令和终止插入模式。按 Esc 后,光标将停留在你最后输入的字符的下面。 

很不幸,没有一个明显的标志表明你现在处于什么模式下。但是有简单的方法来告诉你现在你所处的模式。如果你按下键,相应的字符出现在屏幕上,那么你是在插入模式下,否则是命令模式下。如果你不能确定你现在所处的模式,那么按 Esc 两次以听到喇叭声来确信你在命令模式下。 

移动光标和简单的编辑 
是看一看基本的移动光标命令的时候了。训练训练你的手指,让他们以后自动的执行你所想的命令吧。 

最重要的移动命令 
让我们来看看有多少影响光标移动的命令。 

hh--光标左移 
首先,按 5 下 h 让光标左移动 5 个 (如果你看到 h 跑到屏幕上了的话,一定是你忘记了按 Esc )。光标现在应该在 "plans" 中的 "p" 下面 (看下面的例子): 

If wise, a commander is able to recognize changing circumstances and to 
act expediently. If sincere, his men will have no doubt of the certainty of 
rewards and punishments. If humane, he loves mankind, sympathizes with others, 
and appreciates their industry and toil. If courageous, he gains victory by 
seizing opportunity without hesitation. If strict, his troops are disciplined 
because they are in awe of him and are afraid of punishment. 
Shen Pao-hsu ... said: 'If a general is not courageous he will be unable 
to conquer doubts or to create great plans.' 
~ 
~ 
~ 
~ 

kk--光标上移 
现在我们来按 5 次 k 让光标上移 5 行。也许你该认为应该有快捷方式了。好,现在就有个简单的方法:在你要采取的行动前加上数字。按下 5k 你可以和按 5 下 k 有相同的结果了。光标现在该在 "he" 的"e"下了。 

If wise, a commander is able to recognize changing circumstances and to 
act expediently. If sincere, his men will have no doubt of the certainty of 
rewards and punishments. If humane, he loves mankind, sympathizes with others, 
and appreciates their industry and toil. If courageous, he gains victory by 
seizing opportunity without hesitation. If strict, his troops are disciplined 
because they are in awe of him and are afraid of punishment. 
Shen Pao-hsu ... said: 'If a general is not courageous he will be unable 
to conquer doubts or to create great plans.' 
~ 
~ 
~ 

在使用这些功能的时候有些限制的。例如使用 h 或 l 移动光标超过了一行文字的头或尾,光标将停留在头或尾部,喇叭鸣叫提醒你。 

还有其他的类似 h 和 k 的吗?看一看表3.2。最好的熟悉他们的的方法是多用他们。 

表 3.2. 常见的方向键 
命令 移动 
h 左一个字符 
j 下一行 
k 上一行 
l 右一个字符 
w, W 前一个单词 (W 忽略标点) 
b, B 后一个单词 (B 忽略标点) 
$ 到行尾 
^ 到行首第一个非空字符 
0 行首 
G 到缓冲首 
nG 到第 n 行 



大小写的命令是有一些区别的。小写字母一般以标点区分 "words.",而大写则忽略他们。 

最重要的编辑程序 
让我们看看最简单也是最常用的编辑过程: 

修改 没有人不犯错误。所以迟早你会碰到修改你输入的文本的时候。实际上花在字处理上的大多数时间是修改而不是输入新的东西。因此,你要知道如何方便地修改就很重要。 

x--删除一个字符 删除文字的最简单的方式是用 x。这个命令的结果是光标所处的字符的消失,后面的文字左移动。如果你删除的字符是一行最后的一个字符,那么光标将向左移动一个,这样光标就不会停留在不存在的字符的下面了。假如没有任何文字了,喇叭就叫。 

d--删除对象 这个命令的右边还要有一定的文字对象。文字对象就是一块文字。他右边接的就是在控制光标移动的那些字符。例如 w 表示向前一个单词,那么 dw 将删除下一个单词。5w 表示前进 5 个单词,那么 d5w 将删除他们。 

dd--删除一行 最常用的 d 系列命令之一。和前面一样, 5dd 将删除 5 行 

D--整个删除 大写形式的 D 用来删除从光标到行尾。和 d$ 一样效果。 

u--恢复 要后悔吗?他不仅仅撤消删除,还撤消你所有的编辑工作。 

.--重复 重复编辑工作。 
 
 
 


 


上文所述非常经典,不过只能算是入门。 
这里提供一些高级命令: 
1、配置VI 
命令模式下 
set autoindent(ai)自动缩进 
set smartindent(si)自动缩进,如果你不进行C编程等,不必过问该选项 
set number(nu)顾名思义,显示行号 
set rule(ru)显示行列,就象tc2.0或VC里一样 
以上几个是最常用的,除此以外还有大量不太常用的选项可由 
set all列出(够你看的了,100多项吧) 
PS:如此使你的设置永久生效: 
在UNIX类操作系统(linux etc)的用户目录下,生成 
.vimrc或.exrc(点号不是笔误),然后把上述命令打进去,对相当于DOS下配置文件的概念。 
2、引人注意的小技巧: 
A、倒序排列所有行 
:1,$m0(PS 倒序排列指定行如1-10行呢?) 
B、将指定范围的所有小写字母转换为大字 
方法一:shift+~(数字1左边的邻居) 
方法二::m,n ! tr a-z A-Z 
方法三::m,n s/(.)/u1/g (是数字1) 
C、删除所有空行 
:g/^$/d 
D、在所有行尾加上字符串如asdf 
:1,$s/$/asdf/(在所有行首加上指定字符串呢) 
E、不离开VI打开另一个文件 
:e filename 
F、用VI编辑多个文档 
vi *.c 
在这些文档中切换 
:n(看一看set autowrite功能) 
G、g与v 
g表示寻找匹配的行,然后执行某种操作,如打印显示,删除、拷贝 
v表示反向的匹配,然后执行如上的某种操作。 
没时间了,以后再说

责任编辑:知识库管理员(2001-01-03 17:07)
汽车底盘技术解析:从悬架调校到智能化,如何评价国产车底盘实力 汽车底盘作为决定车辆驾驶质感、安全性和耐久性的核心系统,其技术内涵远不止于悬架结构。从行驶系、转向系到制动系的协同工作,底盘调校是一门融合机械原理与工程实践的艺术。在电动化与智能化浪潮下,底盘技术正经历从被动适应到主动响应的变革,CDC可变阻尼减震器和空气悬架等技术的应用,让底盘具备了通过OTA升级实现性能优化的可能。国产汽车品牌如奇瑞、吉利等,通过平台化架构研发与调校经验积累,正推动底盘技术从“能用”向“好用”乃至“塑造独特驾驶风格”迈进。理解底盘技术,需超越简单的结构对比,关注其在实际路况中的滤震性、支 阅读详情

相关推荐

保姆级教程:在Windows 10/11上安装配置KNIME 5.8.0(含中文文本库更新)

本文提供在Windows 10/11系统上安装配置KNIME 5.8.0的详细指南,包括中文文本库更新和性能优化方案。从环境准备、安装流程到中文文本处理能力强化,逐步指导用户搭建高效的数据分析环境,特别针对国内网络环境和中文用户需求提供实用解决方案。

weixin_29081101的博客 670

VI - 从入门到精通之二

VI - 从入门到精通之二 作者:Wilbur Lang 正式开始 vi 的模式 vi 是在很久以前就写的程序。在那个时候,键盘上没有现在熟悉的那么多功能键。所以,vi 设计成通过输入字符和 ESC 来

menuconfig的专栏 739

ESP32-S3开发板实战:5分钟搞定智能门铃的音视频通话功能(附源码)

本文详细介绍了如何利用乐鑫ESP32-S3开发板快速实现智能门铃的实时音视频通话功能。通过ESP-ADF框架和RTC服务,开发者可在五分钟内完成环境搭建与核心功能调试,并附有源码和关键配置详解,为嵌入式音视频应用开发提供了高效实践路径。

web99的专栏 527

vi入门到精通

vi入门到精通转自:http://www.cnblogs.com/uhome/archive/2010/03/11/1683563.htmlVI是在Linux命令行下常用的文本编辑工具,在服务配置管理过程中经常用到;vi的常见的使用指南,互联网上随处可见,但仅能满足初学者对文档编辑的需求。这里就我自己在使用过程中通常用到的一些技巧操作方法作一个简单总结;重点是在进入vi编辑界面后,对文档的编辑替换方法和多文档的切换做一些提示,同时附带基本操作不详细描述(技巧部分以▲标注)。内容目录如下第一课 打开新文件

MyHell 400

摄像头读取出现VIDIOC_STREAMON: No space left on device 错误

先说下原因,linux中为usb camera提供了一个标准的V4L2的驱动以方便使用,只要符合驱动规范就可以实现即插即用usb camera设备,即免驱动安装。 但市面上的USB 摄像头都是2.0的。usb bus的 bandwidth是有限的,而V4L2驱动采用的是贪心原则,即camera会要求获取最大带宽;因此将两个camera接入一路usb bus,打开第二个camera(尤其是采用YUV...

houge101的博客 9290

团队管理中最棘手的6个问题

研发团队的管理棘手问题,大多集中在。

xiaolyuh的专栏 747

VI 从入门到精通

Linux-vi介绍编 (1) vi快速入门我是pico的使用者,在我是redhat linux使用者的时候,     当时我觉得pico给我的感觉很亲切,功能也很强大.          了FreeBSD之後,突然发现竟然没有pico,需要额外安装     pine才能够取得.但这也无妨,反正安装很快...          直到有一天,当我要做取代的动作..这时....pico就....

adobil的专栏 1489

纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理

分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。

kkchenjj的博客 1100

VI - 从入门到精通之一

VI - 从入门到精通之一 作者:Wilbur Lang 无论在什么系统上,文本编辑器也许都算得上是最普通和最有用的工具了。一个文本编辑器是一个创建、修改文本和数据对象的程序。他和字处理程序和桌面出版程序的区别是他只处理 plain ASCII 文本,没

menuconfig的专栏 710

ThingsBoard教程(十九):规则节点概览介绍

在ThingsBoard的CE V2.5.6版本中,一共有这几种类型在每一种类都有包含了多个节点,每一种类型的节点都有不同的颜色表示本篇文章做一个简单的概括,后续的文章会详细讲解每一个种类的节点如何使用,每一个节点的使用。一共有10个,使用黄色表示 过滤器节点用于消息过滤和路由。一共有9个,使用绿色 属性节点用于更新传入消息的元数据。一共三个,使用蓝色 转换节点用于更改传入消息字段,如发起者、消息类型、有效负载和元数据。一共21个,使用红色标识 动作节点根据传入的消息执行各种动作。一共9个,使用黄色表示,

知无涯 1万+

PointNet++改进策略 :模块改进 | x-Conv | PointCNN, 结合局部结构与全局排列提升模型性能

这篇论文介绍了一种名为PointCNN的方法,旨在从点云(point cloud)数据中学习特征。传统卷积神经网络(CNN)在处理规则网格数据(如图像)时非常有效,但由于点云是无序且不规则的,直接在其上应用卷积操作会导致形状信息丢失,并对点的排列顺序敏感。为了解决这一问题,论文提出了一种X-Conv操作。该方法通过学习一种来重新排列点云中的点并加权输入特征。然后,将典型的卷积操作应用于转换后的特征。这种方法将传统的 CNN 扩展到点云特征学习,并命名为PointCNN。

u012901740的博客 2300

Linux vi模式:从入门到精通

模式虽然初学时有挑战,但它的高效性和灵活性使其成为Linux用户不可或缺的工具。通过掌握命令模式和插入模式的切换,以及常用操作和高级技巧,你将能够快速编辑文本、编写代码,甚至管理多个文件。希望这篇博客能帮助你更好地理解和使用。的增强版)是一个经典的文本编辑器。尽管它的学习曲线稍显陡峭,但一旦掌握,你将发现它是一个极其高效的工具。本文将带你从基础到进阶,全面了解。的核心特点,也是初学者最容易感到困惑的地方。的命令模式难以适应,可以尝试。,你会发现它的强大之处!在Linux系统中,这种模式切换的设计是。

C'mon的博客 741

Headless Browser 反检测:如何在自动化测试和爬虫中模拟真实用户环境和指纹,以规避检测?

这是最基本的操作,你需要将 Headless Browser 的 User-Agent 修改成一个真实的 User-Agent。我是你们的老朋友,代码界的段子手,今天咱们来聊聊一个让爬虫工程师和自动化测试工程师头疼,但又不得不面对的问题:Headless Browser 的反检测。Headless Browser 的反检测是一个持续对抗的过程,网站的反爬虫机制会不断升级,你需要不断地学习新的反检测技巧。以上只是一些基本的反检测手段,如果你的目标网站的反爬虫机制比较高级,那么你需要使用更高级的技巧。

weixin_41455464的博客 1657

linux vi详细教程,Linux vi 深入简出,从入门到精通

简介vi 是 unix 平台下一个著名的的文本编辑器,熟练使用它能极大地提高你的效率。而 vim 又作为 vi 的增强版,功能强大、高度可定制,被社区用户极大地推崇。快速入门三种模式插入模式 (insert) 用于输入文本。在插入模式下,你输入的任何字符都将显示在屏幕并存于文件。命令 (command) 模式用于大多数编辑功能。在命令模式下,所有的输入都将产生一定的响应而不是 直接到文本中,例如移...

weixin_33240461的博客 354

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

计算机控制技术及应用

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

VI - 从入门到精通之一(转)

VI - 从入门到精通之一(转)VI - 从入门到精通之一 作者:Wilbur Lang 无论在什么系统上,文本编辑器也许都算得上是最普通和最有用的工具了。一个文本编辑器是一个创建、修改文本和数据对象的程序。他和字处理程序和桌面...

cizn2013的博客 144

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Linux vi 深入简出,从入门到精通

简介 vi 是 unix 平台下一个著名的的文本编辑器,熟练使用它能极大地提高你的效率。而 vim 又作为 vi 的增强版,功能强大、高度可定制,被社区用户极大地推崇。 快速入门 三种模式 插入模式 (insert) 用于输入文本。在插入模式下,你输入的任何字符都将显示在屏幕并存于文件。 命令 (command) 模式用于大多数编辑功能。在命令模式

半遮雨的博客 301

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Linux vi 编辑器完全指南:从入门到精通

在 Linux 系统的字符终端环境中,vi 编辑器是无可替代的核心工具。无论是服务器运维、脚本编写还是系统配置文件修改,熟练运用 vi 都能极大提升工作效率。它无需图形界面支持,仅通过键盘操作即可完成所有编辑任务,凭借轻量、高效、稳定的特性,成为每一位 Linux 学习者的必备技能。本文将从基础操作到高级技巧,全方位拆解 vi 编辑器的使用方法,结合详细示例,助力你快速掌握这一强大工具。一、vi 编辑器基础认知1.1 起源与定位。

2603_94969794的博客 695

Linux基础入门二——————精通vi/vim

一、什么是vi/vim 二、vi/vim实战 1、vi的三种模式 命令模式、编辑模式、插入模式 2、vi操作说明 3、命令行模式

yyyyyyyyyyyy 822
上一篇: Linux命令与征服
下一篇: ls 命令选项详解
hem
hem
博客等级 码龄26年 19粉丝 287原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值