Mitä työkaluja voin käyttää visualisoimaan Keras-malleja? Vanha kliikki "kuva on tuhannen sanan arvoinen" voi olla vieläkin totta, kun työskentelet monimutkaisten koneoppimismallien kanssa. Onneksi on olemassa joitakin helppoja tapoja visualisoida koneoppimismalleja.Tässä oppaassa keskitytään Keras-mallien visualisointiin ja käytetään seuraavaa mallia (”testimalli”) esittelyyn: 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) Kuten näette, edellä oleva malli on melko monimutkainen. Sitä käytetään oppimaan kuvioita intertial-mittausyksiköstä ("IMU") ja muista anturitiedoista. Kuten huomaat, alkuperäisen muistikirjan mallin määritelmä käyttää mukautettuja objekteja kappaleistamaan tiettyä logiikkaa, joka toistuu mallisuunnittelussa. Kirjanpitäjä Tässä oppaassa käsitellään seuraavia 3 visualisointityökalua: Netron The Python package visualkeras TensorBoard 1. Käyttämällä Netronia visualisoimaan Keras-mallisi on luultavasti yksinkertaisin visualisointityökalu saatavilla. Sinun tarvitsee vain napsauttaa painiketta kotisivulla ja valitse sitten malli, jonka haluat visualisoida. Tässä on visualisointi testimallien ensimmäisistä kerroksista: Netron Open Model... Kun malli on ladattu, voit napsauttaa solmuja mallikaaviossa nähdäksesi niiden ominaisuudet: Voit viedä mallin grafiikan ja muotoiluja klikkaamalla päävalikon kuvaketta ja valitsemalla sopiva vientivaihtoehto. .png .svg 2. Käytä Visualisoida Keras-malli visualkeras visuaalinen Sillä Python-paketti on myös erittäin helppokäyttöinen ja tarjoaa kätevän tavan visualisoida malli ennen koulutusta. : visualkeras pip pip install visualkeras Seuraava Python-koodi osoittaa paketin peruskäyttöä: # [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() Sillä menetelmä tuottaa seuraavan grafiikan testimallin ensimmäisistä kerroksista: graph_view Paketti tarjoaa myös menetelmä, joka tuottaa mallikerroksen grafiikan, joka erottuu tyypin ja koon mukaan: layered_view visualkeras.layered_view(model, legend=True).show() Kuten huomaat, kulkeminen Kahden Parametri luo legendaa, joka kuvaa kunkin kerroksen: True legend Yksi etu on paketti on sen tarjoama valvonta siitä, miten grafiikka näytetään. Voit tarkastella grafiikan tuloksen muuttamiseen käytettyjä parametreja Sivut visualkeras Pakettiasiakirjat 3. Käytä Keras-mallin visualisointi TensorBoard Tensorilaatikko on kätevä vaihtoehto Keras-mallin visualisointiin, koska se on asennettu yhdessä Pienellä "hieronnalla" on myös mahdollista käyttää kuvata mallin rakenne ennen koulutusta. TensorBoard TensorFlow TensorBoard 3.1 Asentaminen Paketti jupyter-tensorboard Tämä osio käyttää A:n yhteydessä Tämä edellyttää, että asennus on paketti, joka puolestaan on pari riippuvuuksia. Käytä seuraavia vaiheita asentaa : 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 Jupyter-muistikirjan asettaminen visualisoimaan Keras-mallisi Kuten edellä mainittiin, voit visualisoida Keras-mallin Seuraava Jupyter-muistikirja koodi osoittaa, miten se tehdään käyttämällä testausmallia johdanto-osasta: 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 Jos käytät Jupyter-muistikirjan koodia edellä, viimeisen solun tulisi tuoda Kun solun suorittaminen on valmis, voit navigoida Katso tästä ja dashboard. Launching TensorBoard http://localhost:6006 TensorBoard Voit muokata TensorBoard-porttia siirtämällä --port-vaihtoehdon %tensorboard-maagiseen komentoon, esim. %tensorboard --logdir $LOG_DIR --host localhost --port 8088. Voit muuttaa TensorBoard-porttia siirtämällä Vaihtoehtona on Maaginen käsky, e. . --port %tensorboard %tensorboard --logdir $LOG_DIR --host localhost --port 8088 Vinkki: Käytän Windows 10:ää, jossa olen huomannut jotain outoa käyttäytymistä TensorBoardin suhteen. Jotta TensorBoard käynnistyisi oikein joka kerta, kun käytän Jupyter-muistikirjaa, minun on ensin poistettava kaikki väliaikaiset tiedostot C:\Users\[MY_WINDOWS_USERNAME]\AppData\Local\Temp\.tensorboard-info-kansiosta. Käytän Windows 10: tä, jossa olen huomannut joitakin uteliaita käyttäytymistä TensorBoardin suhteen. Jotta TensorBoard käynnistyisi oikein joka kerta, kun käytän Jupyter-muistikirjaa, minun on ensin poistettava kaikki väliaikaiset tiedostot ohjaajan kanssa. Tip: C:\Users\[MY_WINDOWS_USERNAME]\AppData\Local\Temp\.tensorboard-info 3.3 Keras-mallin visualisointi TensorBoardin avulla TensorBoard avautuu automaattisesti dashboard. Jos se ei ole, voit napsauttaa Valitse vaihtoehto tai valitse vaihtoehto Klikkaa Dropdown -valikosta Graphs Graphs Graphs Tästä The näkymä, valitse Voit tarkastella mallisi rakennetta. Aluksi näet yhden solmun, joka edustaa koko mallia. Kaksoisnapsauta solua nähdäksesi aligrafi rakennetta. Graphs Conceptual graph Voit kaksoisnapsauttaa yksittäisiä solmuja aligraafirakenteessa niiden ominaisuuksien tarkastelemiseksi. TensorBoard mahdollistaa myös mallikaavion viennin muotoilua varten. .png Johtopäätös Jokaisella edellä kuvatulla visualisointimenetelmällä on sen edut ja haitat. Netron on erittäin helppo käyttää koulutettujen mallien kanssa, kun taas Kuten näette, TensorBoardia voidaan käyttää myös koulutettujen mallien kanssa, mutta se vaatii hieman enemmän työtä asianmukaisen asennuksen tekemiseksi. visualkeras