当前位置:   article > 正文

深度学习-感知机模型---思路图解+python代码_感知机算法权重更新过程讲解

感知机算法权重更新过程讲解

感知机的理解

深度学习中的感知机的理解可以用下图说明:
在这里插入图片描述
它的目标在于尽可能让预测值r与真实值y接近,或者完全相等,即最小化y与r的差异delta。
而激活函数是可以任意选择的,关键在于线性处理中的w和b如何确定。
通过链式求导法则,可以求出w的变化而导致delta的变化幅度,同样可以求出b的变化而导致delta的变化幅度。
也就是更改w或b,就可以改变delta。那么反过来,改变delta,也就可以改变w和b。
所以,通过确定delta来确定w和b。

感知机的实现代码

"""
创建感知机类
属性是激活函数,学习率,权重,偏置项
方法是
1.初始化:传入激活函数,学习率,权重个数;初始化权重,偏置项为0
2.预测:传入一个样本,输出一个预测值
3.更新权重和偏置项:传入预测值,计算新的权重和偏置项
4.打印:打印权重,偏置项
"""


class perceptron(object):
    def __init__(self, w_num, rate, activator):
        """
        初始化感知机
        :param w_num: 权重个数
        :param rate: 学习率
        :param activator: 激活函数
        """
        self.rate = rate    #传入学习率
        self.activator = activator  #传入激活函数
        self.bias = 0.0 #偏置项初始化为0
        self.weights = [0.0 for x in range(w_num)]  #权重初始化为0

    def predict(self, sample):
        """
        预测一个样本
        :param sample: 被预测的一个样本
        :return: 通过激活函数后的预测值
        """
        sum = 0
        for feature, weight in zip(sample, self.weights):   #实现wx
            sum += feature * weight
        sum += self.bias    #实现wx+b
        y_predict = self.activator(sum) #激活
        return   y_predict  #返回预测值

    def update(self, sample, label):
        """
        用一个样本来更新权重和偏置项
        :param sample: 一个样本
        :param label: 它的标签
        :return:
        """
        output = self.predict(sample)   #得到该样本的预测值
        delta = label - output  #预测值和真实值的差异
        self.bias += delta * self.rate  #更新偏置项
        self.weights = [w + self.rate * delta * x for x, w in zip(sample, self.weights)]    #更新权重

    def print(self):
        print("weight\t:%s\n bias\t:%f\n" % (self.weights, self.bias))   #打印偏置项和权重


"""
创建迭代训练感知机函数
输入:指定感知机,多个样本点,对应的标签,指定迭代次数
输出:训练好的感知机,主要是权重,偏置项
"""


def activator(x):
    """
    创建激活函数-阶跃函数
    :param x: 自变量
    :return: 若x为正数,则返回值是1;若x为负数,则返回值是0
    """
    return 1 if x > 0 else 0


if __name__ == '__main__':
    samples = [[1, 1], [0, 0], [1, 0], [0, 1]]  #多个样本
    labels = [1, 0, 0, 0]   #标签
    p = perceptron(2, 0.1, activator)   #创建一个感知机,每个样本有2个特征,学习率是0.1,激活函数是activator

    for i in range(10): #迭代10次
        for sample, label in zip(samples, labels):  #每次迭代中,所有样本均参与
            p.update(sample, label) #每次用一个样本更新权重和偏置项

    p.print()   #打印10次迭代后的权重和偏置项

    #预测
    print('1 and 1 = %d' % p.predict([1, 1]))
    print('1 and 1 = %d' % p.predict([0, 0]))
    print('1 and 1 = %d' % p.predict([1, 0]))
    print('1 and 1 = %d' % p.predict([0, 1]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85

感知机的代码图解

在这里插入图片描述
在这里插入图片描述

《图解深度学习》_张弥-完整书签

BAIDU:https://pan.baidu.com/s/1xHEsHIdDRFnX3ZErTPBsOQ
TiQu:vj0m

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/286843
推荐阅读
相关标签
  

闽ICP备14008679号