目录

1.多维数组的运算

(1)多维数组

(2)矩阵乘法

(3)神经网络的内积

2.3层神经网络的实现

(1)第一层加权和

(2)输入层到第1层的信号传递

(3)第1层到第2层的信号传递

(4)完整代码


1.多维数组的运算

(1)多维数组

多维数组的维数可以通过np.ndim()函数获得。此外,数组的形状可以通过实例变量shape获得。

二维数组也称为矩阵,数组的横向排列称为行(row),纵向排列称为列(column)

代码:

import numpy as np
A=np.array([1,2,3,4])
print("一维数组A的维数、形状、第一维度形状:")
print(A)
print(np.ndim(A))
print(A.shape)
print(A.shape[0])
B=np.array([[1,2],[3,4],[5,6]])
print("二维数组B的维数、形状、第一维度形状:")
print(B)
print(np.ndim(B))
print(B.shape)
print(B.shape[0])

运行结果:

(2)矩阵乘法

矩阵乘积的计算方法如下图所示

矩阵的乘积可以通过NumPy的np.dot()函数计算(乘积也称为点积)

代码:

(2*2矩阵点积计算)

A = np.array([[1,2],[3,4]])
print(A.shape)
B = np.array([[5,6],[7,8]])
print(B.shape)
print(np.dot(A,B))

运行结果:

(2*3矩阵和3*2矩阵点积运算)

A = np.array([[1,2,3],[4,5,6]])
print(A.shape)
B = np.array([[1,2],[3,4],[5,6]])
print(B.shape)
print(np.dot(A,B))

运行结果:

(2*3和2*2矩阵进行点积运算)

A = np.array([[1,2,3],[4,5,6]])
print(A.shape)
B = np.array([[1,2],[3,4],[5,6]])
C = np.array([[1,2],[3,4]])
print(C.shape)
print(np.dot(A,C))

运行结果:

出现报错“ValueError: shapes (2,3) and (2,2) not aligned: 3 (dim 1) != 2 (dim 0)”,这是因为在多维数组运算中,两个进行点积运算的矩阵中的对应维度个数必须相同

(3)神经网络的内积

使用numpy矩阵实现一个简单神经网络(省略了偏置和激活函数,只有权重)

下图为该简单神经网络的结构

代码:

X = np.array([1,2])
print(X.shape)
W = np.array([[1,3,5],[2,4,6]])
print(W)
print(W.shape)
Y = np.dot(X,W)
print(Y)

运行结果:

2.3层神经网络的实现

3层神经网络结构如下:

其中,该神经网络:输入层(第0层)有2个神经元,第1个隐藏层(第1层)有3个神经元,第2个隐藏层(第2层)有2个神经元,输出层(第3层)有2个神经元

增加表示偏置的神经元“1”,如下图所示:

(1)第一层加权和

使用矩阵的乘法运算,可以将第一层的加权和表示成下面的式子:

代码实现(这里将输入信号、权重、偏置设置为任意值)

X = np.array([1.0,0.5])
W1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
B1 = np.array([0.1,0.2,0.3])A1 = np.dot(X,W1) + B1

使用激活函数sigmoid后:

def sigmoid(x):return 1 / (1 + np.exp(-x))
X = np.array([1.0,0.5])
W1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
B1 = np.array([0.1,0.2,0.3])A1 = np.dot(X,W1) + B1
Z1 = sigmoid(A1)

(2)输入层到第1层的信号传递

代码:

W2 = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
B2 = np.array([0.1,0.2])A2 = np.dot(Z1,W2) + B2
Z2 = sigmoid(A2)

(3)第1层到第2层的信号传递

在这里我们定义了identity_function()函数(恒等函数),并将其作为输出层的激活函数。

(说明:输出层所用的激活函数,要根据求解问题的性质决定。一般地,回归问题可以使用恒等函数,二分类问题使用sigmoid函数,多元分类问题可以使用softmax函数

def identity_function(x):return x
W3 = np.array([[0.1,0.3],[0.2,0.4]])
B3 = np.array([0.1,0.2])A3 = np.dot(Z2,W3) + B3
Y = identity_function(A3) 

(4)完整代码

def init_network():network = {}network['W1'] = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])network['b1'] = np.array([0.1,0.2,0.3])network['W2'] = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])network['b2'] = np.array([0.1,0.2])network['W3'] = np.array([[0.1,0.3],[0.2,0.4]])network['b3'] = np.array([0.1,0.2])return networkdef sigmoid(x):return 1 / (1 + np.exp(-x))def identity_function(x):return ximport numpy as npdef forward(network, x):W1,W2,W3 = network['W1'],network['W2'],network['W3']b1,b2,b3 = network['b1'],network['b2'],network['b3']a1 = np.dot(x, W1) + b1z1 = sigmoid(a1)a2 = np.dot(z1, W2) + b2z2 = sigmoid(a2)a3 = np.dot(z2, W3) + b3y = identity_function(a3)return yif __name__ == '__main__':network = init_network()x = np.array([1.0,0.5])y = forward(network,x)print(y)

