神经网络与深度学习

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 获取main方法的返回值「建议收藏」

    获取main方法的返回值「建议收藏」通常main是不返回内容。但是实在要返回。也只能返回状态码给操作系统。System.exit(1);//异常System.exit(0);//正常当然也可以定以很多其他用于表示不同状态。至于如何从操作系统中取得这些状态码:Linux:echo$?  上一个执行命令之后的返回状态码Windows:要在windows系统下查看状态,键入C:direct

    2022年5月18日
    88
  • Class类的getClassLoader()方法

    Class类的getClassLoader()方法packageminglu;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;publicclassHelloWorld{ publicstaticvoidmain(String[]args)throwsInstantiationException,

    2022年5月11日
    56
  • xsrf form html,tornado开启了xsrf_cookies,在ckeditor中上传文件如何传入xsrf_form_html()?…

    xsrf form html,tornado开启了xsrf_cookies,在ckeditor中上传文件如何传入xsrf_form_html()?…tornado在setting中设置了”xsrf_cookies”:True,则需要在表单中添加{%modulexsrf_form_html()%}。但ckeditor如何传xsrf_cookies这个值,每次上传图片都显示’_xsrf’argumentmissingfromPOST。如果把”xsrf_cookies”设置为False则上传成功。下面是上传的代码classcku…

    2022年5月19日
    30
  • Netstat 网络命令详解

    Netstat 网络命令详解Netstat简介Netstat是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括tcp,udp以及unix套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。

    2022年7月3日
    18
  • 投影矩阵的推导_分块矩阵的行列式公式

    投影矩阵的推导_分块矩阵的行列式公式看了好几篇关于投影矩阵的文章,在z坐标的推导上,没有提到为什么z’和1/z成线性关系,而是通过结论中的投影矩阵,即已知z’=(zA+B)/w,并且x和x’,y和y’关系式中分母都有-z,所以w为-z,然后(-n,-f)映射到(-1,1),求出A、B,得到z’和z的关系。这是用结论去反推过程,过程再得到结论,这样的逻辑我觉得不对,我认为,应该是先得到x,y,z各自的关系式,才去构造出投影矩…

    2022年10月4日
    0
  • system.Exception:端口已被占用1080「建议收藏」

    system.Exception:端口已被占用1080「建议收藏」找出是哪个程序占用了1080端口打开cmd.exe,输入命令:netstat-aon|findstr"1080"1最后一列就是PID了,我的是3104. 要想知道此PID对应什么程序,可以继续输入:tasklist|findstr"4568"1打开任务管理器,在进程里面找下wpscloudsvr.exe,或者在服务里面找PID为3104。…

    2022年9月7日
    0

发表回复

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

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