我个人研究神经网络的理论并得到一些问题.
在许多书籍和参考文献中,对于隐藏层的激活功能,使用了超切线函数.
书籍提出了一个非常简单的原因,即tanh函数的线性组合可以描述具有给定误差的几乎所有函数形状.
但是,有一个问题.
我在这里继续思考...请帮助我摆脱这个心理(?...)陷阱!
来自MATLAB的Python新手.
我正在使用幅度尺度函数的双曲正切截断.将0.5 * math.tanh(r/rE-r0) + 0.5函数应用到范围值数组时遇到问题r = np.arange(0.1,100.01,0.01).我0.0在接近零的一侧获得了函数的几个值,这在我执行对数时会导致域问题:
P1 = [ (0.5*m.tanh(x / rE + r0 ) + 0.5) for x in r] # truncation function
Run Code Online (Sandbox Code Playgroud)
我用这个解决方法:
P1 = [ -m.log10(x) if x!=0.0 else np.inf for x in P1 ]
Run Code Online (Sandbox Code Playgroud)
这对我正在做的事情已足够,但它有点像创可贴解决方案.
根据数学显性的要求:
在天文学中,幅度尺度大致如下:
mu = -2.5log(flux) + mzp # apparent magnitude
Run Code Online (Sandbox Code Playgroud)
其中mzp是每秒看到1个光子的幅度.因此,更大的通量等于更小(或更负)的视在幅度.我正在为使用多个组件功能的源制作模型.防爆.具有不同sersic索引的两个sersic函数,P1在内部组件1-P1上具有外部截断,在外部组件上具有内部截断.这样,当将截断函数添加到每个分量时,由半径定义的幅度将变得非常大,因为mu1-2.5*log(P1)在P1渐近逼近零时有多小.
TLDR:我想知道的是,是否存在一种保留浮点的方法,其精度不足以与零区分(特别是在渐近逼近零的函数的结果中).这很重要,因为在获取这些数字的对数时,结果就是域错误.
非对数P1中输出之前的最后一个数字开始读取零5.551115123125783e-17,这是一个常见的浮点算术舍入误差结果,其中所需的结果应为零.
任何投入将不胜感激.
@user:Dan没有放完我的整个脚本:
xc1,yc1 = 103.5150,102.5461;
Ee1 = 23.6781;
re1 = …Run Code Online (Sandbox Code Playgroud) python math rounding-error floating-accuracy hyperbolic-function
Quaternion multiplication is well-defined, and is known to me as "Hamilton product":
// hamilton product
vec4 qmul(in vec4 q1, in vec4 q2) {
return vec4(
q1.w * q2.xyz + q2.w * q1.xyz - cross(q1.xyz, q2.xyz),
q1.w*q2.w - dot(q1.xyz, q2.xyz)
);
}
Run Code Online (Sandbox Code Playgroud)
However, for implementing qtanh() quaternionic function, we need division. So far I've found this, and it is working OK. Could you help me to undestand, where does this comes from?
// division
// https://www.boost.org/doc/libs/1_67_0/boost/math/quaternion.hpp
vec4 qdiv(in vec4 q1, in …Run Code Online (Sandbox Code Playgroud) 我的模拟需要实现
np.log(np.cosh(x))
Run Code Online (Sandbox Code Playgroud)
这会溢出 large x,即我收到RuntimeWarning: overflow encountered in cosh警告。原则上,随着对数减少所讨论的数字,在 的某个范围内x,cosh应该溢出而不log(cosh())应该溢出。
在 NumPy 中是否有任何解决方案,例如在精神上与np.log1p()功能相似?
提供更多信息:我知道一个可能的解决方案可能是符号使用 SymPy https://github.com/sympy/sympy/issues/12671 但是模拟应该很快,并且符号计算 AFAIK 可能会显着减慢它的速度。
我正在尝试为我的分层数据实现 Poincar\xc3\xa9 嵌入,如 Facebook 的一篇论文(链接)中所讨论的。您可以在此处找到 Poincar\xc3\xa9 嵌入的更易于理解的解释。
\n根据这篇论文,我在这里和这里找到了 Tensorflow 的一些实现,以及Tensorflow Addons 中的tfa.layers.PoincareNormalize。后者甚至有上面提到的论文的链接,这让我相信这对我来说可能是一个很好的起点。然而,到目前为止,我没有成功实现 tfa.layers.PoincareNormalize,除了我链接的 API 页面上的一些通用信息之外,也找不到任何文档。
\n有谁知道应该如何实现该层以提供论文中讨论的双曲空间中的嵌入?我的出发点是使用标准嵌入层的实现,如下所示(它实际上是分类变量的实体嵌入)?
\ninput = Input(shape=(1, ))\nmodel = Embedding(input_dim=my_input_dim, \n output_dim=embed_dim, name="my_feature")(input)\nmodel = Reshape(target_shape=(embed_dim, ))(model)\nmodel = Dense(1)(model)\nmodel = Activation(\'sigmoid\')(model)\nRun Code Online (Sandbox Code Playgroud)\n由于输入不同,仅用 tfa.layers.PoincareNormalize 替换 Embedding 层是行不通的。我假设它可以放置在嵌入层之后的某个位置,以便对于反向传播步骤,“值”在每次迭代时都投影到双曲空间中,但到目前为止也没有运气。
\n我需要计算 cosh(x),但我不能使用 math.c 库,知道如何解决它吗?这是C语言。
python ×3
math ×2
c ×1
embedding ×1
glsl ×1
logarithm ×1
numeric ×1
numpy ×1
quaternions ×1
tensorflow ×1