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

文章目录

    • 一、多维数组
      • 使用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.mzph.cn/bicheng/9968.shtml

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

相关文章

一键追爆款,GPT一键改文‌‍‬⁣⁡​⁤⁢​⁢⁡⁣‬‍‌​​‬ ​‍⁤‬ ‬⁡⁡⁡‍‌‬⁡⁡⁢‬⁤⁢⁢⁤​‍‌​​‬ ​⁣‌,绘唐3,绘唐工具

ai画影满足你的制作要求 一键追爆款,GPT一键改文 AI推文小说&漫画解说&解压混剪 人物定义,角色定义,lora转换,模型转换,可视化参考满足 一键追爆款 一键挂机生成,效果更精彩,使用更方…

mysql 其他类型转换为BIT

看官网说明,BIT没什么特殊之处。但实际操作却不能将任何其他类型字段转为BIT,下面两个都报语法错误 CAST(column AS BIT(1)) AS aa , CAST(column AS BIT) AS bb, BIT value则模式是VARBINARY b1 as cc, -- cc为VARBINARY类型 下面是《高性能MySQL(第四版)》中关于BIT类型的…

C++随手写一个打字练习软件TL(TypeLetters)附原码

C随手写一个打字练习软件TL(TypeLetters)附原码 说明 软件名称:TL(TypeLetters) 开发语言:C 适合人群:零基础小白或C学习者 软件功能:打字练习软件TL(TypeLetters&#…

解双曲型非线性方程的Harden-Yee算法(TVD格式)

解双曲型非线性方程的Harden-Yee算法 先贴代码,教程后面有空再写 import matplotlib import math matplotlib.use(TkAgg) import numpy as np import matplotlib.pyplot as plt def Phiy(yy,epsi):#phi(y)if abs(yy) > epsi:phiyy abs(yy)else:phiyy (yy*yy…

C++ VScode: launch: program ...... dose not exist

VScode: launch: program … dose not exist 介绍 参考VS Code 配置 C/C 编程运行环境(保姆级教程)教程配置了VSCode。在配置launch.json适用多个.c 文件编译时,弹出下面错误。 原因和解决方法 是task.json 默认配置的问题。 默认的 cwd参…

【深度学习Labelme】使用Segment Anything Model (SAM)快速打标,labelme多边形转yolo txt框看看对不对

文章目录 windows安装环境打开labelme自动保存勾选上,保存图片数据不要勾选选SAM精准模型,然后打开图片路径,然后点击创建AI多边形:鼠标点击确认物体控制点,确认完成后,双击鼠标完成选取,并给上…

利用OpenShift的ImageStream部署临时版本

公司是港企,项目都部署在OpenShift上统一管理,因为运行环境为香港网络(外网),配置、中间件等大陆无法直接访问联通。因此在大陆开发时,测试是个很大的问题。为了避免往Git上频繁提交未确定可用的版本,选择用利用OpenSh…

嵌入式学习70-复习(wireshark使用和http协议)

--------------------------------------------------------------------------------------------------------------------------------- wireshark 1.sudo wireshark 2.选择 any , 3.搜索 http/tcp 54 为 发送的数据包 58 回复的数据包 请求报文 请求报文…

【NLP练习】使用seq2seq实现文本翻译

使用seq2seq实现文本翻译 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 from __future__ import unicode_literals, print_function, division from io import open import unicodedata import string impo…

05、Kafka 操作命令

05、Kafka 操作命令 1、主题命令 (1)创建主题 kafka-topics.sh --create --bootstrap-server 192.168.135.132:9092,192.168.135.133:9092,192.168.135.134:9092 --topic test1 --partitions 4 --replication-factor 3–bootstrap-server:…

Gradient发布支持100万token的Lllama3,上下文长度从8K扩展到1048K

前言 近日Gradient公司在Crusoe Energy公司的算力支持下,开发了一款基于Llama-3的大型语言模型。这款新模型在原Llama-3 8B的基础上,将上下文长度从8000 token大幅扩展到超过104万token。 这一创新性突破,展现了当前SOTA大语言模型在长上下…

类和对象(上篇)

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

【17-Ⅰ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础,通过阅读Java廖雪峰网站,简单速成了java,但对其中一些入门概念有所疏漏,阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

024.反转链表

给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3: 输…

《解锁高效合同管理系统:优化业务流程,提升管理效率》

随着企业规模的扩大和业务复杂性的增加,合同管理变得愈发重要。合同是企业与客户、供应商、合作伙伴之间的法律约束和商业承诺,而有效的合同管理系统则成为企业提高运营效率、降低风险的关键工具。本文将探讨合同管理系统的重要性以及如何利用合同管理系…

【YashanDB知识库】ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to YCM

问题现象 问题的风险及影响 导致数据库无法托管监控 问题影响的版本 问题发生原因 安装数据库时修改了OM的监听ip为127.0.0.1 解决方法及规避方式 后台修改OM的ip为本机的ip或者0.0.0.0 问题分析和处理过程 1、修改env文件中的om IP地址,修改为0.0.0.0或本机…

milvus元数据在etcd的存储解析

milvus元数据在etcd的存储解析 数据以key-value形式存在。 大致包含如下一些种类: databasecollectionfieldpartitionindexsegment-indexresource_groupsession database 创建一个数据库会产生2个key,但value是相同的。 key规则: 前缀/root-coord/database/db…

【深度学习】Diffusion扩散模型原理解析1

1、前言 diffusion,这几年一直很火的模型,比如这段时间在网上的文生图大模型——Stable diffusion。就是以diffusion作为基底模型,但由于该模型与VAE那边,都涉及了较多了概率论知识,实在让人望而却步。所以&#xff0…

线路和绕组中的波过程(二)

本篇为本科课程《高电压工程基础》的笔记。 本篇为这一单元的第二篇笔记。上一篇传送门。 行波通过串联电感与旁路并联电容 由于并联电容或串联电感的存在,线路上传播的行波会发生幅值和波形的变化。 直角波通过串联电感 有一个无限长的直角波 U 1 f U_{1f} U1…

C语言 | Leetcode C语言题解之第82题删除排序链表中的重复元素II

题目: 题解: struct ListNode* deleteDuplicates(struct ListNode* head) {if (!head) {return head;}struct ListNode* dummy malloc(sizeof(struct ListNode));dummy->next head;struct ListNode* cur dummy;while (cur->next && cu…