当前位置: 首页 > 面试题库 >

使用to_categorical转换np.array时出现内存问题

戎桐
2023-03-14
问题内容

我有一个像这样的numpy数组:

[[0. 1. 1. ... 0. 0. 1.]
 [0. 0. 0. ... 0. 0. 1.]
 [0. 0. 1. ... 0. 0. 0.]
 ...
 [0. 0. 0. ... 0. 0. 1.]
 [0. 0. 0. ... 0. 0. 1.]
 [0. 0. 0. ... 1. 0. 1.]]

我这样进行转换以减少内存需求:

x_val = x_val.astype(np.int)

结果是:

[[0 1 1 ... 0 0 1]
 [0 0 0 ... 0 0 1]
 [0 0 1 ... 0 0 0]
 ...
 [0 0 0 ... 0 0 1]
 [0 0 0 ... 0 0 1]
 [0 0 0 ... 1 0 1]]

但是,当我这样做时:

x_val = to_categorical(x_val)

我得到:

in to_categorical
    categorical = np.zeros((n, num_classes), dtype=np.float32)
MemoryError

有什么想法吗?最终,numpy数组包含用于二进制分类问题的标签。到目前为止,我已经float32像在Keras
ANN中一样使用了它,并且效果很好,并且我取得了不错的性能。那么实际上有必要跑步to_categorical吗?


问题答案:

您不需要使用,to_categorical因为我猜您正在执行多标签分类。为了避免一劳永逸(!),让我解释一下。

如果您正在执行 二进制分类 ,则意味着每个样本可能仅属于两个类别之一,例如猫与狗或快乐与悲伤或正面评论与负面评论,那么:

  • 标签应[0 1 0 0 1 ... 0]具有以下形状:(n_samples,)即每个样品都带有一个(例如猫)或零(例如狗)标签。
  • 用于最后一层的激活函数通常是sigmoid(或输出范围在[0,1]范围内的值的任何其他函数)。
  • 通常使用的损失函数为binary_crossentropy

如果您要进行 多类别分类 ,这意味着每个样本只能属于许多类别之一,例如猫与狗,狮子,快乐与中性,悲伤或正面评论,中立评论,负面评论,则:

  • 标签应该是一次性编码的,即[1, 0, 0]对应于cat,[0, 1, 0]对应于dog和[0, 0, 1]对应于lion,在这种情况下,标签的形状为(n_samples, n_classes); 或者,它们可以是整数(即稀疏标签),即1对于猫,2对于狗和3对于狮子,在这种情况下,标签的形状为(n_samples,)。该to_categorical函数用于将稀疏标签转换为一键编码的标签,当然,如果您愿意的话。
  • 通常使用的激活功能softmax
  • 所使用的损失函数取决于标签的格式:如果标签是单次热编码,categorical_crossentropy则使用标签;如果标签是稀疏的,则使用标签sparse_categorical_crossentropy

如果您正在执行 多标签分类 ,这意味着每个样本可能属于零,一个或多个一类,例如图像可能同时包含猫和狗,那么:

  • 标签的[[1 0 0 1 ... 0], ..., [0 0 1 0 ... 1]]形状应为(n_samples, n_classes)。例如,标签[1 1]意味着相应的样本属于两个类别(例如猫和狗)。
  • sigmoid因为假定每个类别都独立于另一个类别,所以使用的激活函数。
  • 使用的损失函数为binary_crossentropy


 类似资料:
  • 我正在尝试为以下输入摇动转换规范: 预期输出如下: 我的规格: 我是新手,尝试了不同的方法,但不能得到想要的输出。任何帮助都非常感谢。 谢谢你

  • 如果您看到我共享的代码示例,您可以看到覆盖在盒子外面。我将问题追溯到属性。 我想删除div之外的内容。溢出无法正常工作。(删除过渡有效,但如果可能,我希望保留它) 任何帮助都很感激 代码链接 代码

  • 这篇文章很长,因为我想更好地解释上下文。 我的主要数据源是netCDF格式,我想转换成CSV文件。 有一段时间,我一直在用Python进行转换。作为一个例子,我使用一个先前修改过的netCDF数据(m 可以注意到: < li >第一行包括用逗号分隔的变量名。第二行及以上的值也用逗号分隔。 < li >纬度和经度值不四舍五入。 如上图所示,是所需的数据表示。 之后,我决定使用气候数据操作员(CDO)

  • 问题内容: 如果看到我共享的代码示例,则可以看到叠加层超出了框的范围。我将问题追溯到该属性。 我想删除div之外的内容。溢出无法正常运行。(正在删除作品,但如果可能,我想保留它) 任何帮助表示赞赏 码 问题答案: 实际上,当过渡发生时,它并没有得到尊重。 禁用过渡后,为什么不会出现此问题? 如果样式发生更改,但没有满足创建合成层的所有条件(即,没有动画或过渡或3D变换等),则不满足: 没有合成层,

  • 问题内容: 我目前在Python脚本中使用该模块的功能,但在换行符方面遇到了一些麻烦。如果不使用该参数,或者如果我使用它,则显示多个换行符,而不是仅一个。 例如 显示: 有谁知道问题出在哪里以及如何使用?仅供参考,我正在使用Python 2.6.1 问题答案: 太糟糕了 这与Windows和’\ r \ n’无关。尝试使用任何字符串作为参数都表明添加了太多行。不仅如此,还添加了其他空格(当机器读取

  • 我显示的优惠券的列表基于类别选择使用使用使用效果和佐贺。 这是我的初始状态。设置为真正的默认值,以便每当组件被访问时,它首先显示加载器,之后从获得调度,它命中api并使用redux-saga异步获得响应,然后设置为false,并根据响应或得到更新。 这是一个组件: 当组件第一次被访问时,正在加载因此将变为真,并且组件呈现加载程序并请求api获取数据。 从api获取数据后,加载设置为false,组件