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.
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.
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.
Grafik sieht so aus.
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