Невозможно импортировать модули при использовании весов и смещений

#numpy #keras #modulenotfounderror

#numpy #keras #ошибка modulenotfounderror

Вопрос:

Я пытаюсь улучшить гиперпараметры моей нейронной сети keras, оптимизируя их с помощью библиотеки весов и смещений (wandb).

Вот моя конфигурация:

 method: bayes
metric:
  goal: maximize
  name: Search elo
parameters:
  batch_number:
    distribution: int_uniform
    max: 100
    min: 1
  batch_size:
    distribution: int_uniform
    max: 1024
    min: 1
  epochs:
    distribution: int_uniform
    max: 10
    min: 1
  neural_net_blocks:
    distribution: int_uniform
    max: 5
    min: 1
  num_simulations:
    distribution: int_uniform
    max: 800
    min: 1
  pb_c_base:
    distribution: int_uniform
    max: 25000
    min: 15000
  pb_c_init:
    distribution: uniform
    max: 3
    min: 1
  root_dirichlet_alpha:
    distribution: uniform
    max: 4
    min: 0
  root_exploration_fraction:
    distribution: uniform
    max: 1
    min: 0
program: ../Main.py
  

Однако, когда я запускаю wandb agent arkleseisure/projectname/sweepcode , я получаю эту ошибку, повторяющуюся каждый раз при запуске развертки.

 2020-09-13 12:15:02,188 - wandb.wandb_agent - INFO - Running runs: ['klawqpqv']
2020-09-13 12:15:02,189 - wandb.wandb_agent - INFO - Cleaning up finished run: klawqpqv
2020-09-13 12:15:03,063 - wandb.wandb_agent - INFO - Agent received command: run
2020-09-13 12:15:03,063 - wandb.wandb_agent - INFO - Agent starting run with config:
        batch_number: 75
        batch_size: 380
        epochs: 10
        neural_net_blocks: 4
        num_simulations: 301
        pb_c_base: 17138
        pb_c_init: 1.5509741790555416
        root_dirichlet_alpha: 2.7032316257955133
        root_exploration_fraction: 0.5768106739703028
2020-09-13 12:15:03,245 - wandb.wandb_agent - INFO - About to run command: python ../Main.py --batch_number=75 --batch_size=380 --epochs=10 --neural_net_blocks=4 --num_simulations=301 --p
b_c_base=17138 --pb_c_init=1.5509741790555416 --root_dirichlet_alpha=2.7032316257955133 --root_exploration_fraction=0.5768106739703028
Traceback (most recent call last):
  File "../Main.py", line 3, in <module>
    import numpy
ModuleNotFoundError: No module named 'numpy'
  

Проверка завершается сбоем после трех неудачных попыток, и мне стало интересно, что я делаю не так. Конечно, когда W amp; B создается для проектов машинного обучения, должна быть возможность импортировать numpy, так что я могу изменить. Мой код до этого момента просто импортирует другие файлы из моего проекта. Когда я запускаю код в обычном режиме, он не аварийно завершает работу, а выполняется совершенно нормально.

Ответ №1:

Наиболее вероятная проблема, с которой вы сталкиваетесь, заключается в том, что wandb agent выполняется скрипт python с другим интерпретатором Python, чем вы намеревались.

Решение состоит в том, чтобы указать интерпретатор python, добавив что-то подобное в конфигурацию развертки (где python3 это интерпретатор, который вы хотите использовать):

 command:
  - ${env}
  - python3
  - ${program}
  - ${args}
  

Эта функция задокументирована по адресу:https://docs.wandb.com/sweeps/configuration#command

И есть часто задаваемые вопросы по настройке интерпретатора Python по адресу:https://docs.wandb.com/sweeps/faq#sweep-with-custom-commands

Чтобы немного больше понять, что происходит, вы можете посмотреть на опубликованную вами строку отладки, в которой говорится: «О запуске команды:»

 python ../Main.py --batch_number=75 --batch_size=380 --epochs=10 --neural_net_blocks=4 --num_simulations=301 --pb_c_base=17138 --pb_c_init=1.5509741790555416 --root_dirichlet_alpha=2.7032316257955133 --root_exploration_fraction=0.5768106739703028
  

По умолчанию wandb agent используется интерпретатор Python с именем python . Это позволяет пользователям настраивать свою среду так, чтобы python указывал на выбранный ими интерпретатор с помощью pyenv, virtualenv или других инструментов.

Если вы обычно запускаете команды с помощью командной строки python2 или python3, вы можете настроить способ выполнения агентом вашей программы, указав command ключ в вашем файле конфигурации, как описано выше. В качестве альтернативы, если ваша программа является исполняемой, а ваш интерпретатор python находится в первой строке вашего скрипта, используя #!/usr/bin/env python3 синтаксис, вы можете установить свой массив команд равным:

 command:
  - ${env}
  - ${program}
  - ${args}
  

Комментарии:

1. Спасибо за ваш ответ @JeffRaubitschek, я пытался изменить интерпретатор, но в своих экспериментах я обнаружил, что команда, данная wandb, отлично работает, когда я копирую и вставляю ее и запускаю сам. Я также распечатал версию python при выполнении этого и обнаружил, что они используют точно такую же версию python. Есть просто какая-то странная причина, по которой один может получить доступ к импортированным файлам, а другой нет.