(Керас) Мой прогресс в обучении модели CNN застрял - PullRequest
0 голосов
/ 21 апреля 2020

Я разработал свою модель CNN на основе хранилища [https://github.com/matterport/Mask_RCNN] . Когда я запустил программу (используя cmd: coco.py train --dataset = / DATASET / COCO / 2017 --model = Нет, я рекомендовал оператор загрузки, чтобы пропустить загрузку весов модели), процесс прошел построение модели, набор данных кокоса загрузка, а затем начал вызывать model.train ().

    # Create model
    if args.command == "train":
        model = modellib.MeshMask_RCNN(mode="training", config=config,
                                  model_dir=args.logs)
    else:
        model = modellib.MeshMask_RCNN(mode="inference", config=config,
                                  model_dir=args.logs)

    # Select weights file to load
    if args.model.lower() == "coco":
        model_path = COCO_MODEL_PATH
    elif args.model.lower() == "last":
        # Find last trained weights
        model_path = model.find_last()
    elif args.model.lower() == "imagenet":
        # Start from ImageNet trained weights
        model_path = IMAGENET_MODEL_PATH()
    else:
        model_path = args.model

    # Load weights
    print("Loading weights ", model_path)
    # model.load_weights(model_path, by_name=True)

    # Train or evaluate
    if args.command == "train":
        # Training dataset. Use the training set and 35K from the
        # validation set, as as in the Mask RCNN paper.
        dataset_train = CocoDataset()
        dataset_train.load_coco(args.dataset, "train", year=args.year, auto_download=args.download)
        if args.year in '2014':
            dataset_train.load_coco(args.dataset, "valminusminival", year=args.year, auto_download=args.download)
        dataset_train.prepare()

        # Validation dataset
        dataset_val = CocoDataset()
        val_type = "val" if args.year in '2017' else "minival"
        dataset_val.load_coco(args.dataset, val_type, year=args.year, auto_download=args.download)
        dataset_val.prepare()

        # Image Augmentation
        # Right/Left flip 50% of the time
        augmentation = imgaug.augmenters.Fliplr(0.5)

        # *** This training schedule is an example. Update to your needs ***
        # Training - Stage 0
        print("Fine tune all layers")

        #  get stuck when invoking this function #
>         model.train(dataset_train, dataset_val,
>                     learning_rate=config.LEARNING_RATE,
>                     epochs=160,
>                     layers='all',
>                     augmentation=augmentation)

В model.train () он начал загружать изображения с диска, и использование памяти начало увеличиваться примерно до 80 ГБ, а затем весь прогресс зависал (никаких обучающих сообщений и процессора / Коэффициент использования ГПУ очень низкий). Я сделал паузу и нашел цикл программы между строкой 404 ~ 406 в multiprocessing / pool.py.

    @staticmethod
    def _handle_workers(pool):
        thread = threading.current_thread()

        # Keep maintaining workers until the cache gets drained, unless the pool
        # is terminated.
404     while thread._state == RUN or (pool._cache and thread._state != TERMINATE):
405         pool._maintain_pool()
406         time.sleep(0.1)
        # send sentinel to stop workers
        pool._taskqueue.put(None)
        util.debug('worker handler exiting')

Означает ли это, что есть ресурсы, которые не удовлетворяют спрос, поэтому они застряли? Я новичок в керас и тензор потока. Может ли кто-нибудь помочь? Спасибо.

изменить: Когда я нашел, я нашел точное утверждение, где программа застряла.

# tensorflow_core/python/client/session.py
class _Callable(object):

  def __init__(self, session, callable_options):
    self._session = session
    self._handle = None
    options_ptr = tf_session.TF_NewBufferFromString(
        compat.as_bytes(callable_options.SerializeToString()))
    try:
>     slef._handle = tf_session.TF_SessionMakeCallable(
>         session._session, options_ptr)

    finally:
      tf_session.TF_DeleteBuffer(options_ptr)

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

На самом деле, он не застрял, он просто занимал слишком много времени. Я не понимал, насколько огромной была модель, которую я строил. Я подумал, что он застрял, потому что после печати «эпохи 1/160» для работы tf понадобилось почти час (я понял, что после того, как оставил его работать на всю ночь).

Сама модель абсолютно не в состоянии тренироваться и выдаст ошибку OOM после этого, поэтому мне нужно изменить дизайн моей модели. Извините за мою ошибку.

0 голосов
/ 21 апреля 2020

Убедитесь, что вы используете tenorflow gpu:

import tensorflow-gpu

Также добавьте устройство для сеанса tenorflow

with tf.device('/gpu:0'):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...