成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用 Python 繪制圖表理解神經網絡

開發 后端 深度學習
在這篇文章中,我嘗試直觀地展示一個簡單的前饋神經網絡如何在訓練過程中將一組輸入映射到不同的空間,以便更容易理解它們。

 Python中文社區(ID:python-china)

人工神經網絡 (ANN) 已成功應用于許多需要人工監督的日常任務,但由于其復雜性,很難理解它們的工作方式和訓練方式。

在這篇博客中,我們深入討論了神經網絡是什么、它們是如何工作的,以及如何將它們應用于諸如尋找異常值或預測金融時間序列之類的問題。

在這篇文章中,我嘗試直觀地展示一個簡單的前饋神經網絡如何在訓練過程中將一組輸入映射到不同的空間,以便更容易理解它們。

數據

為了展示它是如何工作的,首先我創建了一個“ toy”數據集。它包含 400 個均勻分布在兩個類(0 和 1)中的樣本,每個樣本具有兩個維度(X0 和 X1)。

注:所有數據均來自三個隨機正態分布,均值為 [-1, 0, 1],標準差為 [0.5, 0.5, 0.5]。

網絡架構

下一步是定義ANN的結構,如下:

隱藏層的維度最小(2 個神經元)以顯示網絡在 2D 散點圖中映射每個樣本的位置。

盡管前面的圖表沒有顯示,但每一層都有一個修改其輸出的激活函數。

•輸入層有一個linear激活函數來復制它的輸入值。

•隱藏層具有ReLU或tanh激活函數。

•輸出層有一個sigmoid激活函數,可以將其輸入值“縮小”到 [0, 1] 范圍內。

訓練

除了網絡的架構之外,神經網絡的另一個關鍵方面是訓練過程。訓練 ANN 的方法有很多種,但最常見的是反向傳播過程。

反向傳播過程首先將所有訓練案例(或一批)前饋到網絡,然后優化器根據損失函數計算“如何”更新網絡的權重,并根據學習率更新它們。

當損失收斂、經過一定數量的 epoch 或用戶停止訓練時,訓練過程停止。一個epoch 表示所有的數據送入網絡中, 完成了一次前向計算 + 反向傳播的過程。

在我們的研究案例中,該架構使用隱藏層中的 2 個不同激活函數(ReLU 和 Tanh)和 3 個不同的學習率(0.1、0.01 和 0.001)進行訓練。

