tensorflow 训练权重不更新_TensorFlow学习Program1——15.权重和偏置更新要点、单层感知机、反向传播算法BPN...

写在前面:关于权重和偏置更新

e706dc9ecbdfa8b611e1e8045ba59d20.png
权重W更新采用+或-的两种情况
  • 可以很明显看到,关于权重更新存在2种情况,本质没什么区别,只不过在自己写代码手动更新权重和偏置时,这点就很容易混淆出错。本帖第一个单层感知机示例,采用第一种方式;第二个BPN示例,采用第二种方式;
  • 通常情况下,推荐采用第二种。因为一般数学推导中都是写成W=W-dW,这样就和以前的帖子一致<线性回归、逻辑回归与正则化>,避免以后自我矛盾
  • 关于偏置b更新,一般没有数学公式。可以简单看做b=w0,因而不予额外讲述。在本帖第二个代码示例中,b的更新就是采用b=b-db形式。第一个示例中没有b,仅设置了W
  • 我仔细翻看了以往的代码示例,以前的代码都是采用了TF自带的优化器,我们只需设置W和b占位符、赋予Y和Yhat相应值即可,其他的由优化器自我完成。至于设置loss时,对于函数逼近问题,到现在一直只用了平方差(Y-Yhat还是Yhat-Y不重要);对于分类问题,交叉熵求解的内部细节我们不参与,因此以前这个问题不突出。而此帖,error和权重、偏置更新都由自己手动撸码而成,因此顺序、加减问题就很明显
  • 养成良好习惯,一律采用图示第二种方式

TensorFlow实现单层感知机详解

简单感知机是一个单层神经网络它使用阈值激活函数,正如 Marvin Minsky 在论文中所证明的,它只能解决线性可分的问题(线性可分的定义参见我的别的帖子)。虽然这限制了单层感知机只能应用于线性可分问题,但它具有学习能力已经很好了。当感知机使用阈值激活函数时,不能使用TensorFlow优化器来更新权重(根据上一帖可知,阈值激活函数并不可微,自然不能使用TF中定义的优化器,需要自己编写规则更新权重)。我们将不得不使用权重更新规则:

333ba32356f12b21278712b2c488c270.png
η 是学习率。为了简化编程,当输入固定为 +1 时,偏置可以作为一个额外的权重。那么,上面的公式可以用来同时更新权重和偏置。
  • 仔细研究下面程序,搞清楚为什么这个式子可以用来更新权重。(核心原因就是,Y-Yhat<0,即Yhat过大,则dW为负,W=W+dW变小,促使Yhat缩小;反之亦反)
  • 研读这个程序和MNIST计算过程(mnist.data每一行是一个图片样本,shape(W)=(m,n)=(784,10), shape(B)=(n,1)=(10,1)),再结合神经元图,就可以很明晰一个结论:输入X中,每一行就是一个样本,X的行数M就是第零层输入层(虚拟节点)和第一层神经元的个数M,第一层中一个神经元用来承接一个样本。每个样本有m个输入的元素即[x1,x2...xm],相应和m个权重数wi相乘,故W有m行。若有n个输出,接着再和n个偏置数bi相加,故B有n行。
  • 对于回归问题,只有一个输出n=1,故B常为一个数;对于分类问题,会有多个输出结果,如MNIST10个分类n=10,故B为n行1列。(注意为n行1列,而非1行n列,是因为加减法法则缘故,X*W所得大小(55000,10)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值