Как вы периодически очищаете вывод Google Colab

Я использую Google Colab для обучения модели обнаружения объектов, используя API обнаружения объектов tensorflow. Когда я запускаю ячейку train.py, она продолжает печатать диегностический вывод. Примерно через 30 минут браузер падает из-за большого количества строк, напечатанных в выводе ячейки.

Есть ли какой-нибудь сценарий, который можно использовать для периодической очистки вывода (скажем, каждые 30 минут) вместо того, чтобы вручную нажимать clear output button?


person Jitesh Malipeddi    schedule 18.07.2019    source источник
comment
Пробовали ли вы предложения, приведенные в этой ссылке stackoverflow.com/questions/52751413/   -  person nag    schedule 18.07.2019
comment
Где мне запустить коды Python, указанные в приведенной выше ссылке?   -  person Jitesh Malipeddi    schedule 18.07.2019


Ответы (5)



Я действительно нашел способ решить эту проблему. Включите строку (строки) кода, вывод которых вы пытаетесь подавить, в следующие строки.

from IPython.utils import io
with io.capture_output() as captured:
    # Enter code here

В моем случае ячейка имела следующий код

from IPython.utils import io
with io.capture_output() as captured:
     !python train.py --logtostderr --train_dir=/content/drive/My\ Drive/ocr_resized_train_checkpoints/ --pipeline_config_path=/content/frcnn_inception.config

Я надеюсь, что это помогает кому-то. Пожалуйста, дайте мне знать в случае возникновения каких-либо проблем.

person Jitesh Malipeddi    schedule 29.11.2019
comment
это действительно очень помогло мне, спасибо! Я уже начал думать, что у меня одного такая проблема. - person gokdumano; 13.11.2020
comment
Поскольку он запускается как команда оболочки, вы также можете использовать перенаправление оболочки > /dev/null - person ctrl-alt-delor; 11.07.2021

Привет, Джитеш Малипедди,

Итак, я столкнулся с той же проблемой, что и у вас, и, хотя это не самый элегантный способ, я придумал хак, чтобы заставить эту работу работать. Что я сделал, так это использовал модуль потока и с циклом массива кучу чисел в массив и поток моей функции output.clear() вместе с обучением моей модели. Я только что придумал это сегодня вечером, поэтому я буду работать над лучшей версией этого, используя модуль времени, потому что эта версия жестко закодирована.

    from google.colab import output
    import threading

    #holds time in secs.
    times = []

    #this 6000 represents 100 mins
    for y in range(6000):
        #every 5mins
        if y %300==0:
        #append this number
        times.append(y)
    else:
        continue
    #this function holds are output.clear()
    def gfg():
        output.clear()
    #for the length of the array times
    for x in range(len(times)):

        #start threading with the Timer module each element of the array
        #and when times[x] arrives use function gfg to clear console.
        timer = threading.Timer(times[x],gfg)
        timer.start()


    #your darknet training command 
    !./darknetdetectortrain

Моя следующая версия сможет продолжаться бесконечно, пока рабочая среда не взорвется или вы не остановите поезд. К вашему сведению, если вы запускаете этот скрипт и хотите изменить время и время, необходимое скрипту для очистки вывода, сбросьте время выполнения, потому что у вас начнутся проблемы.

person Nigel    schedule 29.11.2019
comment
Привет, я на самом деле придумал еще один более простой обходной путь. Пожалуйста, проверьте ответ и дайте мне знать, если он работает. - person Jitesh Malipeddi; 29.11.2019
comment
Хорошо, я попробовал ваш пример для моей модели yolov3, и я думаю, что он работает, просто вы не видите никаких результатов, что затрудняет определение того, когда прекратить обучение. - person Nigel; 29.11.2019

%%capture

работает также

%%capture
!python train.py --logtostderr --train_dir=/content/drive/My\ Drive/ocr_resized_train_checkpoints/ --pipeline_config_path=/content/frcnn_inception.config
person SantoshGupta7    schedule 12.02.2020

Это частичное решение, но вы также можете указать для параметра verbose в методе подгонки значение 0, чтобы не получать вывод, или значение 2, чтобы получить уменьшенный вывод.

И вы можете использовать TensorBoard, чтобы видеть, что происходит.

person Szèles Àron    schedule 05.06.2020