专栏首页杨熹的专栏神经网络 之 线性单元

神经网络 之 线性单元

本文结构:

  1. 什么是线性单元
  2. 有什么用
  3. 代码实现

1. 什么是线性单元

线性单元和感知器的区别就是在激活函数:

感知器的 f 是阶越函数:

线性单元的激活函数是线性的:

所以线性模型的公式如下:

2. 有什么用

感知器存在一个问题,就是遇到线性不可分的数据时,就可能无法收敛,所以要使用一个可导的线性函数来替代阶跃函数,即线性单元,这样就会收敛到一个最佳的近似上。

3. 代码实现

1. 继承Perceptron,初始化线性单元

from perceptron import Perceptron
#定义激活函数f
f = lambda x: x
class LinearUnit(Perceptron):
    def __init__(self, input_num):
        '''初始化线性单元,设置输入参数的个数'''
        Perceptron.__init__(self, input_num, f)

2. 定义一个线性单元, 调用 train_linear_unit 进行训练

  • 打印训练获得的权重
  • 输入参数值 [3.4] 测试一下预测值
if __name__ == '__main__': 
    '''训练线性单元'''
    linear_unit = train_linear_unit()
    # 打印训练获得的权重
    print linear_unit
    # 测试
    print 'Work 3.4 years, monthly salary = %.2f' % linear_unit.predict([3.4])
    print 'Work 15 years, monthly salary = %.2f' % linear_unit.predict([15])
    print 'Work 1.5 years, monthly salary = %.2f' % linear_unit.predict([1.5])
    print 'Work 6.3 years, monthly salary = %.2f' % linear_unit.predict([6.3])
  • 其中训练的过程就是:
  • 获得训练数据,
  • 设定迭代次数,学习速率等参数
  • 再返回训练好的线性单元
def train_linear_unit():
    '''
    使用数据训练线性单元
    '''
    # 创建感知器,输入参数的特征数为1(工作年限)
    lu = LinearUnit(1)
    # 训练,迭代10轮, 学习速率为0.01
    input_vecs, labels = get_training_dataset()
    lu.train(input_vecs, labels, 10, 0.01)
    #返回训练好的线性单元
    return lu

完整代码

from perceptron import Perceptron
#定义激活函数f
f = lambda x: x
class LinearUnit(Perceptron):
    def __init__(self, input_num):
        '''初始化线性单元,设置输入参数的个数'''
        Perceptron.__init__(self, input_num, f)


def get_training_dataset():
    '''
    捏造5个人的收入数据
    '''
    # 构建训练数据
    # 输入向量列表,每一项是工作年限
    input_vecs = [[5], [3], [8], [1.4], [10.1]]
    # 期望的输出列表,月薪,注意要与输入一一对应
    labels = [5500, 2300, 7600, 1800, 11400]
    return input_vecs, labels    
def train_linear_unit():
    '''
    使用数据训练线性单元
    '''
    # 创建感知器,输入参数的特征数为1(工作年限)
    lu = LinearUnit(1)
    # 训练,迭代10轮, 学习速率为0.01
    input_vecs, labels = get_training_dataset()
    lu.train(input_vecs, labels, 10, 0.01)
    #返回训练好的线性单元
    return lu
if __name__ == '__main__': 
    '''训练线性单元'''
    linear_unit = train_linear_unit()
    # 打印训练获得的权重
    print linear_unit
    # 测试
    print 'Work 3.4 years, monthly salary = %.2f' % linear_unit.predict([3.4])
    print 'Work 15 years, monthly salary = %.2f' % linear_unit.predict([15])
    print 'Work 1.5 years, monthly salary = %.2f' % linear_unit.predict([1.5])
    print 'Work 6.3 years, monthly salary = %.2f' % linear_unit.predict([6.3])

学习资料: https://www.zybuluo.com/hanbingtao/note/448086

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Day 1-Java-imooc-4.流程控制语句

    课程地址:http://www.imooc.com/learn/85 总结图片来自 http://www.imooc.com/article/10535 ? 本...

    杨熹
  • 深度学习的主要应用举例

    参考资料 ? 最喜欢圆,尤其如此灵动 今天简单说一下 Deep Leaning 在各领域应用的几个例子,可以轻松地看一下它是怎么用在 Computer Visi...

    杨熹
  • 机器学习面试题集-如何画 ROC 曲线

    Receiver Operating Characteristic Curve 是评价二值分类器的重要指标

    杨熹
  • 怎样编写健壮的代码

    一个会写诗的程序员
  • ES6+好用的小技巧,让你的代码更干净,短巧,易读

    前端知否
  • gitlab 持续集成CI/CD

    持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编...

    py3study
  • 斐波那契博弈(fibonacci Game)

    mathor
  • 看《长安十二时辰》震惊了,难道唐朝就有大数据和云计算?

    导读:这个夏天,笔者被一部国产剧给吸引住了,一口气连追了20多集,就是最近火爆全网、口碑炸裂的《长安十二时辰》。

    CDA数据分析师
  • Join()和 List()的 6 种化学反应

    首先,该string.join(iterable)方法是使用iterable字符串作为输入,并使用string将它们串起来。

    Python知识大全
  • linux性能诊断-perf工具

    启动docker测试时,记得使用 --privileged=true 允许超级权限模式

    用户2825413

扫码关注云+社区

领取腾讯云代金券