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 【问题描述】:更新我的Numpy
和Tensorflow
后,我收到了这些警告。我已经尝试过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 的第二个参数从float
到np.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
更新:h5py
has 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, h5py
)在with
语句的范围内
【讨论】:
我按照你的建议做了同样的事情,但它对我不起作用。 你不是在代码的其他地方重新导入包吗?【参考方案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 进行基于值的部分切片