停止打印 INFO:cmdstanpy:开始第一条链, INFO:cmdstanpy:完成第一条链。

9
我使用 cmdstanpy 而不是 pystan 运行 FBProphet。为了实现我的目的,在 jupyter notebook 中需要多次运行训练和预测,这将导致不断地打印输出:
INFO:cmdstanpy:start chain 1
INFO:cmdstanpy:finish chain 1

当我不得不为10000多个模型运行此操作(在更新训练集后单独预测每天的值),并打印20000行时,问题就出现了。这使得笔记本电脑非常慢。有没有办法阻止FBProphet打印这两行?

我尝试过的方法:

  1. Verbose False会导致错误:
TypeError                                 Traceback (most recent call last)
<ipython-input-126-586e1241babb> in <module>
     17             model = Prophet(uncertainty_samples=True, weekly_seasonality = True, 
     18                             yearly_seasonality= True, changepoint_prior_scale = 0.5,
---> 19                             daily_seasonality=False, verbose = False)
     20             model.add_seasonality(name='monthly', period=30.5, fourier_order=2)
TypeError: __init__() got an unexpected keyword argument 'verbose'
  1. 如何控制来自fbprophet的输出?这无法抑制输出。

请提供建议。

3个回答

12

这篇回答 对于我来说可用于关闭cmdstanpy的信息

主要是

import logging
logger = logging.getLogger('cmdstanpy')
logger.addHandler(logging.NullHandler())
logger.propagate = False
logger.setLevel(logging.CRITICAL)

1
谢谢,这个完美运行,甚至使用了FBProphet。 - WiZarD

2

当创建CmdStanModel对象时,可以通过logger选项控制日志记录级别:

import logging
logger = logging.getLogger('simple_example')
logger.setLevel(logging.WARNING)

CmdStanModel(stan_file=your_path,logger=logger)

请参考https://docs.python.org/3/howto/logging.html#logging-levels以获取更多选项。上述代码只是创建了一个自定义记录器,以便仅打印警告级别的消息,而不是CmdStanPy utils中默认的信息级别(https://cmdstanpy.readthedocs.io/en/v0.9.67/_modules/cmdstanpy/utils.html)。

你从哪里导入CmdStanModel模型? - codeananda

1
这是我在使用PyCharm时解决问题的方法:
前往<your_virtual_env>\Lib\site-packages\cmdstanpy\utils.py。在get_logger()方法内,更新以下内容:
handler.setLevel(logging.INFO)

转化为:

handler.setLevel(logging.WARNING)

这是一个选项,但如果您希望其他人运行您的代码并使其功能相同(因为他们不会在其端手动编辑utils.py),则无法使用该选项。 - codeananda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接