权重W不能全部初始化为0,原因很简单,我们可以自己在本子上推导一下,假设现有一个含有一个隐藏层,隐藏层含有两个神经元初始输入为两个向量的网络,如果权重初始化全部为0,那么,第一层的输出,会和第二层的输出相等,这样我们反向传播更新权重的时候也会发现,两个W始终相等,所以这种初始化的方法行不通,另外再说b,这里得说一下的就是b是可以被初始化为0的,对训练效果并没有多少影响。那么,w,b到底怎样将他们初始化呢,其实可以用随机数的方法将他们初始化。用python来写就是像这样:

W_1 = np.random.randn((2,2))*0.01
b_1 = np.zero((2,1))
W_2 = np.random.randn((1,2))*0.01
b_2 = 0

第一行代码后面乘一个0.01的作用是在为了防止Z过大,而导致梯度下降得太慢,训练速度太慢。

这里牵扯到几种激活函数了

常见的激活函数有四种,我之前还只知道sigmoid。。

1,sigmoid

2,tanh

3,ReLU(线性整流函数)

4,Leaky RU

在知道这个之前,我一直以为sigmoid是最好用的,之后在看了资料之后才知道tanh其实效果比sigmoid好一点,因为依据他的图像,我们不难发现。他的取值范围在[-1,1],隐藏层的输出限定这之间,可以看成是在0值附近分布,均值为0,有归一的效果,所以作为隐藏层的激活函数的话,tanh比sigmoid好,输出的话,一般还是选sigmoid

但是,这两个函数,任何事都有两面,他们也有不好的时候,那就是在Z过大的时候,这两个函数的函数曲线变得很平稳,导致他们梯度下降的很慢,所以这里又来了后面那两个函数,一个是ReLU,他在Z大于0的 时候,斜率都为1,这样就加快了梯度下降的速度,不过,他的缺点也很明显,他在z小于0时候,斜率恒为0,这是LeakyRU就出来了,他的 另外一部分斜率不为0。

总结,一般分类问题中,我们用sigmoid,不过隐藏层一般用tanh,实际中,一般用后面两个,各有优势,具体用哪个,具体问题具体分析

转载于:https://www.cnblogs.com/Yintianhao/p/9157406.html

