【神经网络】矩阵乘法的应用详解

news2024/10/7 12:21:22

文章目录

    • 一、多维数组
      • 使用NumPy创建和操作多维数组
    • 二、矩阵乘法
      • 矩阵乘法的基本定义
      • 计算 2x2 矩阵的乘积
      • 矩阵形状的要求
      • 特殊情况:矩阵与向量的乘积
    • 三、神经网络中的矩阵乘法
      • 神经网络的结构简介
      • 矩阵乘法在神经网络中的应用
      • 计算细节和NumPy的实现

一、多维数组

多维数组,简单来说,就是数字的集合,这些数字可以排成一列(一维数组)、一个矩阵(二维数组)、或更高维度的结构。

使用NumPy创建和操作多维数组

  • 创建一维数组

    import numpy as np
    A = np.array([1, 2, 3, 4])
    print(A)  # [1 2 3 4]
    
  • 查询数组维度

    np.ndim(A)
    

    输出表示数组的维度,对于A来说输出为1,表示这是一个一维数组。

  • 查询数组形状

    A.shape
    

    输出为一个元组 (4,),表示数组有4个元素。shape 属性返回一个元组,表示数组在每个维度上的大小。

  • 创建二维数组

    B = np.array([[1, 2], [3, 4], [5, 6]])
    print(B)
    # [[1 2]
    #  [3 4]
    #  [5 6]]
    
    np.ndim(B)  # 对于二维数组B,输出为2,表示这是一个二维数组。
    B.shape  # 输出为 (3, 2),表示这个数组有3行2列。
    

二、矩阵乘法

矩阵乘法的基本定义

矩阵乘法涉及两个矩阵:左矩阵 A A A 和右矩阵 B B B。计算结果是一个新的矩阵 C C C,其中的每个元素是通过 A A A 的行与 B B B 的列对应元素相乘后求和得到的。具体的计算方法可以表示为:
C [ i ] [ j ] = ∑ k ( A [ i ] [ k ] × B [ k ] [ j ] ) C[i][j] = \sum_{k} (A[i][k] \times B[k][j]) C[i][j]=k(A[i][k]×B[k][j])
其中, i i i 表示行索引, j j j 表示列索引, k k k 表示求和的索引。

计算 2x2 矩阵的乘积

考虑两个 2x2 的矩阵 A A A B B B
A = [ 1 2 3 4 ] , B = [ 5 6 7 8 ] A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} A=[1324],B=[5768]
使用 NumPy 库的 np.dot() 函数,我们可以得到矩阵 C C C
C = [ 19 22 43 50 ] C = \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix} C=[19432250]

这里,元素 C [ 0 ] [ 0 ] C[0][0] C[0][0] 的计算方式是:
C [ 0 ] [ 0 ] = 1 × 5 + 2 × 7 = 19 C[0][0] = 1 \times 5 + 2 \times 7 = 19 C[0][0]=1×5+2×7=19

矩阵形状的要求

要实现矩阵乘法,矩阵 A A A 的列数必须与矩阵 B B B 的行数相等。如果这两个矩阵的维度不匹配,将导致计算错误。此外,还有一点很重要,就是运算结果的矩阵 C C C 的形状是由矩阵 A A A 的行数 和矩阵 B B B 的列数构成的。

在这里插入图片描述

特殊情况:矩阵与向量的乘积

当我们将矩阵与向量相乘时,同样遵循维度匹配的规则。

在这里插入图片描述

下面是个例子

import numpy as np

# 定义矩阵 A
A = np.array([[1, 2], [3, 4], [5, 6]])

# 定义向量 B
B = np.array([7, 8])

# 计算矩阵 A 和向量 B 的乘积
C = np.dot(A, B)

# 打印结果向量 C
print(C)

在这段代码中:

  • A 是一个 3x2 的矩阵。
  • B 是一个长度为 2 的向量。
  • 使用 np.dot() 函数计算 A A A B B B 的点积,结果是一个长度为 3 的向量 C C C

C = [ 23 53 83 ] C = \begin{bmatrix} 23 \\ 53 \\ 83 \end{bmatrix} C= 235383

三、神经网络中的矩阵乘法

神经网络的结构简介

考虑一个简单的神经网络,它包括两个输入节点和三个输出节点,如图所示

在这里插入图片描述

