如果可以激活多个输出,那么 softmax 层的替代是什么?

2023-12-19

例如,我有 CNN,它尝试从 MNIST 数据集(使用 Keras 编写的代码)中预测数字。它有 10 个输出,形成 softmax 层。只有一个输出可以为真(对于从 0 到 9 的每一位数字都是独立的):

Real: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
Predicted: [0.02, 0.9, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]

由于 softmax 的定义,预测的总和等于 1.0。

假设我有一个任务,需要对一些可以分为几个类别的对象进行分类:

Real: [0, 1, 0, 1, 0, 1, 0, 0, 0, 1]

所以我需要以其他方式正常化。我需要一个在 [0, 1] 范围内给出值并且总和可以大于 1 的函数。

我需要这样的东西:

Predicted: [0.1, 0.9, 0.05, 0.9, 0.01, 0.8, 0.1, 0.01, 0.2, 0.9]

每个数字都是对象属于给定类别的概率。之后,我可以使用像 0.5 这样的阈值来区分给定对象所属的类别。

出现以下问题:

  1. 那么哪个激活函数可以用于此目的呢?
  2. 这个函数可能已经存在于 Keras 中了吗?
  3. 也许您可以提出其他方法来预测这种情况?

您的问题是多标签分类之一,在 Keras 的上下文中对此进行了讨论,例如,此处:https://github.com/fchollet/keras/issues/741 https://github.com/fchollet/keras/issues/741

简而言之,keras 中建议的解决方案是将 softmax 层替换为 sigmoid 层,并使用 binary_crossentropy 作为成本函数。

该线程的一个例子:

# Build a classifier optimized for maximizing f1_score (uses class_weights)

clf = Sequential()

clf.add(Dropout(0.3))
clf.add(Dense(xt.shape[1], 1600, activation='relu'))
clf.add(Dropout(0.6))
clf.add(Dense(1600, 1200, activation='relu'))
clf.add(Dropout(0.6))
clf.add(Dense(1200, 800, activation='relu'))
clf.add(Dropout(0.6))
clf.add(Dense(800, yt.shape[1], activation='sigmoid'))

clf.compile(optimizer=Adam(), loss='binary_crossentropy')

clf.fit(xt, yt, batch_size=64, nb_epoch=300, validation_data=(xs, ys), class_weight=W, verbose=0)

preds = clf.predict(xs)

preds[preds>=0.5] = 1
preds[preds<0.5] = 0