在輸入樣本周圍,有一個“網格”點,顯示模型為該位置的樣本提供的預測概率。這使得模型在訓練過程中生成的邊界更加清晰。 

  1. # figure holding the evolution  
  2. f, axes = plt.subplots(1, 3, figsize=(18, 6), gridspec_kw={'height_ratios':[.9]})  
  3. f.subplots_adjust(top=0.82)  
  4. # camera to record the evolution  
  5. camera = Camera(f)  
  6. # number of epochs  
  7. epochs = 20  
  8. # iterate epoch times  
  9. for i in range(epochs):  
  10.     # evaluate the model (acc, loss)  
  11.     evaluation = model.evaluate(x_train, y_train, verbose=0 
  12.     # generate intermediate models  
  13.     model_hid_1 = Model(model.input, model.get_layer("hidden_1").output)  
  14.     model_act_1 = Model(model.input, model.get_layer("activation_1").output) 
  15.      # generate data  
  16.     df_hid_1 = pd.DataFrame(model_hid_1.predict(x_train), columns=['X0', 'X1'])  
  17.     df_hid_1['y'] = y_train  
  18.     df_act_1 = pd.DataFrame(model_act_1.predict(x_train), columns=['X0', 'X1'])  
  19.     df_act_1['y'] = y_train  
  20.     # generate meshgrid (200 values)  
  21.     x = np.linspace(x_train[:,0].min(), x_train[:,0].max(), 200)  
  22.     y = np.linspace(x_train[:,1].min(), x_train[:,1].max(), 200)  
  23.     xv, yv = np.meshgrid(x, y)  
  24.     # generate meshgrid intenisty  
  25.     df_mg_train = pd.DataFrame(np.stack((xv.flatten(), yv.flatten()), axis=1), columns=['X0', 'X1'])  
  26.     df_mg_train['y'] = model.predict(df_mg_train.values)  
  27.     df_mg_hid_1 = pd.DataFrame(model_hid_1.predict(df_mg_train.values[:,:-1]), columns=['X0', 'X1'])  
  28.     df_mg_hid_1['y'] = model.predict(df_mg_train.values[:,:-1])  
  29.     df_mg_act_1 = pd.DataFrame(model_act_1.predict(df_mg_train.values[:,:-1]), columns=['X0', 'X1'])  
  30.     df_mg_act_1['y'] = model.predict(df_mg_train.values[:,:-1])  
  31.     # show dataset        
  32.     ax = sns.scatterplot(x='X0'y='X1'data=df_mg_trainhue='y'x_jitter=Truey_jitter=Truelegend=Noneax=axes[0], palette=sns.diverging_palette(220, 20, as_cmap=True), alpha=0.15) 
  33.     ax = sns.scatterplot(x='X0'y='X1'data=df_trainhue='y'legend=Noneax=axes[0], palette=sns.diverging_palette(220, 20, n=2)) 
  34.     ax.set_title('Input layer')  
  35.     ax = sns.scatterplot(x='X0'y='X1'data=df_mg_hid_1hue='y'x_jitter=Truey_jitter=Truelegend=Noneax=axes[1], palette=sns.diverging_palette(220, 20, as_cmap=True), alpha=0.15) 
  36.     ax = sns.scatterplot(x='X0'y='X1'data=df_hid_1hue='y'legend=Noneax=axes[1], palette=sns.diverging_palette(220, 20, n=2)) 
  37.     ax.set_title('Hidden layer')  
  38.     # show the current epoch and the metrics  
  39.     ax.text(x=0.5, y=1.15, s='Epoch {}'.format(i+1), fontsize=16weight='bold'ha='center'va='bottom'transform=ax.transAxes)  
  40.     ax.text(x=0.5, y=1.08, s='Accuracy {:.3f} - Loss {:.3f}'.format(evaluation[1], evaluation[0]), fontsize=13ha='center'va='bottom'transform=ax.transAxes)  
  41.     ax = sns.scatterplot(x='X0'y='X1'data=df_mg_act_1hue='y'x_jitter=Truey_jitter=Truelegend=Noneax=axes[2], palette=sns.diverging_palette(220, 20, as_cmap=True), alpha=0.15) 
  42.     ax = sns.scatterplot(x='X0'y='X1'data=df_act_1hue='y'legend=Noneax=axes[2], palette=sns.diverging_palette(220, 20, n=2)) 
  43.     ax.set_title('Activation')  
  44.     # show the plot  
  45.     plt.show()  
  46.     # call to generate the GIF  
  47.     camera.snap()  
  48.     # stop execution if loss <= 0.263 (avoid looping 200 times if not needed)  
  49.     if evaluation[0] <= 0.263:  
  50.         break  
  51.     # train the model 1 epoch  
  52.     model.fit(x_train, y_train, epochs=1verbose=0

ReLU 激活

Tanh 激活

注意:使用的損失函數是二元交叉熵,因為我們正在處理二元分類問題,而優化器是對原始隨機梯度下降 (SGD) 稱為 Adam 的修改。當epoch達到 200 或損失低于 0.263 時,模型訓練停止。 

 

責任編輯:龐桂玉 來源: Python中文社區
相關推薦

2020-05-27 11:10:54

KerasLSTM神經網絡

2023-05-16 07:44:03

紋理映射WebGL

2011-06-30 15:09:37

QT 繪制 圖形

2009-10-23 16:43:01

VB.NET繪制圖形

2023-09-07 08:24:35

圖形編輯器開發繪制圖形工具

2020-09-08 13:02:00

Python神經網絡感知器

2021-02-07 09:40:19

Python神經網絡人工智能

2013-12-27 13:00:30

Android開發Android應用Context Men

2013-12-04 16:07:27

Android游戲引擎libgdx教程

2018-07-03 16:10:04

神經網絡生物神經網絡人工神經網絡

2019-05-07 19:12:28

機器學習神經網絡Python

2021-05-10 15:14:23

Python棒棒糖圖表

2022-07-27 09:53:06

神經網絡結構

2023-01-04 11:18:21

Canvas 封裝pixi.js

2024-11-20 16:42:03

Python科學計算

2020-12-19 11:05:57

循環神經網絡PyTorch神經網絡

2022-08-23 12:32:37

Python可視化圖表

2020-08-03 07:54:33

神經網絡通用近似定理機器學習

2018-09-09 23:58:25

可視化神經網絡模型

2017-09-10 07:07:32

神經網絡數據集可視化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费在线观看91 | 午夜精品久久久久久久99黑人 | 国产精品一区二区三区久久久 | 综合色站导航 | 超碰97人人人人人蜜桃 | 国产精品视频免费观看 | 欧美成人一区二区 | 黄色在线免费观看 | 一二三四在线视频观看社区 | 天天拍夜夜爽 | 成人在线免费视频 | 国产97视频在线观看 | 亚洲激精日韩激精欧美精品 | 一级黄片一级毛片 | 色爽女 | 欧美专区日韩专区 | 91伊人网| 日韩1区| 黄色免费观看 | 久久久噜噜噜www成人网 | 免费成人高清在线视频 | 在线观看亚洲一区二区 | 亚洲视频在线观看一区二区三区 | 亚洲精品免费看 | 国产乱码精品一品二品 | 日韩在线视频一区二区三区 | 国产69精品久久久久777 | 99精品欧美一区二区蜜桃免费 | 婷婷综合色 | 91精品综合久久久久久五月天 | 狠狠色香婷婷久久亚洲精品 | 精品欧美色视频网站在线观看 | 亚洲精品大全 | 99国产精品99久久久久久 | 免费视频99 | 爱爱爱av | 亚洲成人在线免费 | 午夜伊人 | 视频二区在线观看 | 91社区在线观看播放 | 亚洲精品在线国产 |