backpropagation算法代码实现

本文记录了作者在研究生阶段学习反向传播(BP)算法的过程,包括从吴恩达的AI课程和廖雪峰的Python教程获取知识,并分享了在运行Python2.7版本的BP算法代码在Python3环境下遇到的问题。主要问题涉及`from numpy import *`与`import numpy as np`的使用区别,以及Python2和Python3中`map`函数的不同。作者提供了修正后的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

研究生生涯正式开始了,看了吴恩达的AI课程,然后通过廖雪峰学习了一些python的知识,然后看了一些关于BP博文,然后手推了一遍反向传播算法,还要完成一些导师布置过来的任务,收获还是不错的,然后推荐给ML入门者一些好的网站去学习。

福利链接

廖雪峰python3网站学习地址:链接地址
吴恩达AI课程:链接地址
我见过最好的BP算法的证明:链接地址,可以把相关的文章都看一遍。

正文

今天主要跑了一下bp算法的代码,也就是第三个分享的连接下给的代码,因为给出的代码是python2.7的代码,但是现在大家基本都是用python3跑程序,但是源码直接拿来用python3跑会报错,这里我把我把我遇到的一些问题跟大家分享一下,然后我把代码挂上来。

问题1:from numpy import * 和import numpy as np有什么区别。

两种方式都是引入numpy库中的所有函数、函数、对象、变量等,两者的区别在于调用其中内容时不同.
以掉用numpy中的random模块为例,第一种方式要用numpy.random,第二种方式只用random即可。
但是请特别注意:pep标准推荐使用第一种方式,请在日常使用中尽量使用第一种方法,就比如numpy中random 标准库中也有random,但是两者的功能是不同的,使用第二种方式容易造成混淆

问题二:python2和python3 map函数的区别

python2中map函数中输入一个list做处理返回的也是一个list,但是python3中输入一个list返回的是map object,因此如果想得到一个list,需要在map函数外加list()
举个例子:

def f(x):
    return x*x

L = [1, 2, 3, 4, 5]

print(map(f, L))

该代码在python3上报错:<map object at 0x0000022B9E6BADA0>
修改的代码为:

def f(x):
    return x*x

L = [1, 2, 3, 4, 5]

print(list(map(f, L)))

此时可以得出正确结果:[1, 4, 9, 16, 25]

代码

# -*- coding: UTF-8 -*-

import random
from numpy import *
from functools import reduce

#这里exp函数来自numpy
def sigmoid(inX):
    return 1.0 / (1 + exp(-inX))


class Node(object):
    def __init__(self, layer_index, node_index):
        self.layer_index = layer_index
        self.node_index = node_index
        self.downstream = []
        self.upstream = []
        self.output = 0
        self.delta = 0

    def set_output(self, output):
        self.output = output

    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值