FutureWarning: is_categorical_dtype is deprecated and will be removed in a future version. Use isinstance(dtype, CategoricalDtype) instead
时间: 2024-06-09 08:06:44 浏览: 237
FutureWarning: is_categorical_dtype is deprecated and will be removed in a future version. Use isinstance(dtype, CategoricalDtype) instead.
这个警告是在将来的版本中将会移除的,建议使用 isinstance(dtype, CategoricalDtype) 来替代 is_categorical_dtype。
相关问题
ode: 'sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits' Received a label value of 7 which is outside the valid range of [0, 5). Label values: 2 5 2 0 4 4 6 0 4 4 5 4 5 0 7 4 5 3 0 6 2 0 4 0 1 6 4 7 4 2 0 3 [[{{node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits}}]] [Op:__inference_train_function_1527]
这个错误提示是因为标签值(label)的范围超出了模型预期的范围。在这个示例代码中,我们使用了 `SparseCategoricalCrossentropy` 作为损失函数,这意味着我们期望标签是整数值,并且它们的范围应该是从0到5(因为我们有6种不同的水果类型)。但是,错误提示中出现了一个标签值为7的数据,这超出了我们期望的范围。
要解决这个问题,你需要检查你的标签数据是否正确,并确保它们的范围在0到5之间。你可以使用以下代码来检查标签数据:
```python
import numpy as np
# 加载数据集
(train_images, train_labels), (test_images, test_labels) = datasets.fruits.load_data()
# 查看标签数据的范围
print(np.unique(train_labels))
```
如果你的标签数据超出了范围,你需要更正它们,并重新运行训练和评估模型的代码。
解释下这段代码 def _raise_if_missing(self, key, indexer, axis_name: str_t) -> None: """ Check that indexer can be used to return a result. e.g. at least one element was found, unless the list of keys was actually empty. Parameters ---------- key : list-like Targeted labels (only used to show correct error message). indexer: array-like of booleans Indices corresponding to the key, (with -1 indicating not found). axis_name : str Raises ------ KeyError If at least one key was requested but none was found. """ if len(key) == 0: return # Count missing values missing_mask = indexer < 0 nmissing = missing_mask.sum() if nmissing: # TODO: remove special-case; this is just to keep exception # message tests from raising while debugging use_interval_msg = is_interval_dtype(self.dtype) or ( is_categorical_dtype(self.dtype) # "Index" has no attribute "categories" [attr-defined] and is_interval_dtype( self.categories.dtype # type: ignore[attr-defined] ) ) if nmissing == len(indexer): if use_interval_msg: key = list(key) raise KeyError(f"None of [{key}] are in the [{axis_name}]") not_found = list(ensure_index(key)[missing_mask.nonzero()[0]].unique()) raise KeyError(f"{not_found} not in index")
这段代码是一个私有方法 `_raise_if_missing`,用于检查索引器 `indexer` 是否可以用于返回结果。在这个方法中,首先通过判断 `key` 的长度是否为0来确定是否需要执行后续的检查逻辑。如果 `key` 的长度为0,即没有请求任何键值,则直接返回。
接下来,通过比较 `indexer` 中小于0的元素的数量来计算缺失值的数量,并赋值给变量 `nmissing`。
如果存在缺失值,会进入一个条件语句块。在该条件语句块中,首先判断是否需要使用区间消息(use_interval_msg),该判断依据是数据的类型是否为区间类型(interval)或分类类型(categorical)且分类的数据类型也为区间类型。这个判断可能是为了处理特殊情况,并在调试时不触发异常消息测试。
接着,根据缺失值的数量与索引器的长度进行判断。如果缺失值的数量与索引器的长度相等,说明请求的所有键值都不存在,此时会抛出 KeyError 异常,异常消息会显示请求的键值列表和所在的轴(axis)。
如果缺失值的数量不等于索引器的长度,说明只有部分键值不存在。会通过 `ensure_index(key)[missing_mask.nonzero()[0]].unique()` 找到缺失的键值,并存储在变量 `not_found` 中。然后抛出 KeyError 异常,异常消息会显示缺失的键值列表。
阅读全文