machine-learning - 具有对数和指数激活函数的卷积神经网络

标签 machine-learning neural-network keras conv-neural-network

我正在尝试使用 Keras 实现一个非常具体的卷积神经网络。

主要区别在于我必须使用非常规激活函数:logexp。 ConvNet的基本结构如下: 输入 => Conv2D => 激活日志 => 平均池 => 激活 Exp => ...

问题是:随着权重变得太小,log 激活值会迅速达到 -inf

我需要使用logexp的原因是因为对于某些层我想模拟*产品池*,这是当前层的较小窗口(过滤器)。 如果我应用 log(a)log(b),我可以进行正常的平均池化 ~ log(a)+ log(b) 后跟一个 exp 激活,它对应于我想要的产品:a * b = exp( log(a)+log(b) ).

为了摆脱 -inf,我尝试使用 SGD 和较低的学习率来训练网络,这样我可以获得更大的权重,但没有成功。

请问,您是否知道如何避免由于权重很小而导致的 -inf,或者有一种更智能的方法来获得产品池而不需要记录激活函数?

谢谢。

最佳答案

您的激活输出快速达到 -inf 的事实告诉我,您的卷积层的输出非常小!我无法为您提供如何避免 -inf 的明确答案,因为这取决于您的网络结构、输入值的范围以及网络训练的任务。

但是,我建议两种可能的解决方案:

  1. 您可能需要重新考虑您的权重初始化技术。许多实用的 CNN 都是从均值为零且方差相对较小(约 1x10^-3)的高斯分布进行初始化,这将成为网络中的一个问题,因为大多数权重非常小,并将导致卷积输出低于 1。
  2. 考虑激活输出的下限,例如 max{..} 函数。

关于machine-learning - 具有对数和指数激活函数的卷积神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47726549/

相关文章:

python - 如何将 numpy 数组转换为标准 TensorFlow 格式?

python - 同一算法 scikit 神经网络多次运行的不同预测

python - 使用 Brian2 库时获取空白图

python - Keras 嵌入层 : how do they work?

python - Keras - TypeError : Output tensors to a Model must be Keras tensors - while modelling multiple input , 多输出网络

programming-languages - 将一阶逻辑转换为 CNF

neural-network - Tensorflow 中如何实现过滤器串联?

python - Nan当用RMSE/RMSLE损失函数训练模型时

python - Keras:输入 0 与层 conv1d_5 不兼容:预期 ndim=3,发现 ndim=2

keras - 如何获得 keras 模型相对于其输入的梯度?