运行结果(输出y):

深度学习笔记——神经网络(ANN)搭建过程+python代码相关推荐

  1. HALCON 21.11:深度学习笔记---网络和训练过程(4)

    HALCON 21.11:深度学习笔记---网络和训练过程(4) HALCON 21.11.0.0中,实现了深度学习方法.关于网络和训练过程如下: 在深度学习中,任务是通过网络发送输入图像来执行的.整 ...

  2. 吴恩达深度学习笔记——神经网络与深度学习(Neural Networks and Deep Learning)

    文章目录 前言 传送门 神经网络与深度学习(Neural Networks and Deep Learning) 绪论 梯度下降法与二分逻辑回归(Gradient Descend and Logist ...

  3. 1.2)深度学习笔记------神经网络的编程基础

    目录 1)Binary Classification 2)Logistic Regression 3)Logistic Regression Cost Function 4)Gradient Desc ...

  4. Goodfellow深度学习笔记--神经网络架构

    目录 损失函数 指标选择 交叉熵 交叉熵代码 使用最大似然的优势 损失函数的具体形式 用于高斯输出分布的线性单元 用于Bernoulli输出分布的sigmoid单元 用于Multinoulli输出分布 ...

  5. 深度学习中的正则化技术(附Python代码)

    作者:SHUBHAM JAIN 翻译:和中华 校对:丁楠雅 本文约3500字,建议阅读20分钟. 本文简单介绍了什么是正则化以及在深度学习任务中可以采用哪些正则化技术,并以keras代码具体讲解了一个 ...

  6. python识别人脸多种属性_深度学习人脸识别仅9行python代码实现?同时高效处理100张相片?...

    随着人脸识别.视频结构化等计算视觉相关技术在安防.自动驾驶.手机等领域走向商业化应用阶段,计算视觉技术行业市场迎来大规模的爆发.伴随人脸识别.物体识别等分类.分割算法不断提升精度.计算视觉的核心算法深 ...

  7. 《深度学习笔记》——在训练过程中出现nan的调试笔记

    1 出现nan的理论分析 从本质上来说,"出现nan"现象主要是因为数值超出当前数据类型的表示范围,其含义是指"Not a Number",常在浮点数运算中出现 ...

  8. 深度学习笔记--基于Pytorch搭建VGG16网络

    目录 1--VGG16网络 2--代码实现 3--参考 1--VGG16网络 具体原理参考 VGG 网络的原论文:VGG原论文 VGG 16 网络结构如下图所示: VGG 16 网络的实现流程如下图所 ...

  9. 【深度学习之路记录02】python代码批量修改Labelme标注的json文件(删除标签、修改标签名)

    代码参考:https://blog.csdn.net/qq_44442727/article/details/112785978 创建自己的数据集时,经常需要一些调整,比如说修改某一批文件中已经标好的 ...

最新文章

  1. 安卓的自定义的DemoApplication 出现的问题。
  2. Linux Kernel TCP/IP Stack — L1 Layer — NIC Controller — SKB
  3. 安卓开发:关于适配的问题
  4. jump-server 安装部署
  5. 2018年11月份GitHub上最热门的开源项目
  6. 推荐算法炼丹笔记:如何让你的推荐系统具有可解释性?
  7. Maximum Element In A Stack 数据结构
  8. 2019牛客暑期多校训练营(第六场)
  9. MAC--PPTP教程
  10. MySQL IFNull 详解
  11. OAuth2,JWT,Open-ID Connect和其他令人困惑的事物
  12. Linux双独立显卡SLI,玩点新奇的 双显卡给你不同的“SLI”效果
  13. sql checksum_SQL Server中的CHECKSUM页面验证
  14. 字符编码笔记:ASCII,Unicode和UTF-8(转)
  15. android中一些常用的VIEW动作类型
  16. iis 回收工作进程时出错的解决办法
  17. 查找本库包括某字段的全部表
  18. X window 概念及原理图
  19. 上下文切换调优-性能设计沉思录(9)
  20. 两阶段最小二乘法原理_什么是两阶段最小二乘法(2sls)?

热门文章

  1. 开一家水果店需要哪些设备,开水果店需要的设备有哪些
  2. 时代互联报道:骗子盯上网银用户,认清银行网站域名,谨防上当
  3. 我的世界java下载慢怎么办_只需要这三步,用Java也能图片识别
  4. Alcatel OmniSwitch 重置密码
  5. 富士通代理Quad SPI铁电FRAM存储器MB85RQ4M
  6. 文本分类论文阅读笔记
  7. linux下---大于2G的文件解压安装7za
  8. Mac 安装 node.js 并进行配置
  9. euclidea教程_euclidea全攻略_euclidea几何构建全关卡通关攻略_玩游戏网
  10. Unity Shader - 模仿RenderImage制作全屏Quad,可以制作自定义后处理的流程