为什么神经网络要把标签集Y处理成categories,直接用double性质不行吗

通常把神经网络的标签集 Y 从数值型(double)转换成 categorical,主要有几个原因:

  1. 配合 classificationLayer 要求
    MATLAB 的深度学习工具箱里,如果要做“分类”任务,标签必须是离散的类别(category,而不是连续的数值。classificationLayer 会把输出当成对各个类别的预测分布来处理,而它期望看到的是一个 categorical 向量。如果直接传入 double 型的 012…,训练函数会把它当成回归目标,或者报错说标签格式不对
  2. 内部自动一键热编码(one-hot
    Y categorical 时,trainNetwork 会自动把它映射成 one-hot 向量(例如 State0→[1 0 0 …]State1→[0 1 0 …]),无需手动去做 ind2vecdummyvar 之类的预处理。
  3. 可读性和可维护性
    用 categorical 标签,后续做统计、分布查看、混淆矩阵时就可以直接用类别名称“State0” … “State5”)而不是 0–5 的数字,更直观。像示例里用 tabulate(Y) 直接就能打印出每个类别的样本数和百分比。
  4. 防止标签值被当成数值大小看待
    如果保留为 double,网络可能会把 “5” 当成比 “0” 更大的目标值去回归,而不是把它当成一个平等的类别。在分类任务中,类别之间没有大小顺序,用 categorical 可以避免这种歧义。

总结

  • 分类要用离散的类别(categorical),而不是数值(double)。
  • categorical(Y) 的标签格式正好满足 MATLAB 深度学习分类接口的需求,省去了许多手动编码和潜在错误。

你可能感兴趣的:(神经网络,人工智能,深度学习)