FutureWarning:不推荐将 issubdtype 的第二个参数从“float”转换为“np.floating”

Posted

技术标签:

【中文标题】FutureWarning:不推荐将 issubdtype 的第二个参数从“float”转换为“np.floating”【英文标题】:FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated 【发布时间】:2018-06-28 15:40:07 【问题描述】:

更新我的NumpyTensorflow 后,我收到了这些警告。我已经尝试过these,但没有任何效果,我们将不胜感激。

FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
2018-01-19 17:11:38.695932: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2

【问题讨论】:

这方面有什么更新吗?设法解决它,我得到了同样的警告 是的,请参阅@raja 答案 pip install h5py==2.8.0rc1(比接受的答案更好的解决方案) @Hooked:它实际上是如何修复代码的?很想知道您是如何找到此解决方案的。谢谢 谁能说出它为什么会发生(并给出一个最小的代码示例),还是会再次出现pip install -U ...import warnings; warnings.filterwarnings("ignore")?也许有人想知道这个警告告诉我们什么? 【参考方案1】:

以前我遇到同样的错误,我刚刚使用了 warnings() 模块。在你所有的导入之后,我已经使用了这些代码,

import warnings
warnings.filterwarnings('ignore', '.*do not.*',)

【讨论】:

作为警告说明,这只会抑制显示的警告,实际上并不能解决导致该警告的情况;它只会隐藏它。 是的,它现在的修复。我相信随着新的库更新将修复到位,并且不会发出警告。非常整洁的快速修复。感谢分享。【参考方案2】:

我已经尝试过这些,它为我解决了同样的问题,只需将它们放在你的代码顶部

import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]="3"

【讨论】:

精确解决方案! 从长远来看,这不是一个解决方案! 是的,这将记录日志,但答案并未说明问题或解决方法。【参考方案3】:

您还可以使用以下代码,通过在代码开头使用以下行来删除终端中的警告行。

带有警告的代码:

import numpy as np, sys, tensorflow as tf print('\nStart of Code...\n')

输出:

FutureWarning: Conversion of the second argument of issubdtype from float to np.floating is deprecated. In future, it will be treated as np.float64 == np.dtype(float).type. from ._conv import register_converters as _register_converters

Start of Code...

警告已删除的代码:

import numpy as np, sys, tensorflow as tf for i in range(3): # Add this for loop. sys.stdout.write('\033[F') # Back to previous line. sys.stdout.write('\033[K') # Clear line.

print('\nStart of Code...\n')

输出:

Start of Code...

【讨论】:

我想这可能很有用,但它不是一个非常干净的答案......有错误表明有问题。【参考方案4】:

这可能是也可能不是你的情况,但同样的警告也会从 h5py 包中吐出:

/home/user/bin/conda3/lib/python3.6/site-packages/h5py/__init__.py:34: FutureWarning: issubdtype 的第二个参数从 floatnp.floating 已弃用。以后会处理的 作为np.float64 == np.dtype(float).type。从 ._conv 导入 register_converters 作为 _register_converters

对于遇到这个问题的人来说,这是known h5py issue,由numpy 1.14 介绍。正如开发人员所说:

您可以忽略警告,它不会导致任何问题 时刻,但你应该升级到 h5py 的下一个版本 变得可用。

...所以它是无害的。修复刚刚通过merged 掌握。但在更新发布之前,解决方法是将 numpy 降级到以前的版本:

pip install numpy==1.13.0

更新h5pyhas released 带有修复的 RC 版本。以下命令应该这样做:

pip install h5py==2.8.0rc1

更新(最终版):现在有一个完整的版本。所以你可以简单地运行:

pip install --upgrade h5py

【讨论】:

@ShubhamSharma 如果您使用的是 tensorflow >= 1.5.0 和 python 3.6,它可能需要 numpy 1.13+(请参阅github.com/tensorflow/tensorflow/issues/16488),因此必须小心选择 numpy 版本。目前,1.13.0 似乎是最佳选择。如果 tensorflow 即使我有所有这些框架的最新版本,但它给了我同样的警告 @ShubhamSharma 答案建议降级 numpy,而不是获取最新版本 h5py 的更新现已推出,参考@ClaudeCOULOME 的直接升级答案。 @Maxim 你能看看这个问题吗,***.com/q/58926940/5904928为什么 lstm 最终输出与状态输出之间存在巨大差异。【参考方案5】:

