文章目錄
- 神經網絡(第二課第一周)
- (一)神經網絡的內涵
- (二)如何構建神經元層
- 1、tensorflow如何處理數據(Tensorflow 是由 Google 開發的機器學習包。)
- 2、詳細的一些實驗代碼,可以參考第二課第一周的相關代碼。以下是一些代碼相關的解釋:(以下都是使用Tensorflow構建的神經網絡)
- 3、詳細的一些實驗代碼,可以參考第二課第一周的相關代碼。以下是一些代碼相關的解釋:(以下都是使用Numpy構建的神經網絡)
- (三)使用 Keras [Sequential 模型](https://keras.io/guides/sequential_model/)和具有 sigmoid 激活的 [Dense Layer](https://keras.io/api/layers/core_layers/dense/) 來構建網絡。(以識別手寫數字為例)
- 1、首先清楚你數據集特征值和目標值的大小
- 2、其次要清楚你要創建什么樣的神經網絡,這個神經網絡有幾層,每一層有多少個激活值(新特征),以及激活函數是什么
- 3、使用 Keras [Sequential 模型](https://keras.io/guides/sequential_model/)和具有 sigmoid 激活的 [Dense Layer](https://keras.io/api/layers/core_layers/dense/) 來構建上述網絡。
- 4、定義損失函數并運行梯度下降,以使模型的權重適合訓練數據。
- 5、使用訓練完成的模型對數據進行預測:使用 [Keras ](https://www.tensorflow.org/api_docs/python/tf/keras/Model)`predict`。要`預測`的輸入是一個數組,因此單個示例被重塑為二維。
- (四)使用 numpy來構建網絡。(以識別手寫數字為例)
- 1、特別需要注意的是,手動定義計算激活值的函數:
- 2、定義三層神經網絡(這里的權重和偏差需要我們輸入給他,或者是使用tensorflow已經訓練好的權重給他)
神經網絡(第二課第一周)
(一)神經網絡的內涵
主要應用:語音、圖像、文本。
**神經網絡的內涵:**從原有的特征(特征向量)進行學習或者回歸得到新的更能預測真實值的或者是更具有代表性的特征,使用新的特征(激活向量)再次學習或者回歸,得到最終的預測概率。它的基本構建模塊是一個神經元層。
神經網絡應用于人臉識別:
(二)如何構建神經元層
在擬合新特征時一般使用的是邏輯回歸函數,也稱為激活函數,得到激活向量,作為新的特征值,這樣以此類推(稱之為向前傳播)。
1、tensorflow如何處理數據(Tensorflow 是由 Google 開發的機器學習包。)
tensorflow可以將之前創建的兩層或多層神經元按照順序串聯起來,形成一個神經網絡。示例如下:
向前傳播的代碼解釋:
2、詳細的一些實驗代碼,可以參考第二課第一周的相關代碼。以下是一些代碼相關的解釋:(以下都是使用Tensorflow構建的神經網絡)
(1)線性神經單元層
定義一個具有一個神經元或單元的層,激活函數是線性回歸。
linear_layer = tf.keras.layers.Dense(units=1, activation = 'linear', )
我們可以使用linear_layer.get_weights()或者是linear_layer.set_weights([set_w, set_b])可以設置神經元層的各參數權重。同時也可以通過將實例(矩陣)輸入給模型,模型會初始化隨機值權重。示例如下:
(2)邏輯神經單元層(一層和兩層)
TensorFlow 的 Normalization
層可以用來自動學習數據的統計特性(均值和方差),并對數據進行標準化處理,使得數據的分布更加均勻,這通常有助于機器學習模型的訓練和收斂。
擬合后會得到新的權重。有了新的權重之后我們可以對新的測試集進行歸一化,然后使用新模型進行預測。
3、詳細的一些實驗代碼,可以參考第二課第一周的相關代碼。以下是一些代碼相關的解釋:(以下都是使用Numpy構建的神經網絡)
與之前的不同之處在于,計算邏輯回歸值一個是使用的矩陣乘法,一個是使用循環相加。創建神經網絡也各有不同。
明白上面的之后,我們可以做一下第二課第一周的最后一個練習,看看掌握沒有。
(三)使用 Keras Sequential 模型和具有 sigmoid 激活的 Dense Layer 來構建網絡。(以識別手寫數字為例)
1、首先清楚你數據集特征值和目標值的大小
手寫數字數據集大小為1000X400;共計1000個樣本,每個樣本400個特征;目標是一個二分類問題,分類結果是0或者1。大小是1000x1。
2、其次要清楚你要創建什么樣的神經網絡,這個神經網絡有幾層,每一層有多少個激活值(新特征),以及激活函數是什么
這里手寫數字的這個要創建的神經網絡一共是3層,激活值分別是25、15、1;激活函數都是sigmoid函數。
3、使用 Keras Sequential 模型和具有 sigmoid 激活的 Dense Layer 來構建上述網絡。
示例代碼如下:
使用model.summary可以輸出你創建的神經網絡的結構。例如:
創建完成神經網絡之后,我們應該已經清楚每一層的w和b它們的大小是怎樣的,例如第一層的w的大小應該是:400x25;b是25x1;第二層的w是25x15,b是15x1;以此類推。
我們可以檢查一下創建的神經網絡的權重大小是否一致,示例如下:
4、定義損失函數并運行梯度下降,以使模型的權重適合訓練數據。
5、使用訓練完成的模型對數據進行預測:使用 Keras predict
。要預測
的輸入是一個數組,因此單個示例被重塑為二維。
模型的輸出被解釋為概率。在上面的第一個示例中,輸入為零。該模型預測輸入為 1 的概率幾乎為零。在第二個示例中,input 是 1。該模型預測輸入為 1 的概率接近 1。與 Logistic 回歸的情況一樣,將概率與閾值進行比較以做出最終預測。
(四)使用 numpy來構建網絡。(以識別手寫數字為例)
1、特別需要注意的是,手動定義計算激活值的函數:
矢量化numpy,僅用三行代碼代替循環計算。
2、定義三層神經網絡(這里的權重和偏差需要我們輸入給他,或者是使用tensorflow已經訓練好的權重給他)
我不太清楚這里為啥還要用一下numpy,用它的意義在哪里,tensorflow明明可以直接擬合出參數。