天天看點

深度學習的一些小記錄裡面有一部分是摘錄

裡面有一部分是摘錄

1. dim函數的部分了解

tf.nn.functional.softmax(x,dim = -1)

中的參數

dim

是指次元的意思

dim = 0, 對每一次元相同位置的數值進行softmax運算

dim = 1, 對某一次元的列進行softmax運算

dim = 2, 對某一次元的行進行softmax運算

dim = -1, 對某一次元的行進行softmax運算

2. enumerate的使用:

将可疊代對象如字元串、清單、元組、字典、集合,組合成索引+資料格式輸出,第一個參數為可疊代對象,第二個參數為索引起點
for index, s in enumerate('Hello', 1):  # 1表示index從1開始
    print('第{}個字元是{}'.format(index, s))
           

運作結果:

深度學習的一些小記錄裡面有一部分是摘錄

3.Linear的了解

  • 1 . Linear 是module的子類,是參數化module的一種,與其名稱一樣,表示着一種線性變換
  • 2.Linear的建立需要兩個參數,inputSize 和 outputSize:

    inputSize:輸入節點數

    outputSize:輸出節點數

  • 3.Linear中包含四個屬性 y=Ax+b

    – in_features: 上層神經元個數,指的是輸入的二維張量的大小

    – out_features: 本層神經元個數,指的是輸出的二維張量的大小

    – weight:權重, 形狀[out_features , in_features]

    – bias: 偏置, 形狀[out_features]

  • 4.nn.Module 是所有神經網絡單元(neural network modules)的基類
  • 5.pytorch在nn.Module中,實作了

    __call__

    方法,而在

    __call__

    方法中調用了forward函數**\

4. 常見激活函數的了解:

  1. 神經網絡中的每個神經元節點接受上一層神經元的輸出值作為本神經元的輸入值,并将輸入值傳遞給下一層,輸入層神經元節點會将輸入屬性直接傳遞到下一層(隐層或輸出層)。在多層神經網絡中,上層節點的輸出和下層節點的輸入之間具有一個函數關系,這個函數稱為激活函數。
  2. 通過激活函數的加入可以學到非線性的關系,這對于特征提取具有更強的能力
  3. 所有的非線性激活函數(nn.ReLU、nn.sigmoid、nn.tanh、nn.LeakyReLU(negative_slope=0.01, inplace=False)),基類都是

    nn.Module

    , 都實作

    __call__

    forward

  4. 深度學習的基本原理就是基于人工神經網絡,信号從一個神經元進入,經過非線性的 activation function,傳入到下一層神經元;再經過該層神經元的 activate,繼續往下傳遞,如此循環往複,直到輸出層。正是由于這些非線性函數的反複疊加,才使得神經網絡有足夠的 capacity來抓取複雜的pattern,在各個領域取得 state-of-the-art 的結果
  5. softmax的輸入是T*1的向量,輸出也是T*1的向量,隻不過輸出的向量的每個值的大小範圍為0到1。softmax的輸出向量的意思了,就是機率,該樣本屬于各個類的機率!,softmax 函數,又稱為歸一化指數函數。它是二分類函數 Sigmoid在多分類上的推廣,目的是将多分類的結果以機率的形式展現出來

5.零散記錄

  1. 沿着梯度向量的方向,更加容易找到函數的最大值。反過來說,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度減少最快,也就是更加容易找到函數的最小值
  2. 要停止跟蹤曆史記錄(和使用記憶體),您還可以将代碼塊使用 with torch.no_grad(): 包裝起來。在評估模型時,這是特别有用,因為模型在訓練階段具有 requires_grad = True 的可訓練參數有利于調參,但在評估階段我們不需要梯度
  3. with torch.no_grad()

    的作用域中定義的都是不進行梯度計算的張量
  4. torch.nn.Sequential 這個函數的作用是将一系列的運算子產品按順序搭建成一個多層的神經網絡,值得注意的是,Sequential 裡面的層次并不與神經網絡的層次嚴格對應,而是指多步的運算,它與動态計算圖的層次相對應
  5. 次元要看張量的最左邊有多少個左中括号,有n個,則這個張量就是n維張量
    1. 1 # 形狀為[],零維
    2. [1,2,3] # 形狀為[3],一維
    3. [[1,2],[3,4]] # 形狀為[2,2],二維
    4. [[[1,2],[3,4]],[[1,2],[3,4]]] # 形狀為[2,2,2],三維
  6. seed( ) 用于指定随機數生成時所用算法開始的整數值,如果使用相同的seed( )值,則每次生成的随即數都相同,如果不設定這個值,則系統根據時間來自己選擇這個值,此時每次生成的随機數因時間差異而不同
  7. 在卷積神經網絡的卷積層之後總會添加BatchNorm2d進行資料的歸一化處理,這使得資料在進行Relu之前不會因為資料過大而導緻網絡性能的不穩定,BatchNorm2d()函數數學原理如下:

深度學習的一些小記錄裡面有一部分是摘錄
  • BatchNorm2d()内部的參數如下:
    • 1.num_features:一般輸入參數為batch_sizenum_featuresheight*width,即為其中特征的數量
    • 2.eps:分母中添加的一個值,目的是為了計算的穩定性,預設為:1e-5
    • 3.momentum:一個用于運作過程中均值和方差的一個估計參數(我的了解是一個穩定系數,類似于SGD中的momentum的系數)
    • 4.affine:當設為true時,會給定可以學習的系數矩陣gamma和beta
  1. 所謂的 Dropout ,是指随機的将網絡中的神經元歸零,這種政策可以有效的防止過拟合
  2. _, predicted = torch.max(outputs.data, 1)的了解: _, predicted = torch.max(outputs.data, 1)的了解

繼續閱讀