这个网络的结构可以通过以下的矩阵 X X X(输入)和 W W W(权重)来表示:
X = [ 1 2 ] , W = [ 1 3 5 2 4 6 ] X = \begin{bmatrix} 1 \\ 2 \end{bmatrix}, \quad W = \begin{bmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{bmatrix} X=[12],W=[123456]
这里, X X X 是一个 2x1 的列向量,代表输入层的节点,而 W W W 是一个 2x3 的矩阵,代表从每个输入节点到输出节点的权重。

矩阵乘法在神经网络中的应用

在神经网络中,下一层的输出 Y Y Y 可以通过当前层的输入 X X X 和权重 W W W 的矩阵乘积来计算:
Y = X T W = [ 1 2 ] [ 1 3 5 2 4 6 ] = [ 5 11 17 ] Y = X^T W = \begin{bmatrix} 1 & 2 \end{bmatrix} \begin{bmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{bmatrix} = \begin{bmatrix} 5 & 11 & 17 \end{bmatrix} Y=XTW=[12][123456]=[51117]
这里, X T X^T XT 表示 X X X 的转置,使得其维度与 W W W 相匹配,从而可以执行矩阵乘法。

计算细节和NumPy的实现

使用 NumPy 库可以简洁地实现这种类型的矩阵乘法。

import numpy as np

# 定义输入向量 X
X = np.array([1, 2])

# 定义权重矩阵 W
W = np.array([[1, 3, 5], [2, 4, 6]])

# 计算输出向量 Y
Y = np.dot(X, W)
print(Y)  # 输出: [5 11 17]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1659431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习300问】80、指数加权平均数是什么?

严格讲指数加权平均数并不是机器学习中的专有知识,但他是诸多梯度下降优化算法的基础,所有我打算专门写一篇文章来介绍这种计算平均数的方法。还是老规矩,首先给大家来两个例子感受一下什么是指数加权平均数。 一、两个例子感性理解什么是指…

【数据结构(邓俊辉)学习笔记】栈与队列01——栈应用(栈混洗、前缀后缀表达式、括号匹配)

文章目录 0. 概述1. 操作与接口2. 操作实例3. 实现4. 栈与递归5. 应用5.1 逆序输出5.1.1 进制转换5.1.1.1 思路5.1.1.2 算法实现 5.2 递归嵌套5.2.1 栈混洗5.2.1.1 混洗5.2.1.2 计数5.2.1.3 甄别 5.2.2 括号匹配5.2.2.1 构思5.2.2.2 实现5.2.2.3 实例 5.3 延迟缓冲5.3.1 中缀表…

https介绍,加密解密(举例+必要性,对称/非对称加密介绍),数字摘要/指纹(介绍,应用(session id,网盘的秒传功能))

目录 https 引入 介绍 加密解密层 介绍 没有绝对的安全 使用ssl的弊端 加密解密 概念 加密 解密 秘钥 举例 现实中 网络中 加密的必要性 常见加密方式 对称加密 特点 非对称加密 特点 数字摘要/指纹 介绍 应用 session id 百度网盘的秒传功能 https …

设备能耗数据在线监测

在追求可持续发展和绿色经济的当下,企业对于设备能耗的管理愈发重视。设备能耗数据在线监测,不仅能帮助企业实时掌握设备的运行状况,还能为企业节能减排、降低运营成本提供有力支持。HiWoo Cloud平台凭借其先进的技术和丰富的经验&#xff0c…

qt操作硬件(以imx6ull为例)

下面用imx6ull的qt点灯说明,这里要使用c,c混合编程 一、完成ui界面位置 构造一个这样的简单界面即可,主要是实现open和close的槽函数即可。我这里分别把两个按钮改名为为openbt closebt了 二、实现逻辑功能 2.1完成led类创建 在主文件夹le…

网络演进技术演进:裸纤专线、SDH、MSTP+、OTN、PTN、IP-RAN

前言 文章主要介绍常见名词以及其在各自领域实现的功能价值。 01 裸纤 裸光纤(裸光纤)由运营商提供,是无中继的光纤线路,仅通过配线架连接。相比传统光纤,裸光纤提供纯粹的物理传输路径,无需额外网…

【C++】类与对象(类章节)

面向过程和面向对象 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完 成。 一、类 1.类…

OpenBayes 一周速览|Apple 开源大模型 OpenELM 上线;字节发布 COCONut 首个全景图像分割数据集,入选 CVPR2024

公共资源速递 This Weekly Snapshots ! 5 个数据集: * COCONut 大规模图像分割数据集 * THUCNews 新闻数据集 * DuConv 对话数据集 * 安徽电信知道问答数据集 * Sentiment Analysis 中文情感分析数据集 2 个模型: * OpenELM-3B-Inst…

面试笔记——类加载器

基础 类加载器:用于装载字节码文件(.class文件)运行时数据区:用于分配存储空间执行引擎:执行字节码文件或本地方法垃圾回收器:用于对JVM中的垃圾内容进行回收 类加载器 :JVM只会运行二进制文件,类加载器的…

Python入门系列-02 pip的安装

目录 一、pip介绍二、pip安装检查三、pip安装 一、pip介绍 pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。 二、pip安装检查 你可以通过以下命令来判断是否已安装。 pip --version # Python2.x 版本命令 pip3 --versio…

uniapp——弹出键盘遮挡住输入框 textarea,处理方法

案例 在写输入框的时候会遇见 键盘遮挡住部分textarea框的一部分&#xff0c;使用cursor-spacing处理即可 修改后&#xff1a; 其他问题&#xff1a; 调起键盘输入时&#xff0c;不希望上方的内容被顶上去 代码 <view class"commentBox" :style"botto…

蓝桥杯EDA常见电路原理图设计和分析

目录 前言 一、常见器件及其作用 二、原理图设计题目 1.蜂鸣器原理图 2.LCD背光控制电路 3.参考电压源 4.低通滤波器电路设计 5.5-3.3电源转换电路 6.3.3V-VDD_EXT电平转换电路 7.DS18B20原理图 8.供电输出控制接口电路 9.电源检测接口电路 10.USB转串口电路 三、…

微信小程序原生组件使用

1、video组件使用 <view class"live-video"><video id"myVideo" src"{{videoSrc}}" bindplay"onPlay" bindfullscreenchange"fullScreenChange" controls object- fit"contain"> </video&g…

每日两题 / 104. 二叉树的最大深度 102. 二叉树的层序遍历(LeetCode热题100)

104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 递归判断&#xff0c;当前节点的最大深度为1 max(左节点的最大深度&#xff0c;右节点的最大深度) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …

PowerPhotos for Mac:您的照片管理助手

PowerPhotos for Mac&#xff0c;作为一款专业的照片管理软件&#xff0c;为用户提供了全方位的照片管理解决方案。从照片的导入、整理到查找、编辑&#xff0c;PowerPhotos都能为您提供便捷的操作体验。 首先&#xff0c;PowerPhotos支持多库管理&#xff0c;用户可以根据需要…

Spark云计算平台Databricks使用,第一个scala程序

1) 创建Spark计算集群 Spark云计算平台Databricks使用&#xff0c;创建workspace和cluster-CSDN博客 2) 创建notebook Workspace -> Users&#xff0c;选择用户&#xff0c;点击Create -> Notebook 选择集群&#xff0c;可以修改notebook名字 修改了notebook名字 选择S…

triton之语法学习

一 基本语法 1 torch中tensor的声明 x = torch.tensor([[1,2, 1, 1, 1, 1, 1, 1],[2,2,2,2,2,2,2,2]],device=cuda) 声明的时候有的时候需要指出数据的类型,不然在kernel中数据类型无法匹配 x = torch.tensor([1,2,1,1,1,1,1,1],dtype = torch.int32,device=cuda) 2 idx id…

关于冯诺依曼体系结构 和 操作系统(Operator System)的概念讲解(冯诺依曼体系结构,操作系统的作用等)

目录 一、冯诺依曼体系结构 二、操作系统 1. 概念 2. 设计操作系统的目的 3.系统调用和库函数概念 4.总结 三、完结撒❀ 一、冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截…

酷开科技AI技术支持,酷开系统根据你的喜好量身定制节目

在当今数字化时代&#xff0c;个性化推荐已成为提升消费者体验的关键因素。酷开科技的智慧AI&#xff0c;为消费者提供了精彩的内容推荐服务&#xff0c;更大地丰富了消费者的娱乐生活。 酷开系统中的AI推荐引擎通过学习消费者的观看习惯和偏好&#xff0c;能够快速识别其兴趣…

idea java 后缀补全

ArrayList<$EXPR$> enters new ArrayList<>();for (int i 0; i < enters.size(); i) {$EXPR$ enter enters.get(i);enter$END$} 让编程效率翻倍的IDEA快捷键—自定义后缀补全_哔哩哔哩_bilibili