问题标签 [activation-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
403 浏览

python - 为什么自定义激活函数会导致网络既零损失又低准确率?

我试图通过进行以下更改来使用 tflearn 构建自定义激活函数:

将我的自定义激活函数添加到activation.py

并将其添加到__init__.py

由于 tensorflow 可以自动进行梯度计算,所以我不需要实现梯度函数。正如文章深度学习编程风格所指出的,

过去,每当有人定义一个新模型时,他们都必须手动进行导数计算。虽然数学相当简单,但对于复杂的模型,它可能是耗时且乏味的工作。所有现代深度学习库都通过自动解决梯度计算问题,使从业者/研究人员的工作变得更加轻松。

我使用以下代码在 cifar10 数据集上训练了模型:https ://github.com/tflearn/tflearn/blob/master/examples/images/convnet_cifar10.py 但将所有relu激活更改为my_activation

可悲的是,这个简单的修改导致网络无法学习任何东西:

由于我只是一个初学者,我不知道导致网络成为零损失和低准确率的原因(NaN输出?无谓?)。谁能告诉我如何解决这个问题?谢谢!

请注意,我不是在问如何构建自定义激活函数。关于如何制作自定义函数的问题:

0 投票
1 回答
154 浏览

python - 如何将转换应用于单个神经元?

通常,激活函数应用于给定层的所有神经元,如

我怎样才能应用激活函数来只说第二个神经元?

如何仅将特定转换(例如tf.exp())应用于特定神经元?

切片列不能在这里应用,因为要切片列我需要知道行数并且在构建时是未知的。

0 投票
1 回答
763 浏览

python - ValueError:尺寸必须相等,但对于“activation_2/p_re_lu_l/mul”(操作:“Mul”)为 16 和 28

我是李 我有一个关于图像识别的问题。我现在使用的代码引用了上传到 brendan fortuner 的 github 的代码。我用了一个PReLU激活函数,这部分好像有问题。我试图解决它,但它不起作用,所以我会给你一个关于解决问题的提示。请给我一个关于解决问题的提示。

模型运行过程中出现如下错误:

0 投票
1 回答
228 浏览

c# - 如何使用 C# 创建一个简单的一次性激活过程?

我想为我的 Windows 窗体应用程序创建一个简单的一次性激活过程。所以,我基本上有两种形式,form1是激活窗口,form2是实际程序。我在下面给出的form1中创建了一个非常基本的激活程序

现在,问题是每次我加载我的程序时,它总是加载form1,即使有人pattern之前成功输入过一次密钥(即)。我如何存储该信息,以便如果有人输入正确的密钥,之后每次加载程序时它都会自动显示form2(即我的实际程序)并跳过form1。顺便说一句,我知道还有其他更先进和更安全的方法可以做到这一点,但我目前只是对这种非常基本的方法感兴趣。任何人都可以帮忙吗?

0 投票
1 回答
1188 浏览

python - 自定义 sigmoid 激活函数

所以,我正在使用 Keras 来实现卷积神经网络。在我的解码拓扑结束时,有一个带有 sigmoid 激活的 Conv2D 层。

基本上,我想更改 sigmoid 实现,我的目标是使其成为二进制类型的激活,如果 sigmoid 函数的值低于 0.5,则返回 0,如果它的值等于或高于 0.5,则返回 1。

在 Tensorflow 实现中搜索,我发现 sigmoid 是这样的:

我在操作 gen_math_ops 返回时遇到问题,将其值与 0.5 阈值进行比较。我知道由于张量类型的限制而不能使用通常的 if,那么我应该如何解决这个问题?

0 投票
1 回答
895 浏览

machine-learning - ReLU 激活函数输出大量数字

我终于能够实现反向传播,但仍有一些错误需要修复。主要问题如下:我的 ReLU 激活函数产生非常大的 dJdW 值(误差函数 wrt 权重的导数)。 当从权重中减去它时,我的输出变成了 -int 或 inf 的矩阵。我该如何阻止这个?到目前为止,我唯一的解决方案是让我的学习率标量变量非常小。

我首先使用 sigmoid 制作了 ANN,但 Leaky ReLU 更快。代码有点多,所以总结一下:

  1. 神经网络类
    • 定义超参数和东西(包括非常小的学习率标量)
    • 激活函数及其导数(ReLU和 sigmoid)
    • 成员函数:前向传播、反向传播、setBatchSize 等。
  2. 实例化 ANN
    • 设置超参数(ANN 的拓扑)
    • 创建数据(一个数组的值为 x,输出数组的值为 x+1)
  3. 训练
    • 使用步骤 2 中生成的输入来训练 ANN
  4. 测试
    • 使用随机生成的输入进行测试
    • 用户可以提供输入

希望能帮助你帮助我。谢谢!

0 投票
1 回答
807 浏览

machine-learning - 如何在 tensorflow train API 中使用我自己的激活函数?

我可以定义自己的激活函数并在 TensorFlow Train API 中使用它,即具有预定义估计器(如DNNClassifier )的高级 API吗?

例如,我想使用此代码,但将激活函数tf.nn.tanh替换为我自己的:

0 投票
1 回答
769 浏览

machine-learning - 在简单的多层 FFNN 中,只有 ReLU 激活函数不会收敛

我正在学习 tensorflow、深度学习和实验各种激活函数。

我为 MNIST 问题创建了一个多层 FFNN。主要基于 tensorflow 官方网站上的教程,除了添加了 3 个隐藏层。

我实验过的激活函数是:tf.sigmoid, tf.nn.tanh, tf.nn.softsign, tf.nn.softmax, tf.nn.relu. 只是tf.nn.relu不收敛,网络输出随机噪声(测试精度在 10% 左右)。以下是我的源代码:

代码输出如下:

如果tf.nn.relu用其他激活函数替换,网络精度会逐渐提高(尽管最终精度不同),这是预期的。

我在 5 月份的教科书/教程中读到 ReLU 应该是第一个作为激活函数的候选者。

我的问题是为什么 ReLU 在我的网络中不起作用?还是我的程序完全错误?

0 投票
1 回答
763 浏览

neural-network - 为什么在卷积神经网络中使用 ReLU 作为激活单元?

我正在尝试使用 CNN 对图像进行分类,据我所知,ReLu 是每个卷积层中激活单元的流行选择。根据我的理解,ReLU 会保留所有正图像强度并将负图像强度转换为 0。对我来说,这就像处理步骤,根本不是真正的“触发”步骤。那么在这里使用 ReLU 的目的是什么?

0 投票
1 回答
1442 浏览

neural-network - 使用 relu 进行梯度下降的影响

relu 激活函数不包含导数这一事实有什么影响?

如何在 Numpy 中实现 ReLU 函数将 relu 实现为(0 ,矩阵向量元素)的最大值。

这是否意味着对于梯度下降我们不采用 relu 函数的导数?

更新 :

来自使用 RELU 的神经网络反向传播

本文有助于理解:

ReLU 函数定义为: 对于 x > 0,输出为 x,即 f(x) = max(0,x)

所以对于导数 f '(x) 它实际上是:

如果 x < 0,则输出为 0。如果 x > 0,则输出为 1。

导数 f'(0) 没有定义。因此它通常设置为 0,或者您将激活函数修改为 f(x) = max(e,x) 以获得较小的 e。

一般来说:一个 ReLU 是一个使用 rectifier 激活函数的单元。这意味着它的工作原理与任何其他隐藏层完全相同,但除了 tanh(x)、sigmoid(x) 或您使用的任何激活之外,您将改为使用 f(x) = max(0,x)。

如果您已经为具有 sigmoid 激活功能的多层网络编写了代码,那么这实际上是 1 行更改。前向或反向传播在算法上没有任何变化。如果您还没有使用更简单的模型,请先返回并从该模型开始。否则,您的问题实际上不是关于 ReLU,而是关于整体实现 NN。

但这仍然会留下一些混乱,因为神经网络成本函数通常需要激活函数的导数,那么对于 relu,这对成本函数有何影响?