tensorflow 如何修复ipykernel_launcher.py:错误:jupyter中无法识别的参数?

sirbozc5  于 2022-12-30  发布在  其他
关注(0)|答案(8)|浏览(303)

我正在跟踪这个tensorflow tutorial,经过两天的环境设置,我终于可以使用cmd运行premade_estimator.py

但是当我尝试在jupyter笔记本中运行相同的代码时,我得到了这个错误:

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

发生异常,请使用%tb查看完整的追溯。

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)

我已尝试使用以下方法修复此问题,但未成功:

pip install --ignore-installed --upgrade jupyter

pip install ipykernel
python -m ipykernel install

conda install notebook ipykernel
ipython kernelspec install-self

任何想法将不胜感激!谢谢!

t98cgbkg

t98cgbkg1#

更优雅的解决方案是:

args, unknown = parser.parse_known_args()

代替

args = parser.parse_args()
jei2mxaa

jei2mxaa2#

我明白了!我们得到这个错误的原因是因为这个代码使用的是argparse,而这个模块是用来编写用户友好的命令行界面的,所以看起来,它与Jupyter Notebook有冲突。
我在这个page中找到了解决方案:
我们要做的是:
删除或注解以下行:

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')

并替换args

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

对于以这种方式使用库easydict的字典:

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

使用easydict,我们可以访问作为参数属性的dict值。

    • 更新**

经过这一年对python的深入研究,我发现这个问题的解决方案要简单得多(我们不需要使用任何外部库或方法)。argparse只是python中从终端向脚本传递参数的众多方法之一。当我尝试在jupyter笔记本上这样做时,显然行不通。我们可以直接在函数中替换参数,如:

funtion(batch_size=100, train_steps=1000)

现在,如果函数的参数列表很长,可以使用*args**kargs
*args传递一个元组作为函数中的参数,具体来说,对于这种情况,它将是:

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

**kargs将字典作为参数传递给我们的函数:

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

只要谷歌一下,你就会发现一个关于如何使用它们的非常好的解释,这里有一个documentation,我用来研究这个。

6ljaweal

6ljaweal3#

我今天刚遇到这个问题,发现了一个快速而愚蠢的解决方案,就是为qtconsole/ipython传递的-f参数插入一个参数处理器,这是我们没有预料到的。

parser.add_argument("-f", "--fff", help="a dummy argument to fool ipython", default="1")

我没有使用-f参数,所以对我来说没有损失。
我宁愿不要仅仅因为ipython突然出现在某台特定计算机的工作流中就重新设计一个更大的参数处理框架...

u5i3ibmn

u5i3ibmn4#

我有这样的问题:

from serial.tools.list_ports import main
main()

但这是串行导入的库
所以我在我自己的目录中复制文件:第一个月
并编辑添加:

parser.add_argument("-f", "--fff", help="a dummy argument to fool ipython", default="1")

就像 * pauljohn 32 *(https://stackoverflow.com/users/1086346/pauljohn32)一样!
现在正在本地使用新文件:

from list_ports import main
main()

它工作正常!

qacovj5a

qacovj5a5#

here建议的另一个解决方案是向parse_args方法传递空字符串。
例如:

import argparse

def arguments():
  parser = argparse.ArgumentParser(description='Example')
  
  return parser.parse_args("")

上面的解决方案实际上在google colab中有效。

vjhs03f7

vjhs03f76#

您是否尝试过:

conda install ipykernel --name Python3
python -m ipykernel install
gorkyyrv

gorkyyrv7#

我收到了更多“无法识别的参数”的错误:第一个月
对于每个无法识别的参数(例如ip、stdin、control...),我添加了一行,以便将参数添加到ArgParser中(如@pauljohn32所建议的):

ap.add_argument(
            "-i", "--ip", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-s", "--stdin", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-c", "--control", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-b", "--hb", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-K", "--Session.key", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-S", "--Session.signature_scheme", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-l", "--shell", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-t", "--transport", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-o", "--iopub", help="a dummy argument to fool ipython", default="1")
iqxoj9l9

iqxoj9l98#

因为这段代码使用的是argparse,而这个模块是用来写用户友好的命令行界面的,所以看起来和Jupyter Notebook有冲突。
原因如上所述,但我认为将args转换为class比像@virtualdvid和@Hrvoje那样命令要好

class args_:
 self.batch_size = 100,
 self.train_steps = 1000
args = args_

相关问题