Python 庫學習

學習目標

numpy: 将列表转化为矩阵进⾏运算从⽽实现加速

学习⽅向: 如何⽣成多维数组(通过列表嵌套构造,通过shape,size初始化)多维数组之间如何进⾏运算,+,-,*,/, 矩阵的shape和size如何转化

后续使⽤pytorh也有⼤量的矩阵运算,其程序编写逻辑和numpy⼏乎类似,在numpy打好基础,有利于学好pytorch,以及matlab等

pandas:⽤于处理表格和混杂数据,更偏向于数据分析,在实际⼯程项⽬如数据分析,数据挖掘等项⽬,会有⼴泛的应⽤(做科研暂时不需要)
PIL:图像处理库,常⽤于计算机视觉任务当中的预处理操作,以及常规图像处理操作
torch:深度学习库,是科研常⽤的深度学习框架,后期搭建⽹络时,绝⼤多数论⽂对应的代码均是使⽤torch的,要求明⽩当中例如卷积层、批量归⼀化操作等⽅法的调⽤。

Numpy

你可以使用 NumPy 库来:

創建多維數組

以下是几种不同的方法:

  1. 通过列表嵌套构造

    • 首先,你可以使用 Python 的列表来构造多维数组。例如,以下代码创建一个 2x3 的二维数组:
      1
      2
      3
      import numpy as np
      my_list = [[1, 2, 3], [4, 5, 6]]
      my_array = np.array(my_list)
    • 这将生成一个包含给定列表元素的 NumPy 数组。
  2. 通过 shape 和 size 初始化

    • 使用 np.zerosnp.ones 函数可以创建指定形状的数组,并将其初始化为零或一。例如,以下代码创建一个 3x4 的二维数组,其中所有元素都为零:
      1
      zeros_array = np.zeros((3, 4))
    • 类似地,你可以使用 np.ones 来创建一个初始化为 1 的数组。
  3. 其他方法

    • 你还可以使用 np.emptynp.fullnp.eye 等函数来创建和填充数组。
    • 例如,np.empty 创建一个未初始化的数组,np.full 创建一个填充给定值的数组,np.eye 创建一个对角线为 1 的矩阵。

总之,NumPy 提供了多种方式来创建多维数组,你可以根据需求选择合适的方法。

數組運算

在 NumPy 中,你可以对多维数组进行各种运算,包括加法、减法、乘法和除法。以下是一些示例:

  1. 加法(+)

    • 你可以使用 + 运算符将两个数组相加。确保这两个数组的形状相同,否则会引发错误。例如:
      1
      2
      3
      4
      import numpy as np
      array1 = np.array([[1, 2], [3, 4]])
      array2 = np.array([[5, 6], [7, 8]])
      result = array1 + array2
      这将返回一个新的数组,其元素为对应位置的和。
  2. 减法(-)

    • 同样,你可以使用 - 运算符将两个数组相减。形状必须相同。例如:
      1
      result = array1 - array2
      这将返回一个新的数组,其元素为对应位置的差。
  3. 乘法(*)

    • 你可以使用 * 运算符执行元素级别的乘法。例如:
      1
      result = array1 * array2
      这将返回一个新的数组,其元素为对应位置的乘积。
  4. 除法(/)

    • 使用 / 运算符执行元素级别的除法。注意避免除以零。例如:
      1
      result = array1 / array2
      这将返回一个新的数组,其元素为对应位置的商。

总之,NumPy 提供了丰富的功能来处理多维数组之间的运算,你可以根据需要选择合适的操作。

sizeshape 的關係

NumPy 中,你可以使用以下方法来处理矩阵的形状和大小:

  1. shape:返回矩阵的形状(维度)。

    • 例如,如果你有一个名为 my_matrix 的矩阵,你可以通过以下方式获取其形状:
      1
      2
      3
      4
      import numpy as np
      my_matrix = np.array([[1, 2, 3], [4, 5, 6]])
      matrix_shape = my_matrix.shape
      print("矩阵形状:", matrix_shape) # 输出 (2, 3),表示2行3列
    • matrix_shape 是一个包含行数和列数的元组。
  2. size:返回矩阵中元素的总个数。

    • 你可以使用以下方式计算矩阵 my_matrix 中的元素个数:
      1
      2
      matrix_size = my_matrix.size
      print("矩阵元素个数:", matrix_size) # 输出 6

因此,

size=shape[0]×shape[1]size = shape[0] \times shape[1]

总之,使用这些方法,你可以方便地获取矩阵的形状和元素个数。¹⁵

深度學習基礎理論

學習目標

(1).对神经元,卷积,池化,跳连接,梯度下降,反向传播,隐藏层,正则化,数据增强,dropout,全连接,Batch Normalization等核⼼知识点理解 (基于从数学和逻辑层⾯的理解)

(2).对AlexNet,VGG,Res-Net以及attention,Bert 等论⽂层⾯的⼤概了解

(3).对FCN、BASNet和MINet等常规⽹络结构有清楚认识,能够熟悉其中操作的作⽤以及论⽂创新的出发点。新⼿着重了解卷积神经⽹络是如何提取特征并输出得到相应结果,熟练之后,应思考论⽂的出发点以及对于理论的创新性

Copilot 的解讀

