深度学习:手写反向传播网络拟合sinx,可设置网络层数

本文介绍了如何使用深度学习的反向传播算法来拟合sinx函数,详细阐述了全局方法和BPNetwork类的设计,包括权重初始化、前向传播、反向传播、损失计算等关键步骤,以及网络结构的动态调整,通过实例展示了拟合过程。
摘要由CSDN通过智能技术生成

 

一、全局方法:

  1. rand(a,b):该方法返回在区间(a,b)的任意随机数,且保证每次调用的时候返回的都是与之前不同的随机数
  2. generate_w(m,n):该方法返回生成的m*n的weight矩阵,且通过在该方法中调用rand(a,b)来初始化每个weight的值
  3. generate_b(m):该方法返回生成的m长度的bias值,且通过在该方法中调用rand(a,b)来初始化每个bias的值
  4. fit_function(x,deriv=False):该方法返回拟合函数,如果该方法传入的deriv是True,则返回拟合函数的导数。我试验了两种拟合函数,一种是sigmoid。另一种是tanh函数,在实验数据来看,tanh拟合效果比较好,而sigmoid由于只能输出0-1的正数,只能拟合0-π的一部分,且拟合效果不是很好。

     

random.seed(0)
def rand(a, b):
    return (b-a) * random.random() + a

def generate_w(m, n):
    w = [0.0] *m
    for i in range(m):
        w[i] = [0.0]*n
        for j in range(n):
            w[i][j] =rand(-0.69,1)#rand(-1,1) #
    return w

def generate_b(m):
    b = [0.0]*m
    for i in range(m):
        b[i] =rand(-2.409,0.02)# rand(-1,1)#
    return b

def fit_function(x,deriv=False):
    if deriv==True:
        #return x*(1-x)
        return 1-np.tanh(x) * np.tanh(x) #tanh鍑芥暟鐨勫鏁?
    return np.tanh(x)
    #return 1/(1+np.exp(-x))

二、 定义了BPNetwork类,其内部函数方法说明如下:

  1. __init__(self):定义类中所需要的数据,类中所需要维持的参数名称在此函数中事先定义。这些数据包括:

⑴ self.input_n = 0:表示输入层的神经元个数,拟合sinx需要self.input_n = 2,一个是输入的数据,另一个用来调节bias

⑵ self.input_cells = []:表示输入层的神经元输入的数据,有两个元素,一个是输入的数据;另一个用来调节bias,默认为1

   ⑶ self.output_n = 0:输出层的神经元个数

   ⑷ self.output_cells = []:输出层的神经元的输出值

   ⑸ self.input_w = []:输入层到第一层隐藏层的weight

   ⑹ self.output_w = []:最后一层隐藏层到输出层的weight

   ⑺ self.hidden_ns = []:隐藏层的设置,它的长度是指隐藏层个数,它的每个元素指该层隐藏层的神经元个数

   ⑻ self.hidden_ws = []:隐藏层的weights,其中的每个元素为上一层隐藏层到下一层隐藏层的weight,一共有n-1个weight

   ⑼ self.hidden_bs = []:其中的每个元素self.hidden_bs[i]都是第i层隐藏层的bias设置,其长度为隐藏层的个数

   ⑽ self.output_b = []:输出层的bias

   ⑾ self.hidden_results = []:其中的每个元素是每一层隐藏层的输出值

   ⑿ self.output_delt

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值