精华内容
下载资源
问答
  • 写一手好字:硬笔书法轻松自学指南(知乎周刊 Plus) 知乎编辑团队 楷书,认知好字的范本 2017-03-16 《黄自元间架结构九十二法》 选本好字帖 2017-03-16 先谈书体。 前人对练习书法的程序,各有主张。有的认为...

    写一手好字:硬笔书法轻松自学指南(知乎周刊 Plus)

    知乎编辑团队

     楷书,认知好字的范本
     2017-03-16
    《黄自元间架结构九十二法》

     选本好字帖
     2017-03-16
    先谈书体。
    前人对练习书法的程序,各有主张。有的认为应由书体起源篆—隶—楷—行—草的演变顺序学习,有的主张先练楷书,再追上篆隶。不过篆隶在今日不会日常使用,所以不打算深入书法的朋友不用考虑。那么就是楷书和行书的书体顺序问题了。
    楷书结构严谨,笔画规范。从基本的端庄开始练起,比较实际。行书与楷书虽然差别不大,但行书笔画的起止转承,抑扬顿挫都是跟楷书一脉相承,没有楷书的基础,行书并不让人感觉清爽。楷书写得行些,就是行书行楷;行书写得草些,就是草书行草。楷书练好了,练行书是很轻易的事情。
    所以建议,以楷书为主,行书为辅,同时练起。
     2017-03-16
    书体确定了,现在来谈书派。
    同是楷书,各派的面貌都不一样。我建议,先临摹一两个月现代人的硬笔楷书如《田英章硬笔楷书》作为基础,再选用古帖临字。选好一位大家之后,就要专心临写,不要见异思迁。比如选定的是欧阳询的《九成宫醴泉铭》,就要按照「摹」「临」的方法,一步步练下去,直到意临。这时欧体的基础已经打得很扎实。如有意继续提高巩固,另开一新帖,则最好从欧体其他的帖子《皇甫君碑》《虞温恭公碑》等帖中继续巩固学习欧派楷书。然后按照同样的方法学习欧派行书。
     2017-03-16
    附上一些精良的字帖和书法大家(部分经典之作如《兰亭序》《胆巴碑》《九成宫碑》《多宝塔碑》等都有自带米字格和分析详解的书,淘宝或者书店都可以买到。):
    楷书:
    钟绍京《灵飞经》
    赵孟頫《道德经》《胆巴碑》《汲黯传》
    文徵明《落花诗卷》《老子列传》
    王羲之《乐毅论》《黄庭经》
    颜真卿《多宝塔碑》
    欧阳询《九成宫醴泉铭》
    柳公权《神策军碑》《玄秘塔碑》
    王献之《洛神赋》
    行书:
    苏轼《黄州寒食诗帖》
    米芾《蜀素帖》
    陆柬之《文赋》赵孟頫《千字文》
    王羲之《兰亭序》
     2017-03-16
    楷书字体也有很多,找你喜欢的去选,这里罗列一些供大家选择:
    钟繇(正书之祖)《荐季直表》《宣示表》;
    王献之《洛神赋》;
    柳公权《神策军碑》《玄秘塔碑》;
    欧阳询《九成宫醴泉铭》;
    褚遂良《雁塔圣教序》;
    颜真卿《多宝塔》;姜夔《跋王献之保母帖》;
    文徵明《太上老君说常清静经》;
    赵孟頫《汉汲黯传》;
    钟绍京《灵飞经》;
    赵孟頫《胆巴碑》;
    个人建议选择规整的、法度严谨的楷书作为这个阶段的练习,能打下极好的结构基础。虽然上述字帖后面的都是小楷,但新手很难发现其中的结构规律并加以利用,长久看来易导致字轻浮,因功底不实。
    着重推荐《欧体楷书间架结构:九十二法字帖》,很薄,价格便宜,方便携带,实为初学楷书之至宝。
     2017-03-16
    需要着重强调的是,个人认为在初学硬笔阶段一味地追求写出毛笔字的粗细变化,要求达到很高的笔画表现力而忽视结构,这是一个舍本逐末的事情!现在特别多的人推崇这种极力用圆珠笔中性笔表现毛笔的粗细的方式,我不否认这是艺术,但是不建议新手这么做,浪费时间!
     2017-03-16
    如果可以解锁行书了。这时可以选择上述一些笔画灵动的字帖,比如《灵飞经》及《胆巴碑》等,然后过渡到:
    王羲之《兰亭序》《圣教序》;
    苏轼《黄州寒食诗帖》《前赤壁赋》;
    米芾《蜀素帖》。
     2017-03-16
    从今天起选一页字帖(毛笔的),每天精读三次(不是朗读,而是仔细观察帖子中的每一个细节,帖子例字是如何运笔的,结构是怎样的,等等),每次15分钟,每天仅需训练两三个字,一个月后写字的手感也是完全不一样的。这些我曾经在学生身上试验过,对培养感觉相当有帮助。
     2017-03-17
    比如这个陆柬之的「不」字:
     2017-03-17
    横:向左起笔轻轻折向右下,然后平铺,最后向上微扬折向右下重按回锋收笔
    撇:轻向上提笔右下折(可省略成直接右下折),然后往左展开
    竖:重按右下折之后竖直下来,最后提按回收点:重点在最后的提按回收

     选一支顺手的笔
     2017-03-17
    在实际书写中,常用的笔芯则应该是HB、B与2B三种了。
    在硬笔书法书写过程中,铅笔的最大特点在于表现力强。哪怕是同一支铅笔,用力不同,写出来的线条颜色深浅程度也不同。换句话来说,它除了能够表现出笔画的粗细变化,还能表现出色泽的深浅变化。因此,铅笔的笔触层次感更强,所能表现的肌理远比其他同类书写工具丰富。
     2017-03-17
    中性笔——性价比高,易得性强,习惯了还挺好写的
    似乎在不知不觉间,中性笔已经成为近年书写工具界的新秀了。一般来说,中性笔出墨流畅,笔画轻重便于控制;因此上手容易,操控性强。
    相对而言,中性笔不尽如人意的地方在于笔触未能体现浓淡变化,而且笔触的粗细变化相较钢笔要小。因为制作工艺所限,一般超过0.5cm的中性笔笔芯表现能力就变弱了,没有办法随心所欲地写出似有还无的牵丝效果。这个特性也限制了中性笔书写字体的大小,写出来的字普遍略微偏小,不适合表现单字的细部。
     2017-03-17
    书写的过程,本身就是书写者和书写工具不断磨合的过程。钢笔的使用寿命较长,在和使用者相磨合的步骤中,具备了天然的优势。
    由于其笔杆材质多为金属,使用的时候感觉分外厚重;当钢笔在纸面上挥洒的时候,常有种执长枪巨剑驰骋沙场的快意。
    另外个人认为,明嘴钢笔因为弹性更足,它的使用效果相较暗尖的更好,而且暗尖钢笔的笔头较粗,一定程度上会遮挡住书写者的视线,不便于书写。
     2017-03-17
    如果是为了日常记录且写中文,就不要买德系、美系的笔——包括万宝龙、百利金、Lamy和派克——因为这些笔的特点是粗、不容易出锋、下水过于顺畅,写小字会很痛苦。至于Lamy EF,最近好像不出了,而且「不划纸的EF不是合格的EF」。
    如果你不玩钢笔,就不要入老笔,包括老版百利金、派克、万宝龙以及国产笔——它们虽然好写但是需要花工夫先研究下钢笔本身。
    所以日系笔才是你最好的选择,包括百乐78G,属于物美价廉且好写(中文)的典型代表,价格不过百。
    日系笔一共有三个牌子:百乐、白金和写乐。百乐78G已经说过了;白金3776是其代表作,不想价格太贵可以选择钢尖的3776;写乐比较出名的是21K,不过价格过千了(钢尖的我不太清楚),所以如果预算充足的话可以考虑。
    百乐的金笔是这三个里面最软的(钢尖的我也没有用过所以不太清楚),以前买过百乐74,太软了驾驭不了,现在已经让它颐养天年了……
    日系笔的笔尖大小,选择EF或者F甚至M都是可以的,拿来写中文做记录都没太大问题。如果你买百乐74,请选F尖及以下,由于其笔尖较软,我个人觉得M有些粗。
    再说说国笔。对于英雄近几年出的现代笔,个人认为还是不要浪费钱了。至于毕加索一类的,还是算了,使用上面不太靠谱。而国产老笔,上文已经评价过了「虽然好写但是需要花工夫先研究下钢笔本身」。

     从正确的执笔方法开始
     2017-03-17
    有些要点图中没有提到,但就是这些细节决定了你运笔时候的舒展和流畅:
    1. 笔和纸之间的夹角约在50—75度之间。
    2. 执笔时候,不应当用拇指搭住食指,或者用食指搭住拇指。拇指食指间应保持若即若离的状态。
    3. 食指指腹,拇指指腹右半部,中指第一指间关节和食指掌指关节与笔接触;
    4. 食指指腹,拇指指腹右半部为主要发力点,中指第一指间关节为次要发力点,食指掌指关节作为定位用。
     2017-03-17
    在书写「钩」之类自右下到左上的笔画的时候,无名指应该协助中指发力提钩,不宜软趴趴地枕在纸面。
    书写过程中,手指应该是舒展自然的,绝不能把笔掐紧,硬邦邦地跟笔较劲。
    因为手指握笔的时候,为笔提供的仅仅是对笔管的压力,在垂直于纸面的方向上,这个压力仅仅影响手指对笔的最大静摩擦力。而笔的静摩擦力,只要与笔的重力和纸面对笔的弹力两者合力相互抵消就足够了。无论人怎么用力握笔,都不会影响这个竖直面的受力情况;反而会因为握笔过分用力,写起字来就会不够灵活、运笔艰难,写出来的字显得生硬而没有灵性。
    以上,是握铅笔的方法。
     2017-03-17
    握中性笔、签字笔等水笔的方法和握铅笔方法基本相同。但由于中性笔是通过液体毛细作用输运墨水到纸面的,比较容易写出笔画,所以握笔的力度可以变得更加轻。上面的执笔图中所提及的第二点,「食指两段弯曲,勿三段弯」的说法可以忽略。
    握钢笔的执笔方法和握铅笔的方法不同。其不同点在于,由于铅笔、中性笔在书写时,对纸面的有效作用力是垂直于纸面的;而钢笔则是通过压迫笔尖的钢片,使笔尖发生形变,墨水从钢片间注入到纸上的。所以在钢笔书写过程中,有效的作用力应该是使钢片产生形变的力,而不是垂直于纸面的力。
    如图示:
    (图源见水印)
    因此,钢笔的执笔要领是:
    笔杆应靠在虎口处;而不是像之前握铅笔的时候一样靠在食指掌指关节处。
    笔和纸的夹角约为40—65度。
     2017-03-17
    执笔要做到「指实掌虚」,就是下指(拇指和中指)握笔要实,掌心要空,空若蛋形。手指离笔尖太近,执笔角度大,写不好大字。离笔尖太远,写不好小字。拇指包住笔杆,运笔不灵活,大拇指与食指(虚握)轻挨着就好。握笔不要太用力,不然食指前段就是向内撇的。

     所谓诀窍:眼到、心到、手到
     2017-03-17
    正经说来,练字的要义不过三点:
    眼到、心到、手到
    在练字的过程中,先要肉眼感知到字的笔画特征、字形的间隔结构;而后当用心体察笔势流动,揣摩笔毫走向;继而应之于手,在自己的笔下再现出来。
    但在实际的训练上,多数人只看重手到,一股脑地把一个字重复写上数十遍,却没有仔细体察原字帖中,字形的精妙之处。最终不过用别人的字帖,写自己的字而已。纵然努力,亦不过是在走着一条事倍功半的路。
    其实,书法与诸多其他技艺一样,最是在无处见功夫。那些不能直接展示于人前的地方,反而需要花更大心力。我在练字那段时间里,写字倒不算太多,但行路搭地铁之时,心闲下来了,字帖上的字就自动地浮到眼前。
    用手者,不过匠人;用心者,方能体察其妙处。

     练习书法有几种方法
     2017-03-17
    如何练字,方法千奇百种,随君喜好;
    而如果问如何「系统」地练字,就不劳大家原创了,古人已经给我们留下了很传统和好用的方法:
    「读、摹、临、背、意、用」,循序渐进。
    我经历过很多渠道来学习书法,无论是长辈教,自己练,还是书法班,要系统渐进,都脱不了这六个字。不管自学还是报班,都要经过这样的过程,甚至很多时候,书法班能教给你的,从「背」以后就不会有了。没办法啊!修行在个人,就算是老师也还要不断地进行「临」「背」「意」「用」呢。下面分别来说一下。
    读:读帖,读字。这个只要有作品,就可以去读。对联,屏风,匾,摩崖石刻,生活中可见到的有很多。初学书法,总得选择字帖吧?选字帖时你就是在读帖了。然后选自己喜欢的,或者负责任的老师建议你学的。读帖不一定要能读出长篇大论,重要的是「有印象」。
    摹:就是用透明的白纸蒙在字帖上照着描写。这里说一下这个步骤的必要性:这个是初学书法者必须要做的。有的人说摹不行,不能充分思考字意,完全掌握。我想说初学者最重要的是「矫正字形」,而不是「研究风格」。先练好间架结构,再去追求个人风格,所以首先让自己把笔画放在正确的位置上吧。这个阶段最重要的是追求「像」,即「形似」。如果字还没写正就进行临写,这样去达到「像」的目的,反而会破坏你对书法写意的印象。临是学意,不是学形。而且那不是在写字,而是在画画儿,像在画一个字似的。再像又有什么用?虽说摹不易记字,但是能保证你写字的数量。初学需广泛涉猎,把所有结构都见过描过,临起来才有感觉,有体会,能融入自己的想法。
    当临写不同风格的字帖,如果感觉就像「大换血」时,也要从摹重新开始。
    临:需要一定的基础再进行。忌看一画,写一画。但初学者没有基础,临起来无从下手,就会出现这种现象。一定要看一字写一字,最好看一句写一句。临写能写出帖的笔意,虽然会不像,但是会「神似」。这就是临追求的效果。临写是学习时间最长的过程,也是必经之路。
    背:背临。疏通整个字帖后,抛去,凭直觉去写。有时候临得多了,自己就会背了。我临写《兰亭集序》时是五年级、六年级,临了两年,一共就那么多字,以至于里头的文章我还没学会断句呢就背下来了。初中看到这篇古文,看着书上的铅字,脑子里都是还原成软笔字帖时的字形。背临还是自然而然最好,这是我的想法。
    意:意临,背临的基础上再创造,融入自己的风格。需要有自己的风格,最起码得熟练两种以上的字体吧?达到这个程度,就活用了字帖了,这个阶段就可以独立去出一些作品了。最起码,给邻居写个对联,墙头贴个告示,都是信手拈来的事儿。
    用:其实上面说的写对联,贴告示就是在用。书法源自生活,学习到一定阶段后,就可以拿来服务于生活了。

     为什么劝你扔掉描红帖
     2017-03-20
    你可能会说,「这不就是连笔么?」连笔正是体现书写性的一种方式(当然连笔写得丑那是另外一个问题了),为了确保文字的高可读性,通常不会让每个笔画之间都「连笔」,但是这种连带关系依然在空中发生,这意味着你的手在空中依然要沿着笔画的自然书写轨迹去运动,「笔断意连」是矣。
    这种依靠手势去自然地衔接笔画确实会让你觉得把字写好其实没有那么困难。很多人能做到局部的「首尾呼应」,但是对于那些习惯搭字的人来说,要做到每个字都能有这种自然书写的「连带关系」,可能就要在书写的时候多提醒自己。
    还有很多人字写得丑,是因为他们要么把字写得像火柴棍那样硬邦邦,要么像用久了的鞋带那样绵软无力。由于一般人写的硬笔字可能并不大,那么通常需要动这两个部位:「手腕和手指」,手腕的活动半径是要比手指大很多的,因而尽管看起来只要手指动起来就能写字,但真实情况是手腕去带动手指完成书写。尤其是在处理长笔画的时候,不用手腕是不可能完成流畅的书写。
    如果你真正有去下意识地观察,其实你会发现真正依靠这两个地方很自然地书写的时候,是压根做不到「横平竖直」的。
     2017-03-20
    所谓的「横平竖直」在这当中并不多见,强行去追求「横平竖直」的必然结果就是把笔画写得像火柴棍,毫无灵动可言。所以正常的书写习惯是会有带弧度的,这种弧度往往也是美感的体现。
    而把笔画写得像鞋带那样绵软无力的,通常是因为不懂得用手腕去带动手指去书写。记住,是用手腕去控制手指,而不是让手腕去受制于手指,甚至于有些时候要动用手臂。
     2017-03-20
    写「好字」,不一定非要去强行地全部模仿别人的所有书写模式和习惯(描红),这是非常低效率和枯燥的。因为人和人之间的书写模式总是不尽相同的,哪怕看起来一样,也总有很多细微的差异。而我认为如果目的是「写|好字」,只要给书写者搭上一个好的框架就可以了,剩下的细枝末节书写者自己完成即可。而这点,恰恰是「描红」做不到的事。「授人以鱼不如授人以渔」,与其痛苦地模仿每个字,不如去认识到应该怎样省时省力地去书写「好字」。
    当然,上文我只是提到了正确的用笔方式是怎么样的,而「好字」,除了有正确的用笔方式,还有各式各样的结构组成,而这,我认为才是硬笔字写好最困难的部分。赵孟頫在他的《定武兰亭跋》中是提到:
    书法以用笔为上,而结字亦须用工,盖结字因时相传,用笔千古不易。
     2017-03-20
    我从书法字典网上摘取的「树」这个字不同时期不同人的写法。可以看到各家采取的结构,要么拉长字的上半部分,要么就拉长字的下半部分将重心下移。
    为什么会这样做?如果拉长字的上半部分,会使得字的纵势感变得很强烈,整个字显得非常的高挑。
     2017-03-20
    除了重心,对部首与部首、笔画与笔画之间的位置关系也是值得去学习的。部首的穿插、避让,笔画长短、位置都值得去归纳分析。
     2017-03-20
    主笔的舒展。
    一般只要你的笔画写得不像火柴棍那样,你的字便更多是结字的问题。
    和现在常用的宋体与黑体不同,古人在写楷书的时候很少把字处理得正正方方的。
    孙过庭在《书谱》中这样说道:
    初学分布,但求平正;既知平正,勿追险绝;既能险绝,复归平正。
    初学者,学字,不求有功,但求无过。把字写得正正方方的是绝对没有问题,同时也是必要的。所以如果你写的字像宋体和黑体那样,虽然说可能不够生动与艺术性,但是绝对是和丑挂不上钩的。
    入门后,为了让字更具生动与神采,往往会在用笔和结构上追求一些变化,试图寻找一种动态的平衡,这也就是古人所谓的「险崛中见平正」,这点,中国钢笔字一哥田英章学习的对象欧阳询做到了极致。
     2017-03-20
    所谓的「主笔伸展」是在压缩其他笔画的空间后,对一个字的「主笔画」进行夸张的处理。准确意义上来说应当是「有伸必有缩」,当然,这就考验到对结构的驾驭能力了。
    事实上,这种「主笔伸展」的字再好写不过,因为你写这类字,只要把所谓的「主笔」进行一定程度的夸张(通常是延长笔画的长度),那你至少可以拿60分。
     2017-03-20
    当然很多人都知道这个笔画的主笔都在右下部分的「戈」部的那笔。如果你记住了这点,再写其他带有「戈」部的时候,特意强调这个主笔便是非常明智的。这种「强调主笔」算是所有结字方法中受益最大的一种,如同万金油,各位可以自己去尝试一下。
    如果要更进一步的话,我对「羲」在整个字形上的处理就会采取更加大胆和灵活的方式,通过对字的倚侧、笔画的伸缩,来达到一种新的姿态,而不能仅凭「强调主笔」这一种办法。但是,无论如何处理,这个字始终是正的,它的重心依然是稳当的。

     先点画结体,后章法布局
     2017-03-20
    第一,仔细观察相同点画在不同字之间的变化,在字当中不同位置的写法(比如各种「点」「撇」),把这些点画位置不同的字抽出来,进行练习,熟悉它们在不同位置怎么写,直到熟练运用。
    第二,寻找代表性结构字,意为,在各种间架结构里,每种结构的代表字。如「安」「每」「女」「永」「乃」「及」「宫」「赢」等等,写好其一,事半功倍。临帖并非不动脑子,反而是需要十足的耐心和专注,把这些字抽出来,临写到尽可能像。
    第三,对字帖很熟悉后,你需要「背临」,指扔掉字帖靠记忆去写。最后是「意临」,即掌握其主要风貌,融入自己的风格。最后两项一样重要,否则你无法脱离字帖去写其他东西。
    临写练习时,把你的精神专注在笔下,重现前人一点一画的笔触,再造一字一行的结构布局,乃是以谦逊及诚恪的态度,好奇与追求的心,去体会这种高度抽象的美,无论其风格是雄强的,或是秀美的,是昂扬的,或沉郁的,都值得你暂时扔掉手机离开电脑去沉浸其中。抱着急功近利的心态写不好字。
     2017-03-20
    后章法布局
    硬笔书法章法不同于毛笔书法章法,盖因古今习惯不同。应用文体书写一般遵从自左向右的书写格式,应遵循下面几条:
    (1)字整体造型宜扁不宜长(竖画不宜过分伸长,笔势取横向)
    (2)勿紧贴横格上下线(适中位置应沿横格中心线,没有把握更不要超格)(3)标点符号空半格(节奏感)
    (4)字大小适中,首字要写好
    抱着日常使用目的的你,看到这里就足够了,回去练字吧。

     如何提升笔画的质感
     2017-03-20
    1. 轻重
    在书法当中,无论是楷书、行书,抑或草书,都应当对笔画的轻重变化,给予高度的重视。缺乏轻重变化的这几种书体,必然难以具备足够的表现力,势必呆板而俗不可耐。
     2017-03-20
    行书当中,为了书写连贯流畅,常将基本笔画(点、横、竖、撇、捺、钩、折、挑)用牵丝的形式进行相互勾连。在书写的过程中,需注意基本笔画应较为粗壮,牵丝则应轻细。这样才能保证字形交代清楚,笔画主次分明。
     2017-03-20
    常见的构成笔画间呼应的一般以下有三种书写技法:
    2.1 笔连
    在不影响字形的前提下,将收笔起笔处相近的笔画连在一起。如下图所示,「知」字首笔「撇」与第二笔「横」,以及倒数第二笔「横折」与末笔「横」,皆是通过笔连的形式连接起来的。这种写法,简洁明了。通过提按和转折关系区分两笔,通过相互连接的位置关系形成呼应。亦可简化起笔收笔步骤,增强字中的流动感。
    2.2 牵丝
    牵丝主要为了勾连距离较远的两个笔画,出现于前后笔画间,标识了运笔的路径。如前所述,牵丝需要做到的是轻细,保证两个基本笔画之间界限分明。如下图「知」字左部「矢」与右部「口」即是通过牵丝连接。
    牵丝多由于行笔速度加快,前笔书尽,而未完全离纸即书写下一笔画所形成,多为自然生发。牵丝多,则显乱。初学者使用牵丝当注意有所节制,宜少不宜多。
    2.3 意连
    意连指的是书写过程中,笔画之间的连接,没有直接体现在字上,但通过「意」和「势」相互连接了起来。最简单的意连方法,就是把本来可以用牵丝写就的地方,切断牵丝,只留下出锋和入笔,留点相互连接的意思。如下图「知」字第二笔、第三笔两个横画,便是用这种方法连接起来的。为便于理解,特用红色虚线标识笔势。
    意连的妙处在于似有实无、含而不露、藏而不发、窥虚见实、于无处见有。
    楷书中,意连出现得更多,但多以笔意相贯、结构趋就而成,基本不出现之前所说的切断牵丝的简单做法。如图中,「乎」字即为楷书。未能得其精要,只能揭示意连之诀一二。
     2017-03-20
    3. 章法
    呼应可以出现在字中两笔画之间,也可以出现在两个相连的字之间。
     2017-03-20
    就单个字来看,大体的书写方向是从上到下,从左到右的。末笔所处位置,绝大多数位于底部或右下角。在行书当中,竖写时,若末笔为撇或竖等适宜直接出锋的,笔锋放出后,便可顺势连接至下字之首画;若末笔为横或点等以顿笔做结的,写至最后,笔势如被压得最紧的弹簧,重重顿下,然后撤去这股势劲,笔锋便自然爽朗地往回出锋了,同样能自如顺畅地衔接下一个字。譬如上图中,「请」字的出锋便是一证。末笔为捺者,需做呼应时,常改为长点;末笔为钩者,可省略钩。
    就此可以看出,因为汉字具有的天然特点,竖写的作品,常常在各种情况下,都能保证字与字之间相互联系,相互呼应。因此,传统书法中,都要求竖排从右到左书写。
    与这种书写格式对应的,是传统书法对「行气」的重视。
    「行气」念作「ㄏㄤˋㄑㄧˋ」(hang·qi)。
    意指书法作品中,一行字需以一气贯之。其基本要求有二:一则是在一行字当中,能拉出一条中轴线,保证轴线左右两边的视觉重量大致相等;另一则是字与字间具有相互联系,不致各自为政,支零破碎。
    行气的概念是从书法作品的整体效果出发提出的概念。这些从整体布局谋篇出发提出的书写要求被统称为章法。若是自己戏写数字,自是没什么章法的要求的。但在正规的书法创作中,则需遵守一些章法上基本的要求,以免贻笑大方的。
    一般传统书法要求竖排从右到左书写,先有正文,后作落款,款字较正文略小。由于繁体字是自隋唐一路传承演进而来,有着一套成熟的书写技法和审美情趣,故传统书法以繁体字写就。个人认为,以简体字书写亦无不可,只是简体字出现未满百年,如何结字构型尚处于摸索阶段,可能会损失部分美感。而书法作为一门艺术,其美学意义当是高于实用意义的。因此,即便用简体字写就书法作品无可非议,个人依旧不做推荐。而尤为需要注意的是,切莫繁简混杂,以避免突兀之感。

     间架结构才是字的风骨
     2017-03-20
    《黄自元间架结构九十二法》这本书,系统、全面地研究剖析了汉字结构组合规律,归纳总结出九十二种汉字结体书写的方法,他的楷书集欧、颜、柳三家之长,值得初学者学习临摹。
     2017-03-20
    画短撇长横短撇长。如:左、在、尤、龙
    画长撇短横长撇短。如:右、有、灰
    画短直长,撇捺宜伸横画短竖画长的字,撇捺应延伸。如:木、本、朱
    画长直短,撇捺宜缩横画长竖画短的字,撇捺应缩短为相背的点,两相呼应。如:乐、集两平者,左右宜均由两个相等部分组成的字,左右要均匀。如:颜、顾、騵
    三合者,中间务正由三部分组成的字,中间务正。如:御、谢、树
    两段者,上下平分中微加饶减由上下两部分构成的字,上下两部分各占一半,中间稍加变化。需、留
    三联者,头尾伸缩间仍要停匀由上中下三部分组成的字,头和尾伸缩要得当,突出主笔,协调统一。如:章、意、素、累
    掌握了以上的一些规律,会发现写的字有质的提升。
     2017-03-20
    读帖就读这三样:用笔,结字,章法。
     2017-03-20
    1.1 读用笔
    用笔事关个人风格,喜欢粗细对比鲜明的字,还是刚直锋利的字,或者飘逸延绵的字,都是自己的选择,只要符合书法美学,都可以有上乘佳作。既然选择阅读一则帖,则就要从欣赏的角度去看,抛去自己先入为主的个人风格。
    然后,怎么看出个人风格?
    举个例子,看看这个「呼」字的一钩。直接出锋,但不猛烈。想起了谁的字?
    我再上几张图就知道了。
    左边的「乎」是欧阳询的《九成宫醴泉铭》;右边的「事」是王羲之的《兰亭集序》。
    再看看作者生平,是不是临习过这二者的书法?(实际上欧阳询也临习过王羲之的字)
    诸如此类。
    然后,怎么再在读帖中学习?
    眼观帖,心中写。读的毕竟是字帖,不是文章。不能看字认识然后说「真好看啊」就看完了。自己要在心里把字过一遍,随着字的笔画顺序,起承转合,写在心里。何时停顿,何时转折,下笔轻重如何,这些都可以在心里完成。
    一开始可以拿手指头模仿笔去比画,管用。我一开始学书法半夜睡不着还在被子上没事拿手指瞎画来着。
    1.2 读结字
    结字就是间架结构。
    这个虽说也有关于个人风格,比如颜体饱满结实的稳重结字,和刚直紧凑的柳体字就感觉不一样,但是间架结构不差上下。如果是初学者,最好感受一下这些楷书严谨的结字,多对比一些唐楷,找这些作品的「相同点」,然后模仿学习,促进自己字形的矫正。而如果是熟家大师,则不需要「矫正」这个步骤了,这时候欣赏这些楷书,更多是看一些「不同点」,然后思考与总结。初学者千万别像大师一样追求「奇」,一定要总结「同」。
    比如上面一开始的这两个字,初学者要想:
    「知」的右边口怎么放置较好,「呼」的左边口呢?
    黄自元的帖子不劳烦各位读者来自己总结了——「右边少者齐其下」「左旁少者齐其上」。
    这便是这本字帖的伟大之处。

     读帖:离开字帖也能写好看的秘诀
     2017-03-21
    后面图片全部来自《九成宫醴泉铭》
    1. 重心
    【这个字的重心是哪一笔?】
    由于楷书的横都有上斜的趋势,因此要有一个笔画把字拉正,这就是字的重心。一般来说字的重心:笔画向下或者斜向右下/位于字的右半边/(第二个)折肩或者捺(捺化成的点)。
    画圈的笔画即为重心:
    2. 主笔及疏密
    【这个字的主笔是哪一笔?】
    主笔即为一个字中最为伸展的笔画。一般来说独体字和上下结构的字找最长的,左右结构的左边是部首的主笔在右边,右边是部首的左右各有一笔伸展。有的字有次主笔,有的字主笔不明显。
    【这个字的疏密关系是什么?】
    找到主笔疏密就很容易找了,伸展出去的地方为疏,中间笔画密集的地方为密。疏密关系着该字中宫是否紧凑,很重要。
    画圈的笔画为主笔:
    3. 轻重及间隔
    【这个字中每一笔的轻重是怎样的?】
    有些字帖轻重笔画变化明显,比如张即之,有些则相对不那么明显,比如瘦金。但是没有字帖是要把笔画写平均的。很多人的字平放在桌子上看还可以,但是挂起来会显得特别平,没有跳动感,就是因为轻重变化注意得不够。
    【这个字间隔是如何排布的?】
    横向间隔一般来讲是均匀的,字中间的点一般算一横来排布,也就是说点算作两个间隔,如图所示:4. 左右错落
    【左右结构的字如何摆布?】
    【起笔的相对位置在哪里?】
    【部首的相对大小是什么?】
    再强调一次,关于结构的分析只是给大家提供一种方法,找主笔找重心都是为临帖服务的,不要陷入其中。如果很容易就能把字写得与字帖九分像,不分析也可。三、章法:整体中各个字的相互关系
    【字与字之间的轻重变化是什么?】
    不仅一个字之中有轻重变化,字与字之间也有轻重的变化。
    【字与字之间的大小变化是什么?】
    字与字之间的实际大小并不一致,即使是唐楷也不一致。
    唐楷的一般规律是笔画少字写小写重,笔画多的字写大写轻,这样就能保证视觉上的美观。当然,这里的小与大只是相对而言,非常细微的变化。
    在行书上并没有这样明显的规律,但是轻重大小也要根据帖来表现出来。
    【字与字之间的间距排布是怎样的?】
    【如果是行书的话,字与字之间的连带关系是怎样的?】
    【字与字之间的墨色浓淡枯湿变化是怎样的?】
    比如很多行书帖中可以很明显地看出来何处沾墨何处枯笔,那么在通临的时候这些也是需要注意的。
    四、其他与碑帖特点相关的内容
    【字形是什么?多为长形?正方形?还是扁形?】
    【笔画向背的势是怎样的?】
    【字帖整体的墨色浓淡情况?】

     为什么你连简单的字都写不好
     2017-03-21
    在看一个字的时候除了看到这个字是由什么笔画组成的,还要去关注这些笔画的位置或者起收笔之间存在怎样的关系,这样才能把字写好。
     2017-03-21
    一、收笔要放在同一水平线上
    不论是撇+竖弯钩、撇+捺、撇+点、撇+撇点还是撇+撇+捺,只要是由两只脚或三只脚支撑的字,都要把它们落在同一个水平线上,不能一只脚翘起来。
     2017-03-21
    二、除了斜钩,其他笔画要同时落在一个水平线
    这一条其实是上一条的延伸。在这种字形里,要把左边笔画+右边的撇的落点统一到一个平面,这样整个字会看起来很清爽,否则下面会显得参差不齐。
     2017-03-21
    三、同向笔画之间距离要均等
    笔画分横向和纵向,在一个字里经常会出现同一个方向的笔画有很多的情况,比如下面两个字就是横向笔画比较多:这些横之间都是有距离的,要把每一横之间的距离写均匀:
     2017-03-21
    四、每个字里只有一笔最长,其他笔画处理成相近长度
    下面两个字都是有很多横的:
    要把最长的一横拉开,同时其他横的长度尽量处理得差不多,否则会乱:
     2017-03-21
    五、很多撇平行在一起时,收笔边缘要处理成弧线
    经常会碰到这种情况,好多撇并排:在这种情况下,中间两撇写长,收笔与上面的撇、下面的钩形成一个弧线,避免忽长忽短、参差不齐:
     2017-03-21
    六、四点底找准方向
    首先,在写四点底的时候要写成这样——起笔对齐,中间的两点垂直,左边点朝右,右边点朝左:
    然后在写四点底组成的字的时候,要用这四个点去找上半部分相对应的点,比如「照」:
    再比如「然」:
     2017-03-21
    七、心字底找准方向
    先把「心」字写成这样——中间一点的收笔与其他三笔的起笔在一条线:当「心」字作为偏旁时,把中间一点压低,然后每一笔都要和上面的部分找到相对应的笔画:
    这样子才不会跑偏。
     2017-03-21
    八、走字底要做到「两个对齐」
    以「远」为例,先把里边的部分写好:
    然后,左边走字底的撇,要和右边「元」的下面对齐,成一条水平线:
    最后一笔,平捺——先写一条长斜线到「元」的右边缘线的位置,然后转折出尖,不能早不能晚:
     2017-03-21
    九、当上面是左右结构时,下面的独体字要与上面相呼应
    有一种上下结构是「a+a+B」的组合方式,比如「替」。在写的时候先把上面两个「夫」写好——相等、对齐:然后,在写下面的「日」的时候,要注意两个竖应和上面的两个「夫」的中轴线对齐:还有一种「a+b+C」的上下结构也是一样,比如「碧」。
    先把上面写好:下面的「石」,第一横和两个竖要和上面两部分的中轴线相对:

     不同结构的字怎么写才好看
     2017-03-21
    对于所有的字,都让这些字体轻轻向右上方扬起一些,看上去会很好看。
     2017-03-21
    上下结构:
    精髓在于:发现字体的主要部分,并凸显出来。
    左右结构:
    精髓在于:通常偏旁部首应该写的小一些。
    半包围结构:
    精髓在于:包在里面的部分才是重点,一定要写在恰当的位置上。
    全包围结构:
    精髓在于:留足够的空间写里面的东西。
     2017-03-21
    较长的字:
    精髓在于:尽量把字体上面的那一部分写的小一些,这样可以有空间写下面的部分。而且还要写得宽一些,不能一味的瘦高。
    较宽的字:精髓在于:尽量写得高一些,避免矮胖矮胖的情况发生。
    较稀疏的字:
    精髓在于:要承认一口气把每个字都写好是很难的。

     字外功夫:如何提高指力和笔力
     2017-03-21
    心力眼力(这个非常重要,但并非常规训练,需要结合笔力指力综合训练):
    心力眼力其实不是力,直白说就是如何对力道和运笔胸有成竹,知道用多大的力和怎样用力才能带来快感。
    两者的区别在于,心力,是指落笔之前的单字、通篇规划能力,即在写字之前,要对单个字乃至通篇大体有数;眼力,是指习作完成后的自我总结能力,即在写字之后,能准确地观察出作品的问题,哪里力度掌握不好,哪里结构松散等等。
    感觉这玩意儿真不好练。笼统地讲,所有的书法练习都和心力眼力有关,但又不会直接产生作用。相对来讲,最有针对性的训练方法也是最没创意的方法——读古帖。
     2017-03-21
    ·零散时间的笔法训练:虚实线、曲线线条练习
    注意三个要点:轻重、粗细、露锋藏锋(就是下笔收笔带不带尖)。顺序都是左到右和上到下,且以从左到右优先。
     2017-03-21
    ·双勾法和描摹练习
    这个是重点中的重点。
    双勾法:先外勾,以描摹的方式,把例字的外框描出来,再以内勾的方式将框内填满。硬笔训练中,内勾可以用铅笔按照例字的笔法以单个线条的方式在框内写出来,不需要填满;双勾完毕之后再在旁边临写一遍。
     2017-03-21
    另外,描摹练习不光可以使用毛笔古帖,也可以使用白描图谱。这对于手指灵敏度、准确度以及线条的粗细力度变化有极好的帮助。
     2017-03-21
    ·笔画训练
    硬笔书法28种基本笔画,一定要花大块的时间用毛笔古帖来练习。零散的时间,则可以进行笔画训练和上面讲到的虚实线训练。
     2017-03-21
    三、最后,如果给读帖、描摹、临帖编制一个训练方法,或者是练习的流程,大体应该是这样的:
    (1)基本功训练(上文的所有内容)(2)读帖(仔细观察作者的笔法、结构和章法,在脑海中形成印象,训练心力)
    (3)描摹(可采用双勾法,训练笔法)
    (4)对临(手眼结合,训练笔力和眼力)
    (5)对照(把自己写的和帖子相对照,找到不同的地方,找到失误的地方,训练眼力)
    (6)背临(训练心力)
    (7)对照(把自己写的和帖子相对照,找到不同的地方,找到失误的地方,训练眼力)
    (8)练习相近字(根据对照后找到的弱点进行针对性训练,比如,「喜」这个字的长横写不好,练过之后再继续练习「善」「普」「姜」等带有长横的字。比如,「册」几个纵向笔画之间的间距掌握不好,那就练完之后再继续练习「川」「卅」「珊」「助」等字)
    (9)篇章练习

     慢慢写是最快的捷径
     2017-03-21
    每个字都要花时间,只有这样才能把基本功打扎实。步入书法的门槛,一定要以谦虚敬畏之心对待,才能把你的书法审美能力提高。每个人的书写习惯不一样,所以很多人觉得没必要临成一模一样的。但在不断揣摩的过程中,你才能分清你那些书写习惯有没有改的必要,硬笔也是有笔法的。
     2017-03-21
    慢慢写是最快的捷径。
    拿纸蒙在字帖上写个四五遍并不代表你就懂了每个字的结构,我至今也没练完一本字帖,还在学习中。但毫无疑问的是,不走心的摹帖所做的都是无用功,唯一让你安心的是你觉得自己已经付出了时间足够认真了。
    共勉。

     

    展开全文
  • BP神经网络识别手写数字项目解析及代码

    万次阅读 多人点赞 2016-05-10 16:15:31
    这两天在学习人工神经网络,用传统神经网络结构做了个识别手写数字的小项目作为练。点滴收获与思考,想跟大家分享一下,欢迎指教,共同进步。 平常说的BP神经网络指传统的人工神经网络,相比于卷积神经网络(CNN...
    这两天在学习人工神经网络,用传统神经网络结构做了一个识别手写数字的小项目作为练手。点滴收获与思考,想跟大家分享一下,欢迎指教,共同进步。

    平常说的BP神经网络指传统的人工神经网络,相比于卷积神经网络(CNN)来说要简单些。
    人工神经网络具有复杂模式和进行联想、推理记忆的功能, 它是解决某些传统方法所无法解决的问题的有力工具。目前, 它日益受到重视, 同时其他学科的发展, 为其提供了更大的机会。1986 年, Romelhart 和Mcclelland提出了误差反向传播算法(Error Back Propagation Algorithm) ,简称BP 算法,由于多层前馈网络的训练经常采用误差反向传播算法, 人们也把多层前馈网络称为BP 网络。

    为了便于阅读,下面说一下全文的逻辑顺序:
    1,通俗说下神经网络的结构和工作原理,简单好理解,推荐观看
    2,逆向传播算法的数学推导,如果觉得太复杂可以暂时跳过
    3,matlab代码和图像库

    (1) 大白话讲解传统神经网络

    首先,我们看一下神经网络的基本单元——单个的神经元:

    图中圆形表示一个神经元,我们知道,一个神经元接收相邻的神经元传来的刺激,神经元对这些刺激以不同的权重进行积累,到一定的时候产生自己的刺激将其传递给一些与它相邻的神经元。这样工作的无数个神经元便构成了人脑对外界的感知。而人脑对世界的学习的机制就是通过调节这些相邻连接的神经元刺激的权重。
    在图中,周围神经元传过来的刺激表示为Y,权重表示为W,圆形表示的神经元得到的刺激是所有刺激按照权重累加起来,即

    同时这个神经元作为网络的一份子,也像其他神经元一样需要向外传播刺激信号,但是不是直接把s传播,而是传播一个f(s)出去,为什么呢?其实无关大局,我们后面分析。其中f(s)学名称为“激活函数”,常用的函数如下:

    好了,理解到这里如果没什么问题的话,恭喜你你已经入门了,现在我们把这一个个的基本单元连接起来,就构成我们最终的神经网络了。传统的神经网络结构如下图所示:

    是不是觉得很乱?不着急我们一点一点看,由整体到细微来解剖它。首先整体上,它的结构分为三部分,输入层,隐藏层和输出层,一般输入层和输出层各一个,隐藏层若干个,图中画出了一个。细微处,连接结构上,后一层的每个神经元都由前一层的所有神经元连接进来。
    手写数字识别实验使用的是三层的神经网络结构,即只有一个隐藏层,下面以此说明。
    下面说明一下各层的表示和各层的关系:
    输入层:X=(x1,x2,x3…xn)
    隐藏层:Y=(y1,y2,y3…ym)
    输出层:O=(o1,o2,o3…or)

    两个权重:
    输入层到隐藏层的权重:V=(V1,V2,V3…Vm),Vj是一个列向量,表示输入层所有神经元通过Vj加权,得到隐藏层的第j个神经元
    隐藏层到输出层的权重:W=(W1,W2,W3…Wr),Wk是一个列向量,表示隐藏层的所有神经元通过Wk加权,得到输出层的第k个神经元

    根据我们上面说到的单个神经元的刺激传入和刺激传出,相信到这里很多人应该已经得出下面的各层之间的关系了:


    到这里,神经网络的工作过程就清楚一些了。实例说明一下,假设输入是一张图像, 16x16大小,转换为一个二维的灰度值矩阵,再把每一行拼接在上一行的末尾,拼接成一个1x256的行向量,作为输入层的输入,即X,接下来按照公式2就可以计算出隐藏层,然后根据公式1又可以计算出输出层,输出层的输出就得到了。在这个手写数字识别的项目中,我使用的图片输入正是16x16,所以输入层有256个神经元,隐藏层的神经元我取了64个,最后的输出层神经元我取的是10个,为什么是10个呢?因为数字0到9一共10个,期望上是,比如输入一张写着数字1的图像,在输出端得到的输出是{1 0 0 0 0 0 0 0 0 0},输入的图像为2时,输出{ 0 1 0 0 0 0 0 0 0 0},以此类推,实际上输出的未必就是刚好1和刚好0,经过调参和训练,基本是输出0.9多和正负的0.0多,不过也足够了,仅仅用判断最大值所在位置的方式就可以识别到图像上的数字。

    至此,我们已经了解了整个网络的结构和正向工作的具体流程。可以说我们已经对神经网络理解了有50%了。为什么才50%呢?仔细想想相信你会发现,我们还不知道两个在网络中很重要的量,就是权重矩阵W和V。

    如何求得W和V呢,这里要用到一种算法,就是误差反向传播算法(Error Back Propagation Algorithm) ,简称BP 算法。说的很晦涩,我们来翻译成人话。先来看看算法的工作过程,首先随机地初始化W和V的值,然后代入一些图片进行计算,得到一个输出,当然由于W和V参数不会刚好很完美,输出自然不会是像上文说的,刚好就是{1 0 0 0 0 0 0 0 0 0}这一类,所以存在误差,根据这个误差就可以反过来修正W和V的值,修正后的W和V可以使输出更加的靠近于理想的输出,这就是所谓的“误差反向传播”的意思,修正一次之后,再代入其他一些图片,输出离理想输出又靠近了一点,我们又继续计算误差,然后修正W和V的值,就这样经过很多次的迭代计算,最终多次修正得到了比较完美的W和V矩阵,它可以使得输出非常靠近于理想的输出,至此我们的工作完成度才是100%了。这种在输出端计算误差,根据误差来作调节的思想,学自动化的或者接触过飞思卡尔一类的智能车比赛的同学体会应该是比较深的,跟PID自控算法有很大相似性。

    下面是数学推导,关于实际输出和理想输出之间的误差如何具体来调节W和V的值,调节多少的问题。上面说过了,暂时不理解的话可以先跳过推导,看最后的结论就好,自己最后跟着代码实践一遍,有了更深的体会,慢慢会理解的。

    (2)逆向传播算法的数学推导

    输出层的理想输出:d=(d1,d2,d3…dr),例如{1 0 0 0 0 0 0 0 0 0}和{0 1 0 0 0 0 0 0 0 0}等
    假设实际输出和理想输出之间的差距是E,明显W是一个关于输入X,权重W和V,输出O的函数。要修正W,则需要知道具体的修正增量ΔW,离散情况下,表征微分增量,可以得到:



    这样,改变η的大小即可改变每一次调节的幅度,η大的话调节更快,小则调节慢,但是过大容易导致振荡,这一点也跟PID中的比例系数P是一样的。一般η的大小需要经过多次尝试来找到合适值。

    好了,到这里神经网络就讲解完毕,下面是一个较次要的内容,我们上面说了,通过不断迭代来调整权重W和V,那么如何衡量迭代是否可以停止了呢。一个自然的想法是判断每次的输出和理想输出是否足够接近,所以我们可以用算向量距离的方法,跟均方差是一个 道理,如下:

    这样,主要s足够小,迭代就可以结束了。


    (3)实践

    下面是我试验用的MATLAB代码。

    训练部分:recognize_handwriting_numbers_by_simple_NN_train.m

    V=double(rand(256,64));
    W=double(rand(64,10));
    delta_V=double(rand(256,64));
    delta_W=double(rand(64,10));
    
    yita=0.2;%缩放系数,有的文章称学习率
    yita1=0.05;%我自己加的参数,缩放激活函数的自变量防止输入过大进入函数的饱和区,可以去掉体会一下变化
    train_number=9;%训练样本中,有多少个数字,一共9个,没有0
    train_num=30;%训练样本中,每种数字多少张图,一共100张
    x=double(zeros(1,256));%输入层
    y=double(zeros(1,64));%中间层,也是隐藏层
    output=double(zeros(1,10));%输出层
    tar_output=double(zeros(1,10));%目标输出,即理想输出
    delta=double(zeros(1,10));%一个中间变量,可以不管
    
    %记录总的均方差便于画图
    s_record=1:1000;
    tic %计时
    for train_control_num=1:1000   %训练次数控制,在调参的最后发现1000次其实有多了,大概400次完全够了
        s=0;
    %读图,输入网络
    for number=1:train_number
    ReadDir=['E:\Matlab\recognize_handwiting_numbers\train_lib\'];%读取样本的路径
    for num=1:train_num  %控制多少张
    photo_name=[num2str(number),num2str(num,'%05d'),'.png'];%图片名
    photo_index=[ReadDir,photo_name];%路径加图片名得到总的图片索引
    photo_matrix=imread(photo_index);%使用imread得到图像矩阵
    photo_matrix=uint8(photo_matrix<=230);%二值化,黑色是1
    tmp=photo_matrix';
    tmp=tmp(:);%以上两步完成了图像二维矩阵转变为列向量,256维,作为输入
    %计算输入层输入
    x=double(tmp');%转化为行向量因为输入层X是行向量,并且化为浮点数
    %得到隐层输入
    y0=x*V;
    %激活
    y=1./(1+exp(-y0*yita1));
    %得到输出层输入
    output0=y*W;
    output=1./(1+exp(-output0*yita1));
    %计算预期输出
    tar_output=double(zeros(1,10));
    tar_output(number)=1.0;
    %计算误差
    %按照公式计算W和V的调整,为了避免使用for循环比较耗费时间,下面采用了直接矩阵乘法,更高效
    delta=(tar_output-output).*output.*(1-output);
    delta_W=yita*repmat(y',1,10).*repmat(delta,64,1);
    tmp=sum((W.*repmat(delta,64,1))');
    tmp=tmp.*y.*(1-y);
    delta_V=yita*repmat(x',1,64).*repmat(tmp,256,1);
    %计算均方差
    s=s+sum((tar_output-output).*(tar_output-output))/10;
    %更新权值
    W=W+delta_W;
    V=V+delta_V;
    end
    end
    s=s/train_number/train_num  %不加分号,随时输出误差观看收敛情况
    train_control_num           %不加分号,随时输出迭代次数观看运行状态
    s_record(train_control_num)=s;%记录
    end
    toc %计时结束
    plot(1:1000,s_record);
    


    测试部分:recognize_handwriting_numbers_by_simple_NN_test.m


    correct_num=0;%记录正确的数量
    incorrect_num=0;%记录错误数量
    test_number=9;%测试集中,一共多少数字,9个,没有0
    test_num=100;%测试集中,每个数字多少个,最大100个
    % load W;%%之前训练得到的W保存了,可以直接加载进来
    % load V;
    % load yita1;
    
    %记录时间
    tic %计时开始
    for number=1:test_number
    ReadDir=['E:\Matlab\recognize_handwiting_numbers\test_lib\'];
    for num=1:test_num  %控制多少张
    photo_name=[num2str(number),num2str(num,'%05d'),'.png'];
    photo_index=[ReadDir,photo_name];
    photo_matrix=imread(photo_index);
    %大小改变
    photo_matrix=imresize(photo_matrix,[16 16]);
    %二值化
    photo_matrix=uint8(photo_matrix<=230);%黑色是1
    %行向量
    tmp=photo_matrix';
    tmp=tmp(:);
    %计算输入层输入
    x=double(tmp');
    %得到隐层输入
    y0=x*V;
    %激活
    y=1./(1+exp(-y0*yita1));
    %得到输出层输入
    o0=y*W;
    o=1./(1+exp(-o0*yita1));
    %最大的输出即是识别到的数字
    [o,index]=sort(o);
    if index(10)==number
        correct_num=correct_num+1
    else
        incorrect_num=incorrect_num+1;
        %显示不成功的数字,显示会比较花时间
    %     figure(incorrect_num)
    %     imshow((1-photo_matrix)*255);
    %     title(num2str(number));
    end
    end
    end
    correct_rate=correct_num/test_number/test_num
    toc %计时结束
    



    使用的库来自于http://www.ee.surrey.ac.uk/CVSSP/demos/chars74k/#download
    使用其中的EnglishFnt.tgz库,从其中的数字选出前100张作为训练,再另外取100张作为测试。图片集有需要也可以邮件我发送。


    运行结果:

    最后调参得到比较好的结果,使用η=0.2,η1=0.05,在我电脑上,i5-3210M,4G内存,迭代1000次所需要的时间是468s,最终得到下面的曲线,横坐标是训练的迭代次数,纵坐标是均方差,可以看到,其实在350次迭代的时候已经取得了很小的均方差,考虑时间和性能的折中的话,迭代350次已经可以了。


    最后训练结束,使用η=0.2,η1=0.05,用测试集测试,可以得到89.11%的准确率,继续调节参数,曾经可以得到90.56%的准确率,不过也难再上去,估计瓶颈了。

    如果你跟着本文的步骤一步一步下来,最后还自己动手打一遍代码,应该会很好的理解了传统类型的神经网络,对接下来理解卷积神经网络应该会有些帮助。

    我自己对神经网络的的一些理解,以识别图片手写数字为例,图片中黑色像素点和白色像素点之间的空间编排关系构成了我们看到的数字,如果我们能找到一个很厉害的方程组,方程的输入参数是一张图片,返回一个数字表示识别结果,那肯定是很理想的,但是可惜,很难找到的方程来映射图片像素点的空间排布和识别结果这样的一种关系。而神经网络刚好就完成了这样的映射功能,所有的关于像素点空间排布信息的解析都隐藏于矩阵W和V之中,所以W和V实际上代表了这样一种映射关系。而神经网络聪明的地方在于,当这样的映射关系未知时,我们设计了一套机理让它自己来寻找,这就是学习和训练的过程,而最后得到的W和V就是学习的结果,这个过程很像婴儿开始认东西的过程,一开始婴儿的认知体系是空白的,像刚随机初始化的W和V,我们给它看一本书,像给了网络一个输入,告诉他这个是“书”,像告诉网络,理想输出应该是“书”,他会开始尝试来理解,建立书这个物品到“书”这个字的映射关系,一开始他会犯错,看到相似的比如一张纸也会认为是书,但是在看到更多的书之后,并且我们告诉他这个是“书”之后,他又会不断修正这样一种映射关系,最后建立完整的对于书这样一种物品到“书”这个字的映射过程,初步的认知体系建立。现在可以说说上面的“激活函数”是干嘛用的了,可以想象,自然界的各种各样的映射关系显然是比较复杂的,关靠线性关系是无力描述的,而神经网络中用的是加权相加的运算,如果没有经过激活函数处理,后层的所有输入都可以由多层之前的信号经过线性运算来得到,一个现象模型显然表现力是远远不够的,所以我们在神经网络模型中加入了非线性的因素,就是激活函数。

    最后,感谢看完这么长一篇文字,有不足之处,欢迎评论指正,共同进步。

    展开全文
  • # 这一点用线性代数的思想考虑会比较理解 W = tf.Variable(tf.zeros([784, 10])) # 偏置 b = tf.Variable(tf.zeros([10])) # 建立模型 并使用softmax()函数对输出的数据进行处理 # softmax() 函数比较重要 ...
  • 手写文字识别的使用软件

    万次阅读 2018-08-31 13:29:22
    想要将大家中的手写文字识别有种比较简单的方法,我们可以使用迅捷PDF在线转换器来操作,下面就是小编为大家介绍的转换过程。 步骤:先将自己的手写文字准备,然后在浏览器搜索迅捷PDF在线转换器,并进入...

    手写文字怎么进行识别,手写文字识别用什么软件比较简单?想要将大家手中的手写文字识别有一种比较简单的方法,我们可以使用迅捷PDF在线转换器来操作,下面就是小编为大家介绍的转换过程。

    步骤一:先将自己的手写文字准备好,然后在浏览器搜索迅捷PDF在线转换器,并进入网站首页。

    步骤二:在网站首页导航栏的位置找到OCR识别,将鼠标移动到OCR识别,就会看到手写文字识别,点击进入网站的识别页面。

    步骤三:点击选择文件,选择需要进行手写文字识别的文件,也可以将手写文字直接拖进识别页面。

    步骤四:点击开始识别,你需要进行手写文字识别的文件就会在处理的过程中,请耐心等待。

    步骤五:识别完成的文字信息可以直接下载到指定的文件夹或者电脑的桌面。

    手写文字识别的操作过程就分享的差不多了,你还有什么不明白的吗?

    迅捷PDF在线转换器http://app.xunjiepdf.com/

    展开全文
  • 手写数字识别系统之数字提取

    千次阅读 2016-11-17 16:05:50
    数字分割在数字识别中是个必不可少的关键步骤,只有能够将数字进行准确的提取,才能将其一一识别。数字分割的方法数字分割的方法相当多,主要有以下几种:基于直方图的分割此类方法就是对每行和每列黑色像素数进行...

    引言

    所谓数字分割就是指将经过二值化后的图像中的单个数字区域进行提取的过程。数字分割在数字识别中是一个必不可少的关键步骤,只有能够将数字进行准确的提取,才能将其一一识别。

    数字分割的方法

    数字分割的方法相当多,主要有以下几种:

    基于直方图的分割

    此类方法就是对每行和每列黑色像素数进行统计,生成行直方图和列直方图,并采用某种阈值选取法分别对图像进行行列分割。
    
    这种方法简单快速,对于按矩阵分布的规则数字的分割效果相当好,但是无法对不规则分布的数字进行分割,因此具有一定的局限性。

    基于聚类的分割

    聚类就是一个将数据集划分为若干组或类的过程,通过聚类使得同一组内的数据对象具有较高的相似度,而不同组中的数据对象则是不相似的,由于数字图像的特征正好符合这类情况,因而可以使用聚类来达到分割数字的效果。
    
    其方法主要包括基于距离矩阵的聚类分割、k-均值聚类分割、模糊C-均值聚类分割
    
    此类分割方法对数字的位置和大小没有限制,非常适合对位置和大小不规则的数字进行,但这种方法也有明显的不足,其中基于距离矩阵的聚类分割的计算量太大,尤其是对较大的图像,而且矩阵的占用空间相当多,因此在实际中无法使用。
    
    而k-均值聚类分割、模糊C-均值聚类分割这些动态聚类虽然解决了这些问题,但是他们对于初始中心的选取极为敏感,虽然已经有各种对于中心选取得优化算法,但是其分类个数必须人为指定之一限制,最终使此类算法无法应用到实际的数字分割中。

    基于二值图像连通区域标记的分割

    二值图像连通区域标记是指将图像中符合某种连通规则的目标像素点用相同的标号表示出来。
    
    因此这种方法非常适用于数字分割,因为每个数字本身就是一个连通区域,而且这种方法不受分类数的限制,也适用于不规则分布的数字图像,实现简单快速,是一种相当好的分割方法。
    

    而本文采用这种方法进行图像数字区域的分割,并对其进行了适当的改进。

    到目前为止,二值图像连通区域标记方法主要有以下几类:

    • 两次扫描法
    第一次扫描时, 将临时标号存储在一个与图像大小一样的二维数组中并形成等价对。
    
    扫描结束时,通过某种搜索方法合并等价标号; 第二次扫描时, 用等价标号中最小的标号值赋予所有等价标号对应的像素点。
    • 双向反复扫描法:
    第一次扫描时, 将每个目标像素点标记为一个唯一的标号。
    
    然后, 通过正向和反向反复扫描标号图像, 并在每个像素的邻域内传播最小标号, 直到没有标号变化时为止。
    • 区域增长法
    依次扫描二值图像的每一个像素点。当找到某个未标记的目标像素点时, 将其压入堆栈并从该点开始反复标记其邻域, 直到堆栈为空。

    考虑到数字分割仅仅是数字识别的一小步,如果在此处耗费太多的时间是相当能够不值得的,因此我采用速度相对较快的两次扫描法进行分割。

    而在两次扫描法中,合并等价标号是相当关键的一步,因此如何提高其合并速度是相当重要的,因此我主要采用如下改进的区域标记方法:

    1. 构造一散列表,以标号作为关键字进行散列,说白了就是一数组。每个元素指向一个双向链表,在链表中存储同一类别的像素点坐标。
    2. 构造一个与图像同样大小的标记矩阵,用于存储每个像素的分类标号
    3. 初始化标记矩阵,并对图像第一行和第一列中的黑色像素进行标记,标记依次递增,并将相应的像素点位置保存到对应标记的散列表中。
    4. 依次遍历其它各行各列,若当前像素点为黑色,则将其左前、左上角、正上、右上角这四个邻点中为黑色的像素的最小标记赋给当前点,并将这四点中为黑色的像素点归并到最小标记中,具体归并方法为:将四点中为黑色的像素点的原标记在散列表中所指向的像素链表与最小标记所在链表进行合并,并更新标记值。若其四个邻点中没有黑色像素点,那么当前点属于新类,创建一个新的标记值及相应的链表。
    5. 若当前像素点为白色,则标为无效标记,继续第(4)步。

    过滤无效区域

    由于图像或多或少会存在些许噪声、无效块,通常在分割前需要做一些去噪、过滤非数字区域等工作,才能达到良好的分割效果。

    考虑到数字本身具有细长等特点,因此不太适合中值滤波这些去椒盐噪声的算法。

    在这我采用最简单的离散去噪,仅仅取出一些离散噪声点,对于其它大块的无效区域,我通过统计分类样本的平均高度和宽度,设定合适的阈值进行过滤,并对明显高宽比不符合数字特征的区域也一一进行过滤。

    从实验结果中可以看到,这样的效果还是相当好的。

    实验结果

    extract_digital_1
    extract_digital_2

    但是可以看到,由于是按行进行标记,因此标记好的顺序对样本区域的高度相当敏感,高低稍有不同,分割后就会打乱其原始的顺序(尤其是针对那些原本排列较为规则的图像),若要按顺序分割,必须在处理后期,进行额外的排序操作才行,其具体步骤为:

    1. 将原先按标记散列的分类图像,转化为按区域图像中心的矩阵散列,此时生成的矩阵为稀疏矩阵,只有位于区域中心的点指向所对应的数字图像
    2. 按一定的阈值把矩阵按行切分,由于矩阵中的点角为稀疏,因此阈值较为好取,分割效果也较好,不需要过多的进行优化,就能达到很好的效果。
    3. 对每行的区域图像按中心位置的横坐标值进行排序,即可恢复原先的数字分布。其效果如下:

    extract_digital_3

    而且,区域标记的一大优点就是对数字分布极为不规则的图像的处理效果也是相当好的,可以很好的解决数字缠绕在一起,难以分割的问题,其效果如下:

    extract_digital_4

    总结

    虽然使用区域标记法进行分割的效果已经相当令人满意,但是还是存在一些不足的地方,比如说只能对具有良好连通性的数字进行分割,而对于那些具有断层的数字就无法实现较好的分割,为此,在分割前需要进行额外的断层修复,而断层修复的过程较为复杂,且修复效果有限。

    因此,要实现具有高度通用性的数字分割算法,还有待进一步研究。

    参考文献

    如果想要了解更多数字图像处理相关的内容,可以去我的书柜看看,冈萨雷斯写的那本书数字图像处理还是非常经典的。。


    个人主页:TBOOX开源工程
    原文出处:http://www.tboox.org/cn/2016/07/30/hnr-extract-digital/

    展开全文
  • 我们可以将识别手写数字这个问题划分为两个子问题,,我们需要将幅包含了许多数字的图像分解为系列独立的图像,每幅图像包含了个数字。比如,我们需要把下图分解: 将该图分解为6幅独立的图像: 我们...
  • MATLAB--基于BP神经网络的手写数字识别

    千次阅读 多人点赞 2020-03-06 21:12:13
    MATLAB–基于BP神经网络的手写数字识别 ...目前手写数字识别技术也有很多种实现方法,这里介绍与本章内容相关的种基于BP神经网络的手写数字识别方法。该方法的基本思想来源于以下两方面:是手写数字图片中黑色像...
  • 作者: 龙心尘&&寒小阳 时间:2015年12月。 出处: ...声明:版权所有,转载请联系作者并注明出处,谢谢。...就像刚开始学游泳,你在只在岸上比划堆规定动作还不如先跳到水里熟悉水性学习来得快。以我们学习“机
  • OpenCV手写数字字符识别(基于k近邻算法)

    万次阅读 热门讨论 2013-12-03 10:32:53
    预处理过程主要找到图像的ROI部分子图像并进行大小的归一化处理,特征提取将图像转化为特征向量,分类识别采用k-近邻分类方法进行分类处理,最后根据分类结果完成识别工作。 程序采用Microsoft Visual Studio 2010与...
  • 当初面试官让我现场手写内存溢出案例代码,我就以Java代码的方式列举了几个典型的内存溢出案例。今天分享给大家,希望大家在日常工作中,尽量避免这些low水平的代码
  • 杂谈_怎样写好英语

    千次阅读 2012-12-29 17:43:03
    书法是门面,谁都想写一手好字来装点门面。但是就有人字写得奇烂,写完了连自己都不认识!不过你也别着急,英语书法是比较好练的,要写一手漂亮的字,只需要十分钟即可,立竿见影。许多经我指点的学生,第二天交作业...
  • 大概 2 个月前,我说过要利用业余时间写一个简单的 RPC 框架,今天(2020-06-05)总算将其开源出来,希望对小伙伴们有帮助。 虽说 RPC 的原理实际不难,但是,自己在实现的过程中自己也遇到了很多问题。Guide-rpc-...
  • 在编程中随着代码行数的增加,经常会感觉乱糟糟的,今天偶然看到了这样的个pdf《阿里巴巴Java开发手册(终极版).pdf》 代码格式 1. 【强制】大括号的使用约定。如果是大括号内为空,则简洁地成{}即可,不需要换行...
  • 读者朋友们,你们现在...别说你们,我相信每个初学编程的人都会遇到这样的问题,看书觉得自己看明白了,知道咋回事了,可是到自己代码,要么无从下手,要么bug百出,真的很打击信心啊。 对于编程的学习,很多人...
  • 但是对于我们平时拿来练的一些小项目来说却是大材小用,杀鸡用牛刀,而且上述主流服务器配置起来也略嫌麻烦。俗话说自己动手丰衣足食,今天我们就来实现个简单的静态web服务器。 2. http协议 谈到浏览器,...
  • 手写汉字识别的发展综述

    万次阅读 2019-03-19 20:29:19
    、手写汉字识别的研究背景与现状 在上个世纪60年代,美国IBM公司开始进行了...因为汉字在日语中占有一定的地位,手写体汉字识别(HCCR)在开始是由日本率先尝试研究的,在80年代,国内开始了对手汉字的研究,...
  • 之前我有承诺过,会在View这个话题上多几篇博客,讲讲View的工作原理,以及自定义View的方法。现在前半部分的承诺已经如约兑现了,那么今天我就要来兑现后面部分的承诺,讲讲自定义View的实现方法,同时这也是...
  • 篇非常的c++学习方法,转自贴吧

    万次阅读 多人点赞 2015-04-10 20:06:03
    坊间流传的错误的C++学习方法一抓就是大把。我自己在学习C++的过程中也走了许多弯路,浪费了不少时间。  为什么会存在这么多错误认识?原因主要有三个,是C++语言的细节太多。二是一些著名的C++书籍总在(不管...
  • 很多小伙伴不知道像MyBatis和Hibernate这种ORM框架是如何实现的,今天,我们就个ORM框架,看看ORM框架到底是如何实现的!全程实战,建议收藏!
  • 、本文的意义 因为谷歌官方其实已经了MNIST入门和深入两篇教程了,那我这些文章又是为什么呢,只是抄袭?那倒并不是,更准确的说应该是笔记吧,然后用更通俗的语言来解释,并且补充更多,官方文章中没有详细...
  • Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的个自制小游戏,共有该游戏的两万教程加制作过程,欢迎品尝! 世界上没有绝对的公平,如果我们起点就比别人第步,那就更需要比别人努力了。
  • 手写体数字识别的两种方法

    千次阅读 2018-10-25 19:09:09
    基于贝叶斯模型和KNN模型分别对手体数字进行识别 首先,我们准备了0~9的训练集和测试集,这些手写体全部经过像素转换,用0,1表示,有颜色的区域为0,没有颜色的区域为1。实现代码如下: ...
  • 如何用正确的方法出质量的软件的75条体会

    千次阅读 热门讨论 2005-04-25 13:19:00
    1. 你们的项目组使用源代码管理工具了么?应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。 2. 你们的项目组使用缺陷管理系统了么?...应该用个专门的系统,可以是Test
  • 4 “最后的堡垒”——脱机手写汉字识别4.1 攻克...但是由于手写汉字字形变化大,上章中介绍的各种印刷汉字识别特征和方法不完全适用,目前也还没有一套行之有效的识别方法。这是汉字识别最困难的问题,被认为是模式识
  • 下面就给大家介绍个快速完成毕业设计的方法(绝对的亲身实践哦!) 作为名计算机专业的资深学渣,每次分组做项目的时候都是“抱大腿”,临近毕业,“大腿”们都各奔东西,毕业论文的事...
  • 文章目录0、在前面1、编程能力 0、在前面 讲道理,谈到【找工作】这个问题,我就很焦虑。。。。。。看到这个省略号了嘛?这就是我的心, ???? 尤其是在就业一年比一年难的情况下,经历过好多次心态崩裂,也问...
  • 自己动手操作系统()

    万次阅读 2005-01-22 17:01:00
    作者:伊梅 本文选自:开放系统世界——赛迪网 2002年10月10日自由软件社区是个充满自由和梦想的地方,在10余年的时间里它创造了个又个奇迹。然而,这些奇迹的创造者不只是Stallman,也不只是Linus Torvalds,...
  • 1. 你们的项目组使用源代码管理工具了么?应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。 2. 你们的项目组使用缺陷管理系统了么?...应该用个专门的系统,可以是Test
  • OCR(联机手写汉字识别)

    万次阅读 2005-09-01 14:57:00
    它的用途是在块跟计算机连接的书写板上写字,即时把字符输入计算机。必须指出的是,笔输入的作用不只是输入字符的图形,还要据此对该字符加以识别,并用机内代码来表示,以便于对输入的文字作进一步处理。电子...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 314,062
精华内容 125,624
关键字:

如何写一手好字的方法