读书笔记:隐藏层的激活值的分布 weight_init_activation_histogram.py ← 斋藤康毅

隐藏层各层的激活值的分布都要求有适当的广度。为什么呢?因为通过在各层间传递多样性的数据,神经网络可以进行高效的学习。反过来,如果传递的是有所偏向的数据,就会出现梯度消失或者“表现力受限”的问题,导致学习可能无法顺利进行。

【隐藏层的激活值的分布】

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1/(1+np.exp(-x))

def ReLU(x):
    return np.maximum(0, x)

def tanh(x):
    return np.tanh(x)
    
input_data=np.random.randn(1000, 100)  # 1000个数据
node_num=100  # 各隐藏层的节点(神经元)数
hidden_layer_size=5  # 隐藏层有5层
activations={}  # 激活值的结果保存在这里

x=input_data

for i in range(hidden_layer_size):
    if i!=0:
        x=activations[i-1]

    # 改变初始值进行实验!
    # w=np.random.randn(node_num, node_num)*1
    # w=np.random.randn(node_num, node_num)*0.01
    w=np.random.randn(node_num, node_num)*np.sqrt(1.0/node_num)
    # w=np.random.randn(node_num, node_num)*np.sqrt(2.0/node_num)

    a=np.dot(x, w)

    # 改变激活函数的种类进行实验!
    z=sigmoid(a)
    # z=ReLU(a)
    # z=tanh(a)

    activations[i]=z

# 绘制直方图
for i, a in activations.items():
    plt.subplot(1, len(activations), i+1)
    plt.title(str(i+1)+"-layer")
    if i!=0: plt.yticks([], [])
    # plt.xlim(0.1, 1)
    # plt.ylim(0, 7000)
    plt.hist(a.flatten(), 30, range=(0,1))

plt.show()

w=np.random.randn(node_num, node_num)*1,激活函数为 sigmoid 函数时,输出下图:

 w=np.random.randn(node_num, node_num)*0.01,激活函数为 sigmoid 函数时,输出下图:

 



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值