国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

純用NumPy實現神經網絡的示例代碼

2020-02-15 23:21:23
字體:
來源:轉載
供稿:網友

摘要: 純NumPy代碼從頭實現簡單的神經網絡。

Keras、TensorFlow以及PyTorch都是高級別的深度學習框架,可用于快速構建復雜模型。前不久,我曾寫過一篇文章,對神經網絡是如何工作的進行了簡單的講解。該文章側重于對神經網絡中運用到的數學理論知識進行詳解。本文將利用NumPy實現簡單的神經網絡,在實戰中對其進行深層次剖析。最后,我們會利用分類問題對模型進行測試,并與Keras所構建的神經網絡模型進行性能的比較。

Note:源碼可在我的GitHub中查看。

在正式開始之前,需要先對所做實驗進行構思。我們想要編寫一個程序,使其能夠創建一個具有指定架構(層的數量、大小以及激活函數)的神經網絡,如圖一所示。總之,我們需要預先對網絡進行訓練,然后利用它進行預測。

上圖展示了神經網絡在被訓練時的工作流程。從中我們可以清楚的需要更新的參數數量以及單次迭代的不同狀態。構建并管理正確的數據架構是其中最困難的一環。由于時間限制,圖中所示的參數不會一一詳解,有興趣可點擊此處進行了解。

神經網絡層的初始化

首先,對每一層的權重矩陣W及偏置向量b進行初始化。在上圖中,上標[l]表示目前是第幾層(從1開始),n的值表示一層中的神經元數量。描述神經網絡架構的信息類似于Snippet 1中所列內容。每一項都描述了單層神經網絡的基本參數:input_dim,即輸入層神經元維度;output_dim,即輸出層神經元維度;activation,即使用的激活函數。

nn_architecture = [  {"input_dim": 2, "output_dim": 4, "activation": "relu"},  {"input_dim": 4, "output_dim": 6, "activation": "relu"},  {"input_dim": 6, "output_dim": 6, "activation": "relu"},  {"input_dim": 6, "output_dim": 4, "activation": "relu"},  {"input_dim": 4, "output_dim": 1, "activation": "sigmoid"},]

Snippet 1.

從Snippet 1可看出,每一層輸出神經元的維度等于下一層的輸入維度。對權重矩陣W及偏置向量b進行初始化的代碼如下:

def init_layers(nn_architecture, seed = 99):  np.random.seed(seed)  number_of_layers = len(nn_architecture)  params_values = {}  for idx, layer in enumerate(nn_architecture):    layer_idx = idx + 1    layer_input_size = layer["input_dim"]    layer_output_size = layer["output_dim"]    params_values['W' + str(layer_idx)] = np.random.randn(      layer_output_size, layer_input_size) * 0.1    params_values['b' + str(layer_idx)] = np.random.randn(      layer_output_size, 1) * 0.1  return params_values            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 茌平县| 孝昌县| 侯马市| 盱眙县| 长海县| 苏尼特右旗| 射阳县| 乐平市| 黄平县| 阿拉善右旗| 商河县| 砚山县| 滦南县| 彭山县| 五指山市| 昆明市| 治多县| 晋宁县| 公安县| 常山县| 阿克| 峨山| 湄潭县| 县级市| 溧阳市| 岑溪市| 卢龙县| 台北县| 安庆市| 徐汇区| 文水县| 长岭县| 哈尔滨市| 苍山县| 五大连池市| 淅川县| 包头市| 泗洪县| 竹山县| 麟游县| 会宁县|