偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Keras可視化神經(jīng)網(wǎng)絡(luò)架構(gòu)的四種方法

開發(fā) 架構(gòu)
我們?cè)谑褂镁矸e神經(jīng)網(wǎng)絡(luò)或遞歸神經(jīng)網(wǎng)絡(luò)或其他變體時(shí),通常都希望對(duì)模型的架構(gòu)可以進(jìn)行可視化的查看,因?yàn)檫@樣我們可以 在定義和訓(xùn)練多個(gè)模型時(shí),比較不同的層以及它們放置的順序?qū)Y(jié)果的影響。還有可以更好地理解模型結(jié)構(gòu)、激活函數(shù)、模型參數(shù)形狀(神經(jīng)元數(shù)量)等

我們?cè)谑褂镁矸e神經(jīng)網(wǎng)絡(luò)或遞歸神經(jīng)網(wǎng)絡(luò)或其他變體時(shí),通常都希望對(duì)模型的架構(gòu)可以進(jìn)行可視化的查看,因?yàn)檫@樣我們可以 在定義和訓(xùn)練多個(gè)模型時(shí),比較不同的層以及它們放置的順序?qū)Y(jié)果的影響。還有可以更好地理解模型結(jié)構(gòu)、激活函數(shù)、模型參數(shù)形狀(神經(jīng)元數(shù)量)等。

圖片

keras 中有一些現(xiàn)成的包可以創(chuàng)建我們的神經(jīng)網(wǎng)絡(luò)模型的可視化表示。前三個(gè)包可以在模型訓(xùn)練之前使用(只需要定義和編譯模型);但是Tensor Boards 要求用戶在架構(gòu)可視化之前根據(jù)準(zhǔn)確的數(shù)據(jù)訓(xùn)練模型。

在開始進(jìn)行可視化之前,我們先需要安裝相應(yīng)的包:

pip install visualkeras
pip install ann_visualizer
pip install graphviz

然后我們創(chuàng)建一個(gè)模型,并用這4個(gè)包來(lái)進(jìn)行可視化:

在實(shí)際使用時(shí)我們希望的是通過(guò)可視化來(lái)對(duì)比模型架構(gòu),所以這里定義三個(gè)具有不同超參數(shù) CNN 模型。我們創(chuàng)建了用戶定義的函數(shù)來(lái)分別構(gòu)建具有不同數(shù)量的 CNN 層、池化層和最后的密集層的三個(gè)不同模型。

架構(gòu)1:淺層CNN+分類頭

 def construct_model():
model = Sequential()
model.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 1), activation=’relu’))
model.add(Conv2D(filters=64, kernel_size=(3, 3), activation=’relu’))
model.add(MaxPool2D((2, 2)))
model.add(Flatten())
model.add(Dense(256, activation=’relu’))model.add(Dense(12, activation=’softmax’))
model.compile(loss=’categorical_crossentropy’, optimizer=’adam’, metrics=[‘a(chǎn)ccuracy’])
return model

架構(gòu)2:深層CNN+mlp分類頭

 def sconstruct_model():
smodel = Sequential()
smodel.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 3), activation=’relu’))
smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation=’relu’))
smodel.add(MaxPool2D((2, 2)))
smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
smodel.add(MaxPool2D((2, 2)))
smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
smodel.add(MaxPool2D((2, 2)))
smodel.add(Flatten())
smodel.add(Dense(256, activation=’relu’))
smodel.add(Dense(12, activation=’softmax’))
#optimizer = Adam(lr=0.001)
smodel.compile(loss=’categorical_crossentropy’, optimizer=’adam’, metrics=[‘a(chǎn)ccuracy’])
#model.summary()
return smodel

架構(gòu)3:深層CNN+分類頭

 def cconstruct_model(learningRate):
smodel = Sequential()
smodel.add(Conv2D(filters=32, kernel_size=(3, 3), input_shape=(128, 128, 1), activation=’relu’))
smodel.add(Conv2D(filters=32, kernel_size=(3, 3), activation=’relu’))
smodel.add(MaxPool2D((2, 2)))
smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation=’relu’))
smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation=’relu’))
smodel.add(MaxPool2D((2, 2)))
smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
smodel.add(MaxPool2D((2, 2)))
smodel.add(Flatten())
smodel.add(Dense(256, activation=’relu’))
smodel.add(Dense(256, activation=’relu’))
smodel.add(Dense(12, activation=’softmax’))
optimizer = Adam(lr=learningRate)
smodel.compile(loss=’categorical_crossentropy’, optimizer=optimizer, metrics=[‘a(chǎn)ccuracy’])
smodel.summary()
return smodel

有了這3個(gè)模型,我們將使用4種方法來(lái)可視化cnn的結(jié)構(gòu)

ANN Visualizer

ANN Visualizer 的 Python 模塊可以通過(guò)幾行代碼來(lái)可視化神經(jīng)網(wǎng)絡(luò)。它使用 Keras 和 Python 的 Graphviz 模塊來(lái)生成一個(gè)整潔的神經(jīng)網(wǎng)絡(luò)圖。它是最早的幾個(gè)可視化包之一,但是最近已經(jīng)不更新了,我們先介紹他是因?yàn)樗闶亲钤绯霈F(xiàn)的,也是最有名的。

ANN Visualizer可視化需要首先編譯模型

model=construct_model()

主要參數(shù)如下:

  • ann_viz(model, view=True, filename=”network.gv”, title=”MyNeural Network”)
  • model—Keras的模型
  • view—在調(diào)用ann_viz()之后顯示可視化圖形
  • filename—文件名
  • title—自定義標(biāo)題
