在深入学习深度学习领域时,首先接触到的是线性代数的概念,这些概念能帮助更好地理解算法的内部工作原理,从而做出更明智的决策。在深度学习中,前馈神经网络是最简单且非常有用的网络之一。本质上,前馈神经网络只是一个复合函数,它涉及到矩阵和向量的乘法运算。
线性代数中的核心数据结构包括标量、向量、矩阵和张量。矩阵运算在描述许多深度学习算法中起着重要作用。
如果想成为深度学习领域的专业人士,那么掌握这些概念是不可或缺的。本文将讨论在描述深度学习方法中使用的重要的线性代数矩阵操作。
矩阵是由数字组成的矩形数组,可以看作是二阶张量。如果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))
在这个例子中,将尝试将某个值加到矩阵的每个元素上。
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给发邮件。