深度学习中的线性代数基础

在深入学习深度学习领域时,首先接触到的是线性代数的概念,这些概念能帮助更好地理解算法的内部工作原理,从而做出更明智的决策。在深度学习中,前馈神经网络是最简单且非常有用的网络之一。本质上,前馈神经网络只是一个复合函数,它涉及到矩阵和向量的乘法运算。

线性代数的核心数据结构

线性代数中的核心数据结构包括标量、向量、矩阵和张量。矩阵运算在描述许多深度学习算法中起着重要作用。

线性代数矩阵操作的重要性

如果想成为深度学习领域的专业人士,那么掌握这些概念是不可或缺的。本文将讨论在描述深度学习方法中使用的重要的线性代数矩阵操作。

目录

  • 什么是矩阵?
  • 如何对不同矩阵进行加法和减法?
  • 如何找到给定矩阵的形状和大小?
  • 如何将密集矩阵转换为稀疏矩阵?
  • 如何找到矩阵的转置?
  • 如何计算矩阵的均值、方差和标准差?
  • 如何找到矩阵的迹?
  • 如何从矩阵中提取最小和最大元素?
  • 如何找到矩阵的行列式?
  • 如何乘以给定的矩阵?
  • 如何对矩阵的每个元素应用特定操作?
  • 如何找到矩阵的逆?
  • 如何将矩阵重塑为不同的大小?

什么是矩阵?

矩阵是由数字组成的矩形数组,可以看作是二阶张量。如果m和n是正整数,即m, n ∈ ℕ,那么m×n矩阵包含m*n个元素,有m行和n列。

import numpy as np matrix = np.array([[45,34],[67,58]]) # 创建一个矩阵 print("原始矩阵如下:", matrix) # 检查矩阵的维度 print("给定矩阵的维度是", matrix.ndim)

矩阵的加法和减法

在本节中,将使用add和subtract方法进行矩阵加法和减法。这些方法接受两个参数,分别返回两个矩阵的和与差。如果矩阵的形状不同,则会抛出错误,提示无法进行加法或减法。

matrix_1 = np.array([[45,34],[67,58]]) matrix_2 = np.array([[35,24],[57,48]]) # 两个矩阵相加 print("矩阵1和矩阵2相加的结果是:", np.add(matrix_1, matrix_2)) # 一个矩阵从另一个矩阵中减去 print("矩阵1从矩阵2中减去的结果是:", np.subtract(matrix_1, matrix_2)) print("矩阵2从矩阵1中减去的结果是:", np.subtract(matrix_2, matrix_1))

矩阵的形状和大小

在本节中,将找到给定矩阵的形状(即行数和列数)和大小(即矩阵中的元素数量)。

matrix = np.array([[45,34,75],[67,58,89]]) # 找到矩阵的行数和列数 print("给定矩阵的行数和列数分别是" + str(matrix.shape[0]) + "和" + str(matrix.shape[1]) + "。") # 矩阵中的元素数量 print("给定矩阵的大小是", matrix.size)

将密集矩阵转换为稀疏矩阵

首先,来理解什么是稀疏矩阵和密集矩阵。稀疏矩阵是一个主要由零值组成的矩阵。与此相反,主要由非零值组成的矩阵被称为密集矩阵。

from scipy import sparse # 创建一个密集矩阵 dense_matrix = np.array([[0,0],[0,17],[78,0]]) # 将密集矩阵转换为稀疏矩阵 sparse_matrix = sparse.csr_matrix(dense_matrix) print("给定密集矩阵对应的稀疏矩阵是:", sparse_matrix)

矩阵转置

在矩阵转置中,可以将行向量转换为列向量,反之亦然,即行变成列,列变成行。如果有一个矩阵A = [a_ij]_m×n,那么这个矩阵的转置是A_T = [a_ji]_n×m。

import numpy as np matrix = np.array([[45,34],[67,58]]) print("原始矩阵如下:", matrix) print("给定矩阵的转置是:", matrix.T)

矩阵的均值、方差和标准差

在本节中,将尝试找到与矩阵相关的一些统计数据。这里使用numpy函数计算矩阵的均值、方差和标准差。

import numpy as np matrix = np.array([[45,34],[67,58], [23,89]]) # 计算矩阵元素的均值 print("矩阵元素的均值等于", np.mean(matrix)) # 计算矩阵元素的方差 print("矩阵元素的方差等于", np.var(matrix)) # 计算矩阵元素的标准差 print("矩阵元素的标准差等于", np.std(matrix)) print("矩阵元素的标准差等于", np.sqrt(np.var(matrix)))

矩阵的迹

在本节中,将尝试找到矩阵的迹,即给定矩阵中所有对角线元素的和。

import numpy as np matrix = np.array([[1,2,3],[4,5,6], [7,8,9]]) # 获取矩阵的对角线元素 print("给定矩阵的对角线元素是:", matrix.diagonal()) # 计算矩阵的迹 print("给定矩阵的迹等于", matrix.diagonal().sum())

从矩阵中提取最小和最大元素

在本节中,将尝试找到矩阵中的最小和最大元素,即所有元素中值最高和最低的元素。

import numpy as np matrix = np.array([[1,2,3],[4,5,6], [7,8,9]]) # 找到矩阵中的最小元素 print("给定矩阵中的最小元素是", np.min(matrix)) # 找到矩阵中的最大元素 print("给定矩阵中的最大元素是", np.max(matrix))

矩阵的行列式

在本节中,将尝试找到矩阵的行列式。在这里,为了计算行列式,使用numpy包中的线性代数模块。

import numpy as np matrix = np.array([[1,2,4],[3,4,6], [7,8,5]]) # 找到矩阵的行列式 print("给定矩阵的行列式等于", np.linalg.det(matrix))

矩阵乘法

一个形状为(m x n)的矩阵A和一个形状为(n x p)的矩阵B相乘,结果是一个形状为(m x p)的矩阵C。记住,在乘法矩阵时,第一个矩阵的列数必须与第二个矩阵的行数相同,才能在没有错误的情况下进行乘法。

import numpy as np matrix_1 = np.array([[45,34],[67,58]]) matrix_2 = np.array([[35,24],[57,48]]) print("给定两个矩阵的乘法结果是:", np.matmul(matrix_1, matrix_2))

使用内联函数(Lambda)进行逐元素操作

在这个例子中,将尝试将某个值加到矩阵的每个元素上。

import numpy as np matrix = np.array([[1,2,4],[3,4,6], [7,8,5]]) addition = lambda i:i+5 add_5_vec = np.vectorize(addition) print("将所有元素加5后的矩阵是:", add_5_vec(matrix))

矩阵的逆

在本节中,将尝试找到矩阵的逆。

import numpy as np matrix = np.array([[1,2,4],[3,4,6], [7,8,5]]) # 找到矩阵的逆 print("给定矩阵的逆矩阵是:", np.linalg.inv(matrix))

重塑给定矩阵

在本节中,将尝试重塑给定的矩阵,即改变给定矩阵的形状。但在这里需要注意的是,重塑矩阵后大小保持不变,即元素数量保持相同。

import numpy as np matrix = np.array([[1,2,4],[3,4,6],[7,8,5],[9,2,1]]) print("重塑后的矩阵是:", matrix.reshape(6,2))

也可以查看之前的博客文章。

之前的数据分析博客文章。

LinkedIn - 这是LinkedIn个人资料,如果想与联系的话。很高兴能与建立联系。

Email - 如果有任何疑问,可以通过Gmail给发邮件。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485