学习笔记-神经网络(六)

神经网络可以计算任何函数的可视化证明

试着用Python编写了书中第4章例子的代码,进一步加深了对书中所讲的理解,代码如下:

"""
绘制各种权重和偏置下的S型函数图像,《神经网络与深度学习》P121的例子

"""
import numpy as np
import matplotlib.pyplot as plt

#S型激活函数值
def sigmoid(x, w,b):
    z = np.dot(w,x)+b
    return 1/(1+ np.exp(-z))

#一层隐藏神经元的网络
#s:阶跃位置参数
#h:凸起高度
def cal_grid(x,s,h):
    init_w = 1000
    w = np.dot(np.ones((len(s),1)),init_w)
    b = -1 * np.dot((np.array(s)).reshape(len(s),1),init_w)
    
    #计算隐藏层输出,使用S型激活函数
    activations = []
    np.set_printoptions(precision=3, suppress=True)
    for i in x:
        activations.append(sigmoid(i,w,b))
    #print("activation:{}".format(activations[:5]))    
    
    #计算网络输出,加权输出:sum(w*a)
    heights = np.array(h)
    results = []
    for index, a in enumerate(activations):
        output = np.dot(heights, a)
        #if output[0]>=1:
        #    print("at {} is{}, outpt is {}, x is {}".format(index, a, output, x[index]))
        results.append(output)
        #results.append(sigmoid(a,heights,0))
    
    return results

interval = 0.01
x = np.arange(0,1,interval)
#s = [0.4,0.6,0.7,0.9]
#h = [-1.2,1.2,0.3,-0.3]
s = [0.0,0.2,0.2,0.4,0.4,0.6,0.6,0.8,0.8,1.0]
h = [-0.3,0.3,-1.3,1.3,-0.5,0.5,1.3,-1.3,-0.2,0.2]
a =cal_grid(x,s,h)
plt.plot(x,a)

#设置横坐标的位置,使其放置在0的位置
ax=plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('data',0))
ax.xaxis.set_ticks_position('bottom')

plt.show()

在上述代码中,网络采用了书中定义的三层网络,即一层隐藏神经单元,通过cal_grid函数可以计算出网络输出,其中,

  • 隐藏层采用了S型激活函数,即sigmoid(wx+b),其中的w和b是通过输入参数s计算得出。s为”凸起“的位置(取0~1之间的数),w默认为1000,b=-1000*s;
  • 输出层为隐藏层激活值的加权输出,即w1a1+w2a2+…,其中的w为输入参数h,表示凸起的高度(正负均可);
  • 上述代码运行的网络结构如下图所示:
    在这里插入图片描述

上述代码的运行结果如下图:
在这里插入图片描述

消失的梯度

另外,今天也试着推导了”消失的梯度“的表达式(下图)。书中有前两项的推导,试着将其推导完整。
在这里插入图片描述
表达式的推导步骤:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值