Aké nástroje môžem použiť na vizualizáciu modelov Keras? Staré klišé „obrázok stojí za tisíc slov“ môže byť ešte pravdivejšie pri práci so zložitými modelmi strojového učenia. Ak nie ste požehnaní fotografickou pamäťou, môžete rýchlo stratiť stopu modelovej architektúry, keď jednoducho čítate prostredníctvom kódu. Táto príručka sa zameriava na vizualizáciu modelov Keras a na demonštráciu používa nasledujúci model (tzv. testovací model): def build_model(pad_len, imu_dim, tof_dim, n_classes): def time_sum(x): return K.sum(x, axis=1) def squeeze_last_axis(x): return tf.squeeze(x, axis=-1) def expand_last_axis(x): return tf.expand_dims(x, axis=-1) filters_l1 = 64 kernel_l1 = 3 filters_l2 = 128 kernel_l2 = 5 reduction = 8 pool_size = 2 drop = 0.3 wd = 1e-4 inp = Input(shape=(pad_len, imu_dim + tof_dim)) imu = Lambda(lambda t: t[:, :, :imu_dim])(inp) tof = Lambda(lambda t: t[:, :, imu_dim:])(inp) # First CNN branch shortcut_1 = imu x1 = Conv1D(filters_l1, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(imu) x1 = BatchNormalization()(x1) x1 = Activation("relu")(x1) x1 = Conv1D(filters_l1, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x1) x1 = BatchNormalization()(x1) x1 = Activation("relu")(x1) ch = x1.shape[-1] se = GlobalAveragePooling1D()(x1) se = Dense(ch//reduction, activation="relu")(se) se = Dense(ch, activation="sigmoid")(se) se = Reshape((1, ch))(se) x1 = Multiply()([x1, se]) if shortcut_1.shape[-1] != filters_l1: shortcut_1 = Conv1D(filters_l1, 1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(shortcut_1) shortcut_1 = BatchNormalization()(shortcut_1) x1 = add([x1, shortcut_1]) x1 = Activation("relu")(x1) x1 = MaxPooling1D(pool_size)(x1) x1 = Dropout(drop)(x1) shortcut_2 = x1 x1 = Conv1D(filters_l2, kernel_l2, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x1) x1 = BatchNormalization()(x1) x1 = Activation("relu")(x1) x1 = Conv1D(filters_l2, kernel_l2, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x1) x1 = BatchNormalization()(x1) x1 = Activation("relu")(x1) ch = x1.shape[-1] se = GlobalAveragePooling1D()(x1) se = Dense(ch//reduction, activation="relu")(se) se = Dense(ch, activation="sigmoid")(se) se = Reshape((1, ch))(se) x1 = Multiply()([x1, se]) if shortcut_2.shape[-1] != filters_l2: shortcut_2 = Conv1D(filters_l2, 1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(shortcut_2) shortcut_2 = BatchNormalization()(shortcut_2) x1 = add([x1, shortcut_2]) x1 = Activation("relu")(x1) x1 = MaxPooling1D(pool_size)(x1) x1 = Dropout(drop)(x1) # Second CNN branch x2 = Conv1D(filters_l1, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(tof) x2 = BatchNormalization()(x2) x2 = Activation("relu")(x2) x2 = MaxPooling1D(2)(x2) x2 = Dropout(0.2)(x2) x2 = Conv1D(filters_l2, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x2) x2 = BatchNormalization()(x2) x2 = Activation("relu")(x2) x2 = MaxPooling1D(2)(x2) x2 = Dropout(0.2)(x2) merged = Concatenate()([x1, x2]) xa = Bidirectional(LSTM(128, return_sequences=True, kernel_regularizer=l2(wd)))(merged) xb = Bidirectional(GRU(128, return_sequences=True, kernel_regularizer=l2(wd)))(merged) xc = GaussianNoise(0.09)(merged) xc = Dense(16, activation="elu")(xc) x = Concatenate()([xa, xb, xc]) x = Dropout(0.4)(x) score = Dense(1, activation="tanh")(x) score = Lambda(squeeze_last_axis)(score) weights = Activation("softmax")(score) weights = Lambda(expand_last_axis)(weights) context = Multiply()([x, weights]) x = Lambda(time_sum)(context) x = Dense(256, use_bias=False, kernel_regularizer=l2(wd))(x) x = BatchNormalization()(x) x = Activation("relu")(x) x = Dropout(0.5)(x) x = Dense(128, use_bias=False, kernel_regularizer=l2(wd))(x) x = BatchNormalization()(x) x = Activation("relu")(x) x = Dropout(0.3)(x) out = Dense(n_classes, activation="softmax", kernel_regularizer=l2(wd))(x) return Model(inp, out) Ako môžete vidieť, vyššie uvedený model je pomerne zložitý. Používa sa na učenie vzorov z intertiálnej meracej jednotky ("IMU") a iných dát senzorov. Ako si všimnete, definícia modelu v pôvodnom poznámkovom bloku používa vlastné objekty na zapojenie určitej logiky, ktorá sa opakuje v návrhu modelu. Rozhodol som sa odstrániť tieto objekty a explicitne definovať logiku "inline", aby som lepšie videl úplnú štruktúru modelu v mojej mierne zmenenej implementácii. Príslušenstvo pre notebook Táto príručka sa zaoberá nasledujúcimi 3 nástrojmi na vizualizáciu: Netron The Python package visualkeras TensorBoard Použitie Netronu na vizualizáciu vášho modelu Keras je pravdepodobne najjednoduchší nástroj na vizualizáciu k dispozícii. stačí kliknúť na tlačidlo na domovskej stránke a potom vyberte model, ktorý chcete vizualizovať. Tu je vizualizácia prvých niekoľkých vrstiev testovacieho modelu: Netrón Open Model... Po načítaní modelu môžete kliknúť na uzly v grafe modelu a zobraziť ich vlastnosti: Môžete exportovať modelový graf do a formáty kliknutím na ikonu hlavnej ponuky a výberom vhodnej možnosti exportu. .png .svg 2. používať Vizualizácia vášho modelu Keras vizuálne vizuálne na Python balík je tiež veľmi jednoduché použitie a ponúka pohodlný spôsob, ako vizualizovať model pred tréningom. : visualkeras pip pip install visualkeras Nasledujúci kód Python demonštruje základné použitie balíka: # [Imports for your Keras model here...] import visualkeras # [Utility function to build your Keras model...] def build_model(model_params): # [Your model definition here...] # [Build the model...] model = build_model(model_params) # [Visualize the model...] visualkeras.graph_view(model).show() na metóda vytvára nasledujúcu grafiku prvých niekoľkých vrstiev testovacieho modelu: graph_view Balík ponúka aj metóda, ktorá vytvára grafiku modelových vrstiev rozlíšených podľa typu a veľkosti: layered_view visualkeras.layered_view(model, legend=True).show() Ako vidíte, prechádzka Dvojica The parameter generuje legendu popisujúcu každú vrstvu: True legend Jednou z výhod pre balík je ovládací prvok, ktorý ponúka na zobrazenie grafiky. Môžete skontrolovať parametre používané na úpravu grafického výstupu na Na stránke . visualkeras Dokumentácia balíka 3. používať Vizualizácia modelu Keras TensorBoard Tensorová doska je vhodnou voľbou pre vizualizáciu modelu Keras, pretože je nainštalovaný spolu s S trochou "masáže" je tiež možné použiť vizualizovať štruktúru modelu pred tréningom. TensorBoard TensorFlow TensorBoard 3.1 Inštalácia balíček jupyter-tensorboard Táto sekcia používa V kontexte A To si vyžaduje inštaláciu balík, ktorý má pár závislostí. Použite nasledujúce kroky na inštaláciu : TensorBoard Jupyter notebook jupyter-tensorboard jupyter-tensorboard Install the package using . jupyter pip install jupyer Use the command to the package which was installed with the package installation process. The version of the package installed with which is as of this writing is not compatible with . This downgrade step installs a version of the package that is compatible with . See this for more information. pip install --upgrade notebook==6.4.12 downgrade notebook jupyter notebook jupyter 7.4.5 jupyter-tensorboard notebook jupyter-tensorboard StackOverflow article Install the package using . jupyter-tensorboard pip install jupyter-tensorboard 3.2 Nastavenie Jupyter Notebook na vizualizáciu vášho modelu Keras Ako bolo uvedené vyššie, môžete vizualizovať model Keras v Nasledujúci Jupyter notebookový kód ukazuje, ako to urobiť pomocou testovacieho modelu z úvodnej časti: TensorBoard # Cell 1: Imports import tensorflow as tf from tensorflow.keras.models import Model, load_model from tensorflow.keras.layers import ( Input, Conv1D, BatchNormalization, Activation, add, MaxPooling1D, Dropout, Bidirectional, LSTM, GlobalAveragePooling1D, Dense, Multiply, Reshape, Lambda, Concatenate, GRU, GaussianNoise ) from tensorflow.keras.regularizers import l2 from tensorflow.keras import backend as K # Cell 2: Set logs directory LOG_DIR = "logs" # Cell 3: Utility function to build model # [`build-model` function for test model from introductory section here...] # Cell 4: Build the model model = build_model(398, 12, 335, 18) # Cell 5: Compile the model model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"]) # Cell 6: Create a TensorBoard callback tensorboard_callback = tf.keras.callbacks.TensorBoard( log_dir=LOG_DIR, histogram_freq=1, write_graph=True, profile_batch=0 # Disable profiling ) # Cell 7: Create dummy `x` and `y` training inputs that match model input and output shapes dummy_x_input = tf.random.normal((1, 398, 347)) # Batch size 1, input shape (398,347) dummy_y_input = tf.random.normal((1, 18)) # Batch size 1, input shape (18, ) # Cell 8: "Train" the model for zero epochs to create a conceptual graph of the model model.fit(dummy_x_input, dummy_y_input, epochs=0, batch_size=1, callbacks=[tensorboard_callback]) # Cell 9: Load the TensorBoard notebook extension %load_ext tensorboard # Cell 10: Launch TensorBoard %tensorboard --logdir $LOG_DIR --host localhost Ak spustíte kód Jupyter notebooku vyššie, posledná bunka by mala Po dokončení vykonávania bunky môžete prejsť na Na pohľad na a Dashboard. Launching TensorBoard http://localhost:6006 TensorBoard Port TensorBoard môžete upraviť tak, že prejdete možnosť --port na magický príkaz %tensorboard, napr. %tensorboard --logdir $LOG_DIR --host localhost --port 8088. Port TensorBoard môžete zmeniť prechodom na Možnosť na Magický príkaz, e.g. . --port %tensorboard %tensorboard --logdir $LOG_DIR --host localhost --port 8088 Tip: Som spustený na Windows 10, kde som si všimol nejaké zvláštne správanie vo vzťahu k TensorBoard. Aby sa TensorBoard správne spustiť zakaždým, keď spustím notebook Jupyter, musím najprv odstrániť všetky dočasné súbory v C:\Users\[MY_WINDOWS_USERNAME]\AppData\Local\Temp\.tensorboard-info adresára. Som spustený na Windows 10, kde som si všimol nejaké zvedavé správanie vo vzťahu k TensorBoard. Aby sa TensorBoard správne spustiť zakaždým, keď spustím notebook Jupyter, musím najprv odstrániť všetky dočasné súbory v riaditeľa . Tip: C:\Users\[MY_WINDOWS_USERNAME]\AppData\Local\Temp\.tensorboard-info 3.3 Vizualizácia vášho modelu Keras s TensorBoard TensorBoard by sa mal automaticky otvoriť na Dashboard. Ak nie, môžete kliknúť na možnosť menu alebo môžete alternatívne vybrať z rozbaľovacieho menu. Graphs Graphs Graphs Z toho Zobraziť, vyberte na zobrazenie štruktúry vášho modelu. Na začiatku by ste mali vidieť jeden uzol predstavujúci celý model. Dvakrát kliknite na uzol, aby ste videli štruktúru podgrafu. Graphs Conceptual graph Môžete dvojitým kliknutím na jednotlivé uzly v rámci sub-grafovej štruktúry zobraziť ich vlastnosti. TensorBoard tiež umožňuje exportovať modelový graf do formátovať sa. .png záver Každá metóda vizualizácie diskutovaná vyššie má svoje výhody a nevýhody. Ako vidíte, TensorBoard možno použiť aj s netrénovanými modelmi, ale vyžaduje trochu viac práce na správne nastavenie. visualkeras