[PYTHON] [TF] Verwendung von Tensorboard von Keras

keras ist eine Wrapper-Bibliothek für ** Theano / Tensorflow **, mit ** keras ** weniger Code als solides Schreiben in Theano / Tensorflow Es kann nach Menge beschrieben werden. In Bezug auf Keras gibt es eine Seite, die bereits erklärt wurde, daher werde ich sie dazu geben, und ich habe untersucht, wie Tensorboard von Keras verwendet wird, daher möchte ich sie kurz erläutern.

Verwenden Sie bei der Ausgabe des Protokolls für ** Tensorboard ** den Mechanismus ** Callback **. Der registrierte ** Rückruf ** wird zu einem festen Zeitpunkt aufgerufen. Der Zeitpunkt des Aufrufs hängt von der Art des ** Rückrufs ** ab, aber ** Rückruf ** für ** Tensorboard ** wird ** kurz vor ** und am Ende jeder Epoche ** aufgerufen. Getan werden.

Unmittelbar vor dem Lernen werden ** tf.merge_all_summaries ** und ** tf.train.SummaryWriter ** aufgerufen. Am Ende jeder Epoche wird ** add_summary ** aufgerufen und ein Protokoll ausgegeben. Sie können auch die Häufigkeit von Rückrufen ändern, wenn jede Epoche zu lang ist.

** Rückruf ** für ** Tensorflow ** wird mit ** keras.callbacks.TensorBoard ** erstellt. Übergeben Sie den erstellten Rückruf passend. Geben Sie in ** histogram_freq ** die Häufigkeit an, mit der die Histogrammdaten von ** Tensorboard ** ausgegeben werden sollen. Wenn histogram_freq = 1 ist, werden jedes Mal Epochendaten ausgegeben.

python


    tb_cb = keras.callbacks.TensorBoard(log_dir=log_filepath, histogram_freq=1)
    cbks = [tb_cb]
            
    history = model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch = nb_epoch, verbose=1, callbacks=cbks, validation_data=(X_test, Y_test))

Wenn sich die Netzwerkstruktur zwischen ** Training ** und ** Test ** wie ** Dropout ** ändert, ist vor dem Erstellen des Modells die folgende Beschreibung erforderlich. Wenn Sie es nicht beschreiben, sterben Sie beim Erstellen des Modells.

python


    KTF.set_learning_phase(1)

** learning_phase ** wird verwendet, wenn sich ** Training ** und ** Test ** unterschiedlich verhalten. Wenn sich das Netzwerk nicht zwischen ** Training ** und ** Test ** ändert, wird es nicht eingegeben.

** Lernphase ** wird während ** Training ** auf ** 1 ** und während ** Test ** auf ** 0 ** gesetzt. Dieser Wert wechselt das Netzwerk. Sie müssen nichts tun, da ** keras ** den Wert automatisch eingibt. Zum Beispiel wird ** 0 ** für ** Validierung ** gesetzt.

Einfaches Beispiel

Ein einfaches Beispiel für ein Maltilayer Neural Network sieht folgendermaßen aus:

python


import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
from keras.utils import np_utils
import keras.callbacks
import keras.backend.tensorflow_backend as KTF
import tensorflow as tf

batch_size = 128
nb_classes = 10
nb_epoch   = 20
nb_data    = 28*28
log_filepath = './log'

# load data
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# reshape
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1]*X_train.shape[2])
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1]*X_test.shape[2])

# rescale
X_train = X_train.astype(np.float32)
X_test  = X_test.astype(np.float32)
X_train /= 255
X_test  /= 255

# convert class vectors to binary class matrices (one hot vectors)
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)

old_session = KTF.get_session()

