web-dev-qa-db-de.com

Wie man ipykernel_launcher.py behebt: Fehler: Nicht erkannte Argumente in jupyter?

Ich folge diesem Tensorflow Tutorial Nachdem ich zwei Tage lang die Umgebung eingerichtet hatte, konnte ich endlich premade_estimator.py mit cmd ausführen

 

aber wenn ich versuche, den gleichen Code in einem Jupyter-Notizbuch auszuführen, erhalte ich diesen Fehler:

usage: ipykernel_launcher.py [-h] [--batch_size BATCH_SIZE]
                             [--train_steps TRAIN_STEPS]

ipykernel_launcher.py: error: unrecognized arguments: -f C:\Users\david\AppData\Roaming\jupyter\runtime\kernel-4faecb24-6e87-40b4-bf15-5d24520d7130.json

Eine Ausnahme ist aufgetreten. Verwenden Sie% tb, um den vollständigen Traceback anzuzeigen.

SystemExit: 2

C:\Anaconda3\envs\python3x\lib\site-packages\IPython\core\interactiveshell.py:2918: 
UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)

Ich habe versucht, es ohne Erfolg zu beheben:

pip install --ignore-installed --upgrade jupyter

pip install ipykernel
python -m ipykernel install

conda install notebook ipykernel
ipython kernelspec install-self

Jede Idee wird geschätzt! Vielen Dank!

2
virtualdvid

Ich habe es verstanden! Der Grund für den Fehler ist, dass dieser Code argparse verwendet und dieses Modul zum Schreiben benutzerfreundlicher Befehlszeilenschnittstellen verwendet wird. Es scheint also, dass ein Konflikt mit Jupyter Notebook vorliegt.

Ich habe die Lösung auf dieser Seite gefunden:

Was wir tun müssen, ist:

Löschen oder kommentieren Sie diese Zeilen:

parser = argparse.ArgumentParser()
parser.add_argument('--batch_size', default=100, type=int, help='batch size')
parser.add_argument('--train_steps', default=1000, type=int,
                    help='number of training steps')

und args ersetzen

args = parser.parse_args(argv[1:])

für ein Wörterbuch mit der Bibliothek easydict auf diese Weise:

args = easydict.EasyDict({
    "batch_size": 100,
    "train_steps": 1000
})

Mit easydict können wir auf dikt-Werte als Attribute für die Argumente zugreifen.

Update

Nach all dem Jahr tiefer in Python zu tauchen, fand ich die Lösung für diese Frage viel einfacher (Wir brauchen keine externe Bibliothek oder Methode). argparse ist nur eine der vielen Möglichkeiten, Argumente an ein Skript in Python vom Terminal aus zu übergeben. Als ich versuchte, es in einem Jupyter-Notizbuch zu tun, funktionierte das offensichtlich nicht. Wir können in der Funktion einfach die Parameter wie ersetzen:

funtion(batch_size=100, train_steps=1000)

Wenn wir nun eine lange Liste von Parametern für unsere Funktion haben, können wir *args oder **kargs verwenden.

*args übergeben Sie einen Tuple als Parameter in der Funktion. In diesem Fall wird es insbesondere Folgendes sein:

args = (100, 1000)
function(*args)

**kargs übergeben Sie ein Wörterbuch als Argument an unsere Funktion:

args = {"batch_size": 100,
        "train_steps": 1000}
function(**args)

google einfach und Sie werden eine wirklich gute Erklärung finden, wie Sie beide verwenden, hier eine Dokumentation , die ich dazu verwendet habe.

9
virtualdvid

Hast du es versucht :

conda install ipykernel --name Python3
python -m ipykernel install
0
An0n