from ann_visualizer.visualize import ann_viz
ann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN Model 1 Simple Architecture”)

圖片

上面就是使用ANN Visualizer創(chuàng)建的construct_model()的可視化圖??梢钥吹剑绻P吞箫@示效果不會(huì)太好,這可能也是ANN Visualizer被淘汰的一個(gè)原因。

Visual Keras

Visualkeras可以更容易地查看Keras的神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)(可以單獨(dú)查看,也可以作為TensorFlow的一部分)。

model1=construct_model()
model2=sconstruct_model()
model3=cconstruct_model(0.009)

import visualkeras
from PIL import ImageFont
visualkeras.layered_view(model1, legend=True)
visualkeras.layered_view(model2, legend=True)
visualkeras.layered_view(model3, legend=True)
model1=construct_model()
model2=sconstruct_model()
model3=cconstruct_model(0.009)

import visualkeras
from PIL import ImageFont
visualkeras.layered_view(model1, legend=True)
visualkeras.layered_view(model2, legend=True)
visualkeras.layered_view(model3, legend=True)

圖片

圖片

圖片

可以通過(guò)可視化來(lái)對(duì)比出不同層的大小,這個(gè)還是很有用的。

Keras Model Plot

keras.utils.plot_model是keras的內(nèi)建繪制Keras模型函數(shù),它使用了Graphviz和pydot包。從圖上可,它不如上面使用的包直觀,但它概述了順序模型的基本體系結(jié)構(gòu)。

tf.keras.utils.plot_model(model1,to_file="model.png",show_shapes=True,show_dtype=False,show_layer_names=True,rankdir="TB",expand_nested=True,dpi=96,layer_range=None,show_layer_activatinotallow=True,)

一下是幾個(gè)參數(shù)的介紹:

  • model: Keras編譯后的模型或模型對(duì)象的實(shí)例
  • to_file:保存的文件名
  • Show_shapes:顯示神經(jīng)網(wǎng)絡(luò)中每一層的尺寸和形狀
  • show_layer_activation:顯示神經(jīng)元內(nèi)部使用的激活函數(shù)

圖片

TensorBoard

TensorBoard 允許用戶可視化不同模型運(yùn)行的日志。日志的范圍可以從跟蹤任何模型驗(yàn)證度量(不同輪次的準(zhǔn)確率、召回率、RMSE、MAPE 和 MSE)到創(chuàng)建模型的架構(gòu)圖。它是一個(gè)強(qiáng)大的工具,可以可視化預(yù)期模型是否與預(yù)期設(shè)計(jì)匹配,同時(shí)深入了解如何使用操作級(jí)圖更改模型。

我們需要先加載 TensorBoard,然后創(chuàng)建一個(gè)日志目錄。

%load_ext tensorboard
from datetime import datetime
from tensorflow import keras

logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

使用Keras TensorBoard回調(diào)函數(shù),在訓(xùn)練前指定日志目錄。然后通過(guò)向model.fit()提供這個(gè)回調(diào)來(lái)保證數(shù)據(jù)被記錄在TensorBoard中。

model.fit(X2_train, Y2_train,batch_size=64,epochs=5,callbacks=[tensorboard_callback])

X2_train和Y2_train是上面代碼中沒(méi)有反映的訓(xùn)練數(shù)據(jù)集。你可以用你自己的任何訓(xùn)練數(shù)據(jù)來(lái)替換它。

圖片

可以看到TensorBoard 始終會(huì)顯示操作級(jí)別的圖表,雖然對(duì)于每一層的架構(gòu)并不明顯,但是對(duì)于每一個(gè)操作缺失非常詳細(xì)的。

還需要注意的是,與代碼相比該圖是上下顛倒的,因?yàn)閿?shù)據(jù)從底部流向頂部。但是該圖大致類似于 Keras 模型的描述,有額外的邊通向其他計(jì)算節(jié)點(diǎn)。

責(zé)任編輯:華軒 來(lái)源: DeepHub IMBA
相關(guān)推薦

2018-11-26 18:45:22

數(shù)據(jù)可視化繪圖可視化

2019-09-12 09:00:32

數(shù)據(jù)可視化熱圖數(shù)據(jù)集

2022-09-08 16:28:53

Python數(shù)據(jù)可視化機(jī)器學(xué)習(xí)

2022-06-14 13:55:30

模型訓(xùn)練網(wǎng)絡(luò)

2019-03-26 19:00:02

神經(jīng)網(wǎng)絡(luò)AI人工智能

2020-07-01 09:08:55

神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)網(wǎng)絡(luò)

2018-04-03 14:42:46

Python神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2017-10-11 23:07:00

神經(jīng)網(wǎng)絡(luò)激活函數(shù)可視化

2014-03-17 09:22:43

Linux命令

2022-09-02 14:29:01

JavaScrip數(shù)組屬性

2011-08-22 09:54:40

云計(jì)算虛擬化云成本

2023-03-20 15:14:39

視覺(jué)回歸測(cè)試軟件開發(fā)

2017-06-18 16:20:57

神經(jīng)網(wǎng)絡(luò)單元

2017-07-05 15:14:30

神經(jīng)網(wǎng)絡(luò)連接方式網(wǎng)絡(luò)單元

2021-06-09 10:10:43

數(shù)字化轉(zhuǎn)型IT領(lǐng)導(dǎo)者

2009-02-25 09:52:14

類型轉(zhuǎn)換.NET 強(qiáng)制轉(zhuǎn)型

2009-03-31 13:12:30

解析XMLJava

2011-06-22 15:21:08

XML

2020-08-10 00:30:55

備份密碼iPhone移動(dòng)安全

2009-11-23 15:57:51

PHP偽靜態(tài)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)