W,b的初始化和几种激活函数相关推荐

  1. DL之DNN优化技术:采用三种激活函数(sigmoid、relu、tanh)构建5层神经网络,权重初始值(He参数初始化和Xavier参数初始化)影响隐藏层的激活值分布的直方图可视化

    DL之DNN优化技术:采用三种激活函数(sigmoid.relu.tanh)构建5层神经网络,权重初始值(He参数初始化和Xavier参数初始化)影响隐藏层的激活值分布的直方图可视化 目录

  2. 深度学习中常见的10种激活函数(Activation Function)总结

    目录 一:简介 二:为什么要用激活函数 三:激活函数的分类 四:常见的几种激活函数 4.1.Sigmoid函数 4.2.Tanh函数 4.3.ReLU函数 4.4.Leaky Relu函数 4.5.P ...

  3. 三种激活函数——Sigmoid,Tanh, ReLU以及卷积感受野的计算

    1. 三种激活函数--Sigmoid, Tanh, ReLU 1.1 Sigmoid 1.1.1 公式 S ( x ) = 1 1 + e − x S(x) = \frac{1}{1 + e^{-x} ...

  4. C语言中字符数组初始化的几种方法

    欢迎关注我的微信公众号:CurryCoder的程序人生 1.C语言中的字符数组初始化 在C语言中,字符串是当做字符数组来处理的:所以字符串有两种声明方式,一种是字符数组,一种是字符指针. 1.1 直接 ...

  5. 使用神经网络做二分类,输出层需要几个神经元?应该选择哪一种激活函数?如果要处理minst数据、输出层需要几个神经元?使用那种激活函数?如果使用神经网络预测房价,输出层需要几个神经元、使用什么激活函数?

    使用神经网络做二分类,输出层需要几个神经元?应该选择哪一种激活函数?如果要处理minst数据.输出层需要几个神经元?使用那种激活函数?如果使用神经网络预测房价,输出层需要几个神经元.使用什么激活函数? ...

  6. C++类中成员变量的初始化有两种方式

    C++类中成员变量的初始化有两种方式: 构造函数初始化列表和构造函数体内赋值.下面看看两种方式有何不同. 成员变量初始化的顺序是按照在那种定义的顺序. 1.内部数据类型(char,int--指针等) ...

  7. C语言的二维数组初始化的几种方式介绍(私藏大数组初始化方式)

    C语言的二维数组初始化的几种方式介绍 1.直接赋值 2.循环对每个元素赋值 3.借用memset/memset_s初始化为0或-1 4.`数组所有元素初始化为相同值(用于大数组初始化贼方便)` 1.直 ...

  8. C++对类中字符串成员进行初始化的两种方法以及友元函数的使用

    在C++之中,如果要建立一个类,且类中需要有字符串数据成员,我们可以把该成员声明成两种类型. 第一种方法:使用头文件string,把字符串数据成员声明为string类的对象,用这种方法对字符串操作十分 ...

  9. C++11 - std::shared_ptr初始化的几种方式

    文章目录 1 std::shared_ptr初始化的几种方式 1.1 构造函数初始化 1.2 std::make_shared 初始化(推荐方式) 1.3 reset初始化 1 std::shared ...

  10. java类初始数组_java中数组初始化的三种方式是什么

    java中数组初始化的三种方式是:1.静态初始化,如[int a[] = {2, 0, 1, 9, 2020}]:2.动态初始化,如[int[] c = new int[4]]:3.默认初始化,如[i ...

最新文章

  1. Ubuntu下Nginx/PHP/MYSQL开发环境的配置方法
  2. Laravel核心解读--完结篇
  3. windows上报错:Could not find a version that satisfies the requirement torch==0.4.1
  4. DevExpress的GridControl的使用以及怎样添加列和绑定数据源
  5. CodeForces - 1092F Tree with Maximum Cost(树形dp+树根转移)
  6. python反序列化总结_单例模式的反序列化总结
  7. python turtle画动物_如何用python画简单的动物
  8. Linux内核设计第四周——扒开系统调用三层皮
  9. mysql 存储过程的使用;
  10. java web 机试_java web 机试
  11. ServerVariables 变量
  12. 当我讲容灾交付前,我先说点啥?
  13. i511300h和i51135g7的区别 i5 1135g7和11300h核显对比
  14. php输出一个直角三角形,php hypot()直角三角形斜边长度 is_infinite()是否为无限值...
  15. Python中单引号,双引号和三引号各自的作用
  16. UTF-8字符「EF BF BD」-备胎
  17. 安装配置ELK、安装配置ElasticSearch7.13、安装配置Kibana7.13、安装配置Logstash7.13、ElasticSearch7.13安装中文分词器
  18. 微信小程序 父子组件通讯/传值
  19. 【图像处理中的数学修炼(第1版)】总纲:详解图像背后的数学原理
  20. 区块链安全初探(二):区块链的层次

热门文章

  1. 手机电脑投屏软件_手机投屏电脑,电脑控制手机,推荐这款良心免费的软件
  2. python生成折线图怎么对特定点做颜色_python库matplotlib绘制折线图,散点图以及设置样式...
  3. Linux c 多线程写日志,linux c/c++多线程程序的编写(转)
  4. mmlspark-101: TrainClassifier
  5. [codeup 2134] FatMouse's Trade
  6. Python 3 从入门到精通 Mac OS
  7. DarkMode 设置关闭 iOS 13, 适用于 XCode 11, XCode 10
  8. 算法:回溯九 Plus在数字字符串中加入加号,求所有情况的和
  9. android勾选控件_【Android 开发】:UI控件之复选框控件 CheckBox 的使用方法
  10. Reverse Linked List(非递归解法)