神经网络与深度学习

神经网络与深度学习神经网络的基本知识

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

学习资料:deeplearning.ai的《神经网络和深度学习》

一. 深层神经网络

1. 为什么需要深层神经网络

  • 对于深层神经网络,神经网络前几层的特征比较简单,之后几层可以抽取出更复杂的特征。
    比如:语音识别:前几层是声音的声波识别->声音的音位->声音里的字母->单词->短语->句子
    从最简单的特征的不断向上提升层次。
  • 是遵循电路原理:浅层次的网络相对于深层次的需要指数级的神经单元才能达到和深层次的同样效果。

当然神经网络不是越深越好,层次的深度和调参数一样,也是需要不断的尝试选择一个最适合的层次。

2. 神经网络中的参数及其维度

L代表层数,输入层为第0层(l=0),一个n层神经网络有n-1层隐藏层。

每一层神经网络都有输出,记作\(A^{[l]}\),输入层输入的特征记作\(x\),但是\(x\)同样也是0层的输出,所以\(x=A^{[0]}\)

假设每个样本有\(x\)个特征,训练集总共有m个样本。

\(A^{[l]}\)\(Z^{[l]}\)维度:(\(n^{[l]}\),m)

\(W^{[l]}\)维度:(\(n^{[l]}\),\(n^{[l-1]}\))

\(b^{[l]}\)维度:(\(n^{[l]}\),1)

无论是前向传播还是反向传播,所有的矩阵维数都是前后一致的!

截屏2020-01-15下午12.40.11

3. 参数的随机初始化

对于\(W^{[l]}\)可以用高斯分布随机初始化,\(b^{[l]}\)可以初始化为0。

4. 激活函数

神经网络中的每个结点包括线性运算和非线性运算,激活函数就是非线性部分。

  • sigmoid激活函数:除了输出层是一个二分类问题基本不会用它。

  • tanh激活函数:tanh是几乎适合所有场合。

  • ReLu激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用ReLu或者Leaky ReLu

神经网络与深度学习

二. 前向传播和反向传播

1. 前向传播

for l in range(1,L+1):

\[Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]} \]

\[A^{[l]}=g^{[l]}(Z^{[l]}) \]

其中\(A^{[0]}=X;X={x_1,x_2,x_3}\)

2. 反向传播

截屏2020-01-15下午12.29.34

3. 传播过程

截屏2020-01-15下午12.30.27

三. 广播机制

1. 广播broadcast

两个多维度向量加减乘除时,只要两个向量columns或者ranks有一个相等,即行数相等或者列数相等则可以在相应的位置上进行运算。如果没有哪一个对应相等,则不可以运算。

(m*n)数组 与 (m*1)/(1*n)数组都可以进行+-*/。
运算时(m*1)/(1*n)自动扩充至(m*n)
同理:
(1*m) 与 k也可以运算

注意:如果列数等于行数不可以进行运算!唯一的特例:(1,n)与(n,1)之间可以运算,结果为(n,n)维向量

2. 乘法使用

元素乘法:np.multiply(a,b)
矩阵乘法:np.dot(a,b) 或 np.matmul(a,b) 或 a.dot(b)
唯独注意:*,在 np.array 中重载为元素乘法,在 np.matrix 中重载为矩阵乘法!

元素乘法可以用利用broadcast;而矩阵乘法必须要满足(m*n)(n*k)

3. 定义矩阵时的建议

shape: (n,) 与 (1,n) 区别:
例: (4,) [1,2,3,4] 一维数组 
    (1,4) [[1,2,3,4]] 二维数组

1.不要使用rank 1array!

如下:
不要使用:
a = np.arange(100)
a = np.random.randn(5)

用(1,n)(n,1)等来代替
a = np.arange(100).reshape(1,100)
a = np.random.randn(1,5)

2.经常使用np.reshape来使向量理想化

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167879.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 电脑开机显示“DISK Boot Failure,Insert System Disk And Press Enter”

    电脑开机显示“DISK Boot Failure,Insert System Disk And Press Enter” 电脑开机自检时无法通过,并在界面出现“DISKBootFailure,InsertSystemDiskAndPressEnter”的错误提示。这样的问题该如何解决?今天小编教大家如何排除故障。 造成电脑开机,屏幕上出现“DISKBootFailure,InsertSystemDiskAndPressEnter”故障的原因有: (1)由于硬盘,光驱连在同一条数据线上,但…

    2022年7月13日
    56
  • windows10 系统设置一键备份

    windows10 系统设置一键备份1、打开pe下优启通桌面的EIX系统安装;2、分区备份—–C盘——-新建映像文件3、选择保存路径,非C盘,重命名;4、一键备份5、确认;

    2022年6月25日
    31
  • J1939协议之通俗易懂—-简介

    J1939协议之通俗易懂—-简介J1939简介 J1939协议简介J1939协议是由美国汽车工程师协会(SAE)(SAE协会简介)定义的一组标准。J1939标准用于卡车、公共汽车和移动液压等重型车辆。在许多方面,J1939标准类似于旧版J1708和J1587标准,但J1939标准协议建立在CAN(控制器区域网络,ISO11898)上。物理层(J1939/11)描述了针对客车的电气接口。数据链路层描述…

    2022年5月1日
    316
  • python垃圾回收机制(引用计数)

    python垃圾回收机制(引用计数)在Python中,垃圾回收机制主要是以引用计数为主要手段,以标记清除和分代回收机制作为辅助手段实现的

    2022年6月22日
    30
  • DirectByteBuffer_bytebuffer.get

    DirectByteBuffer_bytebuffer.getByteBuffer是NIO里用得最多的Buffer,它包含两个实现方式:HeapByteBuffer是基于Java堆的实现,而DirectByteBuffer则使用了unsafe的API进行了堆外的实现。这里只说HeapByteBuffer。在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据

    2022年10月2日
    3
  • emWin学习[通俗易懂]

    emWin学习[通俗易懂]一、API学习  1.1、初始化     intGUI_Init(void); 函数来初始化emWin内部数据结构和变量。如果在初始化之前调用WM_SetCreateFlags()使用窗口管理器,则在GUI_Init()内创建背景窗口。(也就是窗口设置创建标记必须在初始化之前)。  1.2、显示文本     可以显示字符串、十六进制、十进制、二进制数,文

    2022年10月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号