with tf.Graph().as_default():
    session = tf.Session('')
    KTF.set_session(session)
    KTF.set_learning_phase(1)
    # build model
    model = Sequential()
    model.add(Dense(512, input_shape=(nb_data,), init='normal',name='dense1'))
    model.add(Activation('relu', name='relu1'))
    model.add(Dropout(0.2, name='dropout1'))
    model.add(Dense(512, init='normal', name='dense2'))
    model.add(Activation('relu', name='relu2'))
    model.add(Dropout(0.2, name='dropout2'))
    model.add(Dense(10, init='normal', name='dense3'))
    model.add(Activation('softmax', name='softmax1'))       
    model.summary()

    model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01), metrics=['accuracy'])

    tb_cb = keras.callbacks.TensorBoard(log_dir=log_filepath, histogram_freq=1)
    cbks = [tb_cb]
            
    history = model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch = nb_epoch, verbose=1, callbacks=cbks, validation_data=(X_test, Y_test))

    score = model.evaluate(X_test, Y_test, verbose=0)
    print('Test score:', score[0])
    print('Test accuracy;', score[1])

KTF.set_session(old_session)

Dadurch wird ein ** Keras ** -Laufzeitprotokoll in die Standardausgabe gedruckt.

Layer (type)                       Output Shape        Param #     Connected to                     
====================================================================================================
dense1 (Dense)                     (None, 512)         401920      dense_input_1[0][0]              
____________________________________________________________________________________________________
relu1 (Activation)                 (None, 512)         0           dense1[0][0]                     
____________________________________________________________________________________________________
dropout1 (Dropout)                 (None, 512)         0           relu1[0][0]                      
____________________________________________________________________________________________________
dense2 (Dense)                     (None, 512)         262656      dropout1[0][0]                   
____________________________________________________________________________________________________
relu2 (Activation)                 (None, 512)         0           dense2[0][0]                     
____________________________________________________________________________________________________
dropout2 (Dropout)                 (None, 512)         0           relu2[0][0]                      
____________________________________________________________________________________________________
dense3 (Dense)                     (None, 10)          5130        dropout2[0][0]                   
____________________________________________________________________________________________________
softmax1 (Activation)              (None, 10)          0           dense3[0][0]                     
====================================================================================================
Total params: 669706
____________________________________________________________________________________________________
Train on 60000 samples, validate on 10000 samples
Epoch 1/20
60000/60000 [==============================] - 5s - loss: 1.2522 - acc: 0.6646 - val_loss: 0.5603 - val_acc: 0.8695
Epoch 2/20
60000/60000 [==============================] - 5s - loss: 0.5533 - acc: 0.8445 - val_loss: 0.3862 - val_acc: 0.8962
Epoch 3/20
60000/60000 [==============================] - 5s - loss: 0.4381 - acc: 0.8728 - val_loss: 0.3291 - val_acc: 0.9084
Epoch 4/20
60000/60000 [==============================] - 5s - loss: 0.3879 - acc: 0.8867 - val_loss: 0.2963 - val_acc: 0.9147
Epoch 5/20
60000/60000 [==============================] - 6s - loss: 0.3536 - acc: 0.8975 - val_loss: 0.2753 - val_acc: 0.9198
Epoch 6/20
60000/60000 [==============================] - 5s - loss: 0.3271 - acc: 0.9047 - val_loss: 0.2575 - val_acc: 0.9268
Epoch 7/20
60000/60000 [==============================] - 5s - loss: 0.3059 - acc: 0.9113 - val_loss: 0.2421 - val_acc: 0.9301
Epoch 8/20
60000/60000 [==============================] - 5s - loss: 0.2873 - acc: 0.9168 - val_loss: 0.2302 - val_acc: 0.9331
Epoch 9/20
60000/60000 [==============================] - 5s - loss: 0.2751 - acc: 0.9199 - val_loss: 0.2198 - val_acc: 0.9359
Epoch 10/20
60000/60000 [==============================] - 5s - loss: 0.2612 - acc: 0.9246 - val_loss: 0.2092 - val_acc: 0.9386
Epoch 11/20
60000/60000 [==============================] - 5s - loss: 0.2507 - acc: 0.9274 - val_loss: 0.1998 - val_acc: 0.9416
Epoch 12/20
60000/60000 [==============================] - 6s - loss: 0.2383 - acc: 0.9311 - val_loss: 0.1930 - val_acc: 0.9437
Epoch 13/20
60000/60000 [==============================] - 5s - loss: 0.2288 - acc: 0.9340 - val_loss: 0.1859 - val_acc: 0.9461
Epoch 14/20
60000/60000 [==============================] - 5s - loss: 0.2195 - acc: 0.9367 - val_loss: 0.1776 - val_acc: 0.9492
Epoch 15/20
60000/60000 [==============================] - 5s - loss: 0.2107 - acc: 0.9391 - val_loss: 0.1715 - val_acc: 0.9511
Epoch 16/20
60000/60000 [==============================] - 5s - loss: 0.2040 - acc: 0.9405 - val_loss: 0.1658 - val_acc: 0.9514
Epoch 17/20
60000/60000 [==============================] - 5s - loss: 0.1969 - acc: 0.9423 - val_loss: 0.1607 - val_acc: 0.9533
Epoch 18/20
60000/60000 [==============================] - 5s - loss: 0.1922 - acc: 0.9442 - val_loss: 0.1559 - val_acc: 0.9554
Epoch 19/20
60000/60000 [==============================] - 5s - loss: 0.1853 - acc: 0.9454 - val_loss: 0.1518 - val_acc: 0.9558
Epoch 20/20
60000/60000 [==============================] - 6s - loss: 0.1813 - acc: 0.9470 - val_loss: 0.1472 - val_acc: 0.9568
('Test score:', 0.1472099754229188)
('Test accuracy;', 0.95679999999999998)

