JupyterNotebook与Args Parser

时间:2017-09-28 20:28:08

标签: python python-2.7 scikit-learn jupyter-notebook ipython-notebook

vector<int> uGuess = {1,2,3,3,4,5}
vector<int> a = uGuess;
sort(a.begin(), a.end());
bool d = unique(a.begin(), a.end());

以上代码可以成功运行。以下一行

parser = argparse.ArgumentParser()
parser.add_argument('-model', type=str, default='linear_model')
parser.add_argument('-featuredim', type=int, default=20)
parser.add_argument('-inputfeatures', type=str, default='/Users/myname/Downloads/face-rating-master/data/features_ALL.txt')
parser.add_argument('-labels', type=str, default='/Users/myname/Downloads/face-rating-master/data/ratings.txt')

给出了这个错误:

args = parser.parse_args()

来自https://github.com/avisingh599/face-rating的代码

2 个答案:

答案 0 :(得分:1)

try:
    args = parser.parse_args() #call from command line
except:
    args = parser.parse_args(args=[]) #call from notebook

答案 1 :(得分:0)

featuredim 参数需要一个整数(即type=int),但是您已经传入了一个字符串,表明了json文件的路径。

你可以通过重新设计它的逻辑来使这个脚本工作,这样它就可以读入JSON,然后从一个键值中提取整数(类似于.ini配置文件中读取的脚本数量),但是在你正在做的事情的背景下,这是一种过度的事情(因为你想要使用Jupyter,所以对你的困境真的不会有太大的帮助)。作为参考,您传入脚本的文件并不能直接访问笔记本中定义的变量,只存储应用程序使用的信息(例如笔记本所用的IP地址)运行和它正在使用的TCP端口号)。为了说明,这就是我的笔记本电脑上类似的JSON文件:

09/28 18:26:53 [jsp2205@kaheta: ~/Library/Jupyter/runtime]
$ less kernel-40dad791-ffa1-4687-bcd1-3ec831884c83.json
{
  "stdin_port": 60476,
  "ip": "127.0.0.1",
  "control_port": 60477,
  "hb_port": 60478,
  "signature_scheme": "hmac-sha256",
  "key": "b52ef99c-0a1a70b17b600daea5263a29",
  "kernel_name": "",
  "shell_port": 60474,
  "transport": "tcp",
  "iopub_port": 60475
}

最好的办法是从trainModel.py获取代码,删除ArgumentParser,并用硬编码变量替换对参数的任何引用。然后将修改后代码中的每一行添加到Jupyter笔记本中,并在笔记本中手动修改硬编码变量。

对于使用ArgumentParser的其他脚本,您可能希望查看是否将使用parse_args()提取的参数传递给函数,然后使用类似于以下内容的import语句将该函数直接导入到笔记本中。如下所示:

cd [directory containing script]
from [script name minus the .py extension] import [function name]
相关问题