大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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)
无论是前向传播还是反向传播,所有的矩阵维数都是前后一致的!
3. 参数的随机初始化
对于\(W^{[l]}\)可以用高斯分布随机初始化,\(b^{[l]}\)可以初始化为0。
4. 激活函数
神经网络中的每个结点包括线性运算和非线性运算,激活函数就是非线性部分。
-
sigmoid激活函数:除了输出层是一个二分类问题基本不会用它。
-
tanh激活函数:tanh是几乎适合所有场合。
-
ReLu激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用ReLu或者Leaky ReLu。
二. 前向传播和反向传播
1. 前向传播
for l in range(1,L+1):
其中\(A^{[0]}=X;X={x_1,x_2,x_3}\)
2. 反向传播
3. 传播过程
三. 广播机制
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来使向量理想化
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167879.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...