Wenn man sich die Protokollausgabe von ** Tensorboard ** ansieht, sieht es wie folgt aus.

image

Die Histogramme von ** Gewicht **, ** Vorspannung ** und ** Aktivierung ** werden wie unten gezeigt ausgegeben. Das Histogramm-Tag ist ein bisschen so, es scheint, dass der Name momentan nicht verwendet wird.

image

Grafik sieht so aus.

image

Ich konnte das ** Tensorboard ** -Protokoll einfach von ** Keras ** ausgeben. ** Keras ** wurde gerade veröffentlicht und es gibt noch Raum für Verbesserungen, aber es scheint täglich aktualisiert zu werden. Die Beschreibung ist sauberer als das Schreiben von ** Tensorflow ** in Solid, also Ich denke, es ist sehr praktisch, wenn Sie es versuchen möchten.

Recommended Posts

[TF] Verwendung von Tensorboard von Keras
Verwendung von Keras ~ Von der einfachen Modellgenerierung bis zum CNN ~
Wie man SWIG von waf benutzt
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Wie benutzt man Seaboan?
Verwendung von Image-Match
Wie man Shogun benutzt
Verwendung von Pandas 2
Verwendung von numpy.vectorize
Verwendung von pytest_report_header
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Verwendung von SymPy
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Verwendung von iptables
Wie benutzt man numpy?
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
Verwendung von OptParse
Verwendung von return
Wie man Imutils benutzt
Studie aus Python Hour7: Verwendung von Klassen
Verwendung von Qt Designer
Verwendung der Suche sortiert
[gensim] Verwendung von Doc2Vec
python3: Verwendung der Flasche (2)
Verwendung des Generators
[Python] Verwendung von Liste 1
Verwendung des Azure Table-Speichers von Django (PTVS)
Ein Memorandum zur Verwendung von Keras 'keras.preprocessing.image
Wie benutzt man Python Argparse?
Verwendung von IPython Notebook
Wie man Pandas Rolling benutzt
[Hinweis] Verwendung von virtualenv
Verwendung von Redispy-Wörterbüchern
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Go] Verwendung von "... (3 Perioden)"
So bedienen Sie GeoIp2 von Django
[Python] Verwendung von input ()
Wie benutzt man den Dekorateur?
[Einführung] Verwendung von open3d
Wie benutzt man Python Lambda?
So verwenden Sie Jupyter Notebook
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)