(1).
神經元是深度學習中的基本單元,它可以接收多個輸入,並根據權重偏置計算出一個輸出。
卷積是一種在圖像或其他高維數據上進行局部特徵提取的操作,它使用一個稱為卷積核的小矩陣在輸入上滑動,並將卷積核與輸入的每個區域進行點積,得到一個輸出矩陣。
池化是一種在卷積後進行降維不變性增強的操作,它使用一個稱為池化窗口的小矩陣在輸入上滑動,並將池化窗口內的值進行最大值、平均值或其他聚合函數的計算,得到一個輸出矩陣。
跳連接是一種在深度神經網路中增加信息流通和梯度傳遞的技術,它將某一層的輸出直接連接到更深的層,從而避免了梯度消失或梯度爆炸的問題
梯度下降是一種最優化算法,它通過計算目標函數對參數的梯度,並沿著梯度的反方向更新參數,從而使目標函數達到最小值。
反向傳播是一種高效計算梯度的算法,它利用鏈式法則,從輸出層開始,逐層計算每個參數的梯度,並將梯度傳遞給前一層,直到輸入層。
隱藏層是指深度神經網路中除了輸入層和輸出層之外的中間層,它們可以對輸入進行非線性轉換,並學習到不同層次的抽象特徵。
正則化是一種防止過擬合的技術,它通過在目標函數中添加一個與參數大小有關的項,來限制參數的範圍,從而減少模型的複雜度。
數據增強是一種增加訓練數據多樣性的技術,它通過對原始數據進行旋轉、翻轉、裁剪、縮放、添加噪聲等變換,來產生更多的數據,從而提高模型的泛化能力
Dropout是一種正則化的方法,它通過在訓練過程中隨機關閉一些神經元,來減少神經元之間的相互依賴,從而防止過擬合。
全連接是一種神經網路的層類型,它將上一層的所有神經元與下一層的所有神經元相連,並對每個連接賦予一個權重,通常用於神經網路的最後一層,來進行分類或回歸的任務。
Batch Normalization是一種加速訓練和提高模型性能的技術,它通過對每一批數據進行標準化處理,使其均值為0方差為1,從而減少內部協變量偏移,並允許使用更大的學習率。

(2).
AlexNet是2012年在ImageNet圖像分類挑戰賽中獲得冠軍的深度卷積神經網路,它使用了8層的網路結構,包括5層卷積層和3層全連接層,並使用了ReLU、Dropout、數據增強等技術,大大提高了圖像分類的準確率。
VGG是2014年在ImageNet圖像分類挑戰賽中獲得第二名的深度卷積神經網路,它使用了16層或19層的網路結構,包括多個3x3的卷積層和2x2的池化層,並使用了Batch Normalization等技術,展示了深度網路的優勢。
Res-Net是2015年在ImageNet圖像分類挑戰賽中獲得冠軍的深度卷積神經網路,它使用了152層的網路結構,包括多個殘差塊,並使用了跳連接等技術,解決了深度網路的梯度消失和過擬合的問題。
Attention是一種在自然語言處理和電腦視覺等領域廣泛使用的機制,它可以讓模型關注到輸入或輸出的重要部分,並根據關注的程度分配不同的權重,從而提高模型的表現。
Bert是一種在自然語言處理領域取得突破性成果的深度神經網路,它使用了多層的Transformer架構,並使用了雙向的自注意力機制,可以從大量的無標籤文本中學習到語言的表示,並可以通過微調的方式應用到各種自然語言處理的任務上。

(3).
FCN是一種用於圖像分割的深度卷積神經網路,它將傳統的全連接層替換為卷積層,從而使輸出的特徵圖與輸入的圖像具有相同的大小,並可以對每個像素進行分類。FCN還使用了跳連接和上採樣等技術,來保留低層的細節信息,並提高分割的精度。
BASNet是一種用於圖像昏暗邊界檢測的深度卷積神經網路,它使用了一個雙向的特徵金字塔網路,來同時從高層和低層提取特徵,並使用了一個多級的反饋機制,來逐步優化昏暗邊界的預測。BASNet還使用了一個注意力導向的損失函數,來增強昏暗邊界的重要性,並提高檢測的準確率。
MINet是一種用於圖像昏暗邊界檢測的深度卷積神經網路,它使用了一個多尺度的特徵整合模塊,來融合不同層次的特徵,並使用了一個多頭的自注意力模塊,來增強特徵的局部和全局關係,從而提高昏暗邊界的細節和一致性。MINet還使用了一個多任務的學習策略,來同時進行昏暗邊界的分類和回歸,並使用了一個動態的權重分配機制,來平衡不同任務的重要性,從而提高檢測的性能。

Pytorch 編碼

學習目標

Step1:能够成功运⾏其其他⼈的⽹络模型,并对⾃⼰的图⽚进⾏测试
理解Pytorch环境配置,condas环境配置 ,并成功安装pytorch,理解dataset_loader代码的基础逻辑

Step2:能够把论⽂中的⽹络模型和给出的复现代码进⾏⼀⼀对应
初步学会看论⽂的⽹络图,以及理解Pytorch给出的接⼝,理解Pytorch如何表⽰卷积,如何表⽰池化,对代码复⽤层⾯如何处理,对于跳连接级联如何进⾏处理,理解模型的构建与封装,主要是理解Model代码为⽂件
难点是对类中的定义以及foward实际前馈的理解,涉及到部分魔法⽅法的应⽤,需要对类有⼀定理解。

Step3:能够把根据需求去更改⽹络,对⽹络结构进⾏修改
通过实操过程中,对于feature map尺⼨的变化有⼀定把握,并且进⼀步理解model的foward和backword过程

Step4:不仅能够更改⽹络层数,还能为⽹络设计新的算法
能够根据利⽤pytorch进⾏tensor矩阵运算,来进⾏优化算法的设计,部分模型需要有numpy的基础

這個模塊單獨放在這個 Blog