从这个警告升级 scipy 到 rif of。为此,您可以使用 pip 升级 scipy。

**sudo pip install --upgrade scipy**

【讨论】:

【参考方案6】:

这是由于 h5py 和 numpy 之间的版本冲突。您需要做的就是通过以下命令降级您的 numpy 版本:

pip install numpy==1.13.0

【讨论】:

【参考方案7】:

以上都不适用于我的情况,我不想降级任何软件包。

Github 上有一个简单的解决方案,只需抑制警告:

import warnings
with warnings.catch_warnings():
    warnings.filterwarnings("ignore",category=FutureWarning)
    import numpy as np
    import tensorflow as tf
    import h5py as h5py

然后导入导致错误的任何包(numpy, tensorflow, h5pywith 语句的范围内

【讨论】:

我按照你的建议做了同样的事情,但它对我不起作用。 你不是在代码的其他地方重新导入包吗?【参考方案8】:

你可以升级 h5py

pip install --upgrade h5py

【讨论】:

【参考方案9】:

我通过安装/重新安装 ipykernel 解决了这个问题:

pip3 install --upgrade ipykernel

如果你有不同的点数当然是我们那个

【讨论】:

【参考方案10】:

你需要升级h5py,numpy版本应该是

pip install --upgrade h5py
pip install "numpy<1.17"

【讨论】:

考虑为您的答案添加一些解释。【参考方案11】:

您可能希望首先找出原因(这里的大多数答案都适用于特定场景 - 使用已弃用功能的库 - 在本例中是 NumPy)。

根本原因

简而言之,有些东西确实调用了:

np.issubdtype(something, float)

代替:

np.issubdtype(something, np.floating)

这是在断言和逻辑调度代码中完成的,这些代码很少由最终用户编写。所以 - 这通常是由您正在使用的库完成的。

如何进行

因此,您应该找出导致此警告的原因。您将使用 warnings 模块,但与其他答案相反:

import warnings
warnings.filterwarnings('error')
# run rest of your code here

这不仅会给你警告,还会给你一个错误和堆栈跟踪。然后 - 你是金子:

Traceback (most recent call last):
  File (...)
     # user code snipped...
  File "C:\...\site-packages\vtk\util\numpy_support.py", line 137, in numpy_to_vtk
    assert not numpy.issubdtype(z.dtype, complex), \
  File "C:\...\site-packages\numpy\core\numerictypes.py", line 422, in issubdtype
    FutureWarning, stacklevel=2
FutureWarning: Conversion of the second argument of issubdtype from `complex` to `np.complexfloating` is deprecated. 
  In future, it will be treated as `np.complex128 == np.dtype(complex).type`.

你看这次是VTK。当然,这不太可能是您的具体问题,但在了解引发此警告的原因后,您可以做很多有用的事情:

在正确的位置(在调用代码之前)使警告静音,然后恢复所有警告 查找已修复此问题的库的更新版本 可能会报告有问题的图书馆的问题 如果问题存在,但没有修复:编写修复并创建拉取请求 让世界变得更美好。

【讨论】:

很好的答案!感谢您帮助我找到根本原因..

以上是关于FutureWarning:不推荐将 issubdtype 的第二个参数从“float”转换为“np.floating”的主要内容,如果未能解决你的问题,请参考以下文章

从 Pandas 聚合中重命名结果列(“FutureWarning:不推荐使用带有重命名的字典”)

FutureWarning:不推荐使用非元组序列进行多维索引,使用 `arr[tuple(seq)]`

timedelta64[ns] -> FutureWarning:不推荐传递 timedelta64-dtype 数据,将在未来版本中引发 TypeError

遍历字典 - FutureWarning:不推荐对具有不存在键的非单调 DatetimeIndexes 进行基于值的部分切片

不使用 numpy:FutureWarning:元素比较失败;而是返回标量,但将来将执行元素比较[关闭]

seaborn FutureWarning:将以下变量作为关键字参数传递:x,y