print f1_score(ys, preds, average='macro')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果可以激活多个输出,那么 softmax 层的替代是什么? 的相关文章

  • 卷积神经网络 (CNN) 输入形状

    我是 CNN 的新手 我有一个关于 CNN 的问题 我对 CNN 特别是 Keras 的输入形状有点困惑 我的数据是不同时隙的二维数据 比方说10X10 因此 我有 3D 数据 我将把这些数据输入到我的模型中来预测即将到来的时间段 所以 我
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 按相似度对矩阵进行排序

    我有 100 个矩阵 其中每一行对应一个个体 列对应站点 我想通过相似性度量对行进行排序 以便最相似的个体在矩阵中彼此相邻 我使用 k 近邻按行对矩阵进行排序 并将这些排序的矩阵提供给卷积神经网络 我想知道是否还有其他措施可以完成手头的任务
  • 关于具有自定义损失的 3 输出 ANN 的加权

    我正在尝试定义一个自定义损失函数 它在回归模型中接收 3 个输出变量 def custom loss y true y pred y true c K cast y true float32 Shape batch size 3 y pre
  • model.predict() 返回类而不是概率

    Hello 我是第一次使用 Keras 我训练并保存了一个模型 作为 json 文件及其权重 该模型旨在将图像分为 3 个类别 我的编译方法 model compile loss categorical crossentropy optim
  • 优化 Keras 以使用所有可用的 CPU 资源

    好吧 我真的不知道我在说什么 所以请耐心听我说 我正在使用 Theano 后端运行 Keras 以在 MNIST 图像上运行基本的神经网络 目前只是一个教程 过去 我一直使用我的旧 HP 笔记本电脑 因为我有 Windows 和 Ubunt
  • ValueError:在 R 中使用 keras 模型时在用户代码中

    我正在尝试使用 R 在 R 中运行一维 CNNkeras包裹 我正在使用以下代码 library MASS library keras Create some data data Boston data lt Boston create a
  • 打印出网络架构中每一层的形状

    在 Keras 中 我们可以如下定义网络 有什么办法可以输出每层之后的形状 例如 我想打印出以下形状inputs在定义行之后inputs 然后打印出形状conv1在定义行之后conv1 etc inputs Input 1 img rows
  • 如何使用分布式 Dask 和预先训练的 Keras 模型进行模型预测?

    我正在加载预训练的 keras 模型 然后尝试使用 dask 并行化大量输入数据 不幸的是 我遇到了一些与我如何创建 dask 数组有关的问题 任何指导将不胜感激 Setup 首先我从这个仓库克隆https github com sanch
  • 如何在Keras模型中替换(或插入)中间层?

    我有一个训练有素的 Keras 模型 我想要 1 用相同但没有偏差的Con2D层替换Con2D层 2 在第一次激活之前添加 BatchNormalization 层 我怎样才能做到这一点 def keras simple model fro
  • 了解最大池层之后的全连接层的尺寸[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在下图 架构 中 4096 个单元的 全连接 密集层是如何从最后一个最大池层 右侧 维度导出的256x13x13 而不是 4096 不应该
  • 使用自定义层运行 Keras 模型时出现问题

    我目前正在攻读学士学位论文FIIT STU https www fiit stuba sk en html page id 749 其主要目标是尝试复制和验证以下结果study http arxiv org abs 2006 00885 这
  • 如何访问 tf.layers.conv2d 中的内核变量?

    我想可视化卷积层中的权重以观察它们如何变化 但我找不到一种方法来访问卷积层中的权重tf layers conv2d 谢谢 您可以通过名称访问该变量 weights sess run
  • 如何使用 Keras 中的 Conv2D 在 5D 张量的最后三个维度上应用卷积?

    通常的输入张量Conv2DKeras 中是一个 4D 张量 其维度为batch size n n channel size 现在我有一个 5D 张量 其尺寸为batch size N n n channel size我想对中的每个 i 应用
  • Tensorboard 和 Dropout 层

    我有一个非常基本的查询 我制作了 4 个几乎相同 差异在于输入形状 的 CNN 并在连接到全连接层的前馈网络时合并了它们 几乎相同的 CNN 的代码 model3 Sequential model3 add Convolution2D 32
  • AttributeError:模块“keras.engine”没有属性“Layer”

    当我试图运行时Parking Slot mask rcnn py文件我收到如下错误mrcnn model py文件我该如何解决 gt 2021 06 17 08 25 18 585897 W tensorflow stream execut
  • 使用 Keras 时,验证集中未见的类别会出现错误

    我有由数值变量和分类变量组成的数据 分类变量有很多类别 因此我使用嵌入来表示这些类别 我的模型是一个简单的神经网络 我知道当你定义嵌入层时你需要通过input dim number of categories 1为了解释训练中看不见的类别
  • 如何创建 MNIST 数据集之类的文件

    所以我有一堆图像 PNG 它们的名称可以用作标签 有没有一种工具或示例说明我如何拍摄这些图像并创建像 MNIST IDX 这样的数据集 有很多关于如何阅读它们的示例 但没有关于如何创建它们的示例 任何帮助将不胜感激 这会有所帮助 image
  • conv1D 中形状的尺寸

    我尝试过构建一个只有一层的 CNN 但遇到了一些问题 事实上 编译器告诉我 ValueError 检查模型输入时出错 预期的 conv1d 1 input 具有 3 个维度 但得到形状为 569 30 的数组 这是代码 import num
  • 交换keras中的张量轴

    我想将图像批次的张量轴从 batch size row col ch 交换为 批次大小 通道 行 列 在 numpy 中 这可以通过以下方式完成 X batch np moveaxis X batch 3 1 我该如何在 Keras 中做到

随机推荐