自己动手制作人工神经网络0x3:训练部分

今天来实现训练的功能,给ANN类添加一个train方法。
函数的参数第一个是输入的节点(inputs_list),数据类型是list;第二个参数是预期的输出节点的值(outputs_list),数据类型也是list。

首先,把两个参数传进来的list转换成numpy的array,转换后的大小是(list.size, 1)

然后,向上一篇文章一样,分别计算隐藏层和输出层,得到我们的输出(o_o)。

接着计算误差并反向传播。这里使用梯度下降的方式,误差函数是预期值与实际值的方差。这里直接给出梯度方程,即求误差函数相对于权重的斜率。
-(e_j)sigmoid(\sum_iw_{ij}o_i)(1-sigmoid(\sum_iw_{ij}o_i))o_i
ej表示下一层节点j的误差量;oi上一层节点i的值。

隐藏层到输出层的权重ej为输出层的误差量eo=tj-oj
这里tj表示输出层节点j的期望值;oj表示输出层节点j实际值

输入到隐藏的权重ej按权重把隐藏层到输出层的误差量反向传播得到;
即ej=eh=who.T*eo

关于这个公式我会在系列文章最后更一篇详细解释。

    def train(self, inputs_list, outputs_list):

        # translation
        i = np.array(inputs_list, ndmin=2).T
        t = np.array(outputs_list, ndmin=2).T

        # hidden
        h_i = np.dot(self.wih, i)
        h_o = self.a_f(h_i)

        # output
        o_i = np.dot(self.who, h_o)
        o_o = self.a_f(o_i)

        # error
        o_e = t - o_o
        h_e = np.dot(self.who.T, o_e)

        # fix
        #r * ( (E*o*(1-o)) * lo.T)
        self.who += self.lr * np.dot(o_e * o_o * (1 - o_o), np.transpose(h_o))

        self.wih += self.lr * np.dot(h_e * h_o * (1 - h_o), np.transpose(i))

最后说一句,权重的更新方式是减去梯度方程的值,因为梯度值为正意味着权重需要减少才能减少误差函数的值。需要注意的是代码还把梯度值乘上了学习速率,这样可以控制权重更新的幅度
这样,我们便完成了训练部分的功能。接下来,我还会继续更新如何使用这个ANN类,来完成手写数字识别的任务。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 学习《下班后写作 最有效的个人增值方法》 第一天学习记录 一只特立独行的猫~很早就听过这个名字,泡豆瓣的时候,知道...
    贺兰无极阅读 389评论 0 2
  • 闺女上园有两个多月了,每天背着小书包去上学,不哭不闹的,真有点准备十年寒窗的尽头儿,倒是让我们省心不少。 ...
    Air女王阅读 339评论 0 0
  • 今天是出差到深圳的第二个周日,是日本那边的ERP在深圳上线后第二次月结后的第一个周日。周末项目休息,于是窝在酒店。...
    小耳清涼阅读 607评论 0 0
  • 人是一个复杂的社会性动物,总是充满了各种各样的想法,但其实内在和外在常常发生冲突,本来,明明你内心不喜欢某件事某种...
    Gloriousyj阅读 302评论 0 0