Как просмотреть файлы логов тензорной доски train_on_batch, сгенерированные Google Colab? - PullRequest
0 голосов
/ 12 марта 2020

Я знаю, как просматривать графики тензорной доски на моей локальной машине, в то время как мои нейронные сети тренируются с использованием кода в локальной записной книжке Jupyter, используя следующий код. Что мне нужно делать по-другому, когда я использую Google Colab для обучения нейронной сети? При использовании train_on_batch я не вижу никаких учебных пособий / примеров в Интернете.

После определения моей модели (con vnet) ...

convnet.compile(loss='categorical_crossentropy',                                      
                optimizer=tf.keras.optimizers.Adam(0.001),
                metrics=['accuracy']
               )

# create tensorboard graph data for the model
tb = tf.keras.callbacks.TensorBoard(log_dir='Logs/Exp_15', 
                                    histogram_freq=0, 
                                    batch_size=batch_size, 
                                    write_graph=True, 
                                    write_grads=False)
tb.set_model(convnet)

num_epochs = 3
batches_processed_counter = 0

for epoch in range(num_epochs):

    for batch in range(int(train_img.samples/batch_size)): 
        batches_processed_counter = batches_processed_counter  + 1

        # get next batch of images & labels
        X_imgs, X_labels = next(train_img) 

        #train model, get cross entropy & accuracy for batch
        train_CE, train_acc = convnet.train_on_batch(X_imgs, X_labels) 

        # validation images - just predict
        X_imgs_val, X_labels_val = next(val_img)
        val_CE, val_acc = convnet.test_on_batch(X_imgs_val, X_labels_val) 

        # create tensorboard graph info for the cross entropy loss and training accuracies
        # for every batch in every epoch (so if 5 epochs and 10 batches there should be 50 accuracies )
        tb.on_epoch_end(batches_processed_counter, {'train_loss': train_CE, 'train_acc': train_acc})

        # create tensorboard graph info for the cross entropy loss and VALIDATION accuracies
        # for every batch in every epoch (so if 5 epochs and 10 batches there should be 50 accuracies )
        tb.on_epoch_end(batches_processed_counter, {'val_loss': val_CE, 'val_acc': val_acc})

        print('epoch', epoch, 'batch', batch, 'train_CE:', train_CE, 'train_acc:', train_acc)
        print('epoch', epoch, 'batch', batch, 'val_CE:', val_CE, 'val_acc:', val_acc)

tb.on_train_end(None)

я вижу, что файл журнала имеет успешно сгенерирован в среде выполнения Google Colab. Как мне посмотреть это в Tensorboard? Я видел решения, которые описывают загрузку файла журнала на локальный компьютер и просмотр его в тензорной панели локально, но это ничего не отображает. Есть ли что-то, чего мне не хватает в моем коде, чтобы локально работать на тензорной доске? И / или альтернативное решение для просмотра данных журнала в Tensorboard в Google Colab?

В случае, если это важно для деталей решения, я нахожусь на Ма c. Кроме того, учебники, которые я видел в Интернете, показывают, как использовать Tensorboard с Google Colab при использовании кода fit, но не видно, как изменить мой код, который не использует fit, а скорее train_on_batch.

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Спасибо доктору Райану Каннингему из Университета Манчестера за решение этой проблемы, а именно:

%load_ext tensorboard
%tensorboard --logdir './Logs'

... что позволяет мне просматривать графики Tensorboard в самом документе Google Colab и посмотрите обновление графиков во время обучения NN.

Итак, полный набор кода для просмотра графиков Tensorboard во время обучения сети (после определения нейронной сети, которую я назвал con vnet):

# compile the neural net after defining the loss, optimisation and 
# performance metric
convnet.compile(loss='categorical_crossentropy',  # cross entropy is suited to 
                                                   # multi-class classification
                optimizer=tf.keras.optimizers.Adam(0.001),
                metrics=['accuracy']
               )

# create tensorboard graph data for the model
tb = tf.keras.callbacks.TensorBoard(log_dir='Logs/Exp_15', 
                                    histogram_freq=0, 
                                    batch_size=batch_size, 
                                    write_graph=True, 
                                    write_grads=False)
tb.set_model(convnet)

%load_ext tensorboard
%tensorboard --logdir './Logs'

# iterate through the training set for x epochs, 
# each time iterating through the batches,
# for each batch, train, calculate loss & optimise weights. 
# (mini-batch approach)
num_epochs = 1
batches_processed_counter = 0

for epoch in range(num_epochs):

    for batch in range(int(train_img.samples/batch_size)): 
        batches_processed_counter = batches_processed_counter  + 1

        # get next batch of images & labels
        X_imgs, X_labels = next(train_img) 

        #train model, get cross entropy & accuracy for batch
        train_CE, train_acc = convnet.train_on_batch(X_imgs, X_labels) 

        # validation images - just predict
        X_imgs_val, X_labels_val = next(val_img)
        val_CE, val_acc = convnet.test_on_batch(X_imgs_val, X_labels_val) 

        # create tensorboard graph info for the cross entropy loss and training accuracies
        # for every batch in every epoch (so if 5 epochs and 10 batches there should be 50 accuracies )
        tb.on_epoch_end(batches_processed_counter, {'train_loss': train_CE, 'train_acc': train_acc})

        # create tensorboard graph info for the cross entropy loss and VALIDATION accuracies
        # for every batch in every epoch (so if 5 epochs and 10 batches there should be 50 accuracies )
        tb.on_epoch_end(batches_processed_counter, {'val_loss': val_CE, 'val_acc': val_acc})

        print('epoch', epoch, 'batch', batch, 'train_CE:', train_CE, 'train_acc:', train_acc)
        print('epoch', epoch, 'batch', batch, 'val_CE:', val_CE, 'val_acc:', val_acc)

tb.on_train_end(None)


Примечание: может пройти несколько секунд после окончания работы ячейки, прежде чем обновится выход ячейки и отобразятся графики Tensorboard.

0 голосов
/ 12 марта 2020
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip

get_ipython().system_raw('tensorboard --logdir /content/trainingdata/objectdetection/ckpt_output/trainingImatges/ --host 0.0.0.0 --port 6006 &')

get_ipython().system_raw('./ngrok http 6006 &')

! curl -s http://localhost:4040/api/tunnels | python3 -c \
 "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"

Это дает вам тензорную доску из созданных файлов журнала. Это создает туннель для тензорной доски на colab и делает его доступным через общедоступный URL c, предоставленный ngrok. Когда вы запускаете последнюю команду, печатается URL publi c. И это работает с TF1.13. Я думаю, вы можете использовать тот же подход для TF2.

...