我正在寻找一种使用离散和快速方法计算导数的方法.从现在起我不知道我所拥有的等式的类型,我正在寻找类似于我们可以找到的积分的离散方法,例如欧拉方法.
我目前正在使用Shader Model 4(DirectX 10 HLSL)实现3D Perlin噪声凹凸贴图.生成噪声本身并不是一个大问题(有大量的教程和代码),但我没有找到3D Perlin噪声的分析衍生物.
考虑到衍生品的唯一网站是Ignigo Quilez的网站和相关的GameDev.net讨论.问题是在第一个链接中噪声是基于值的,而不是基于梯度的(这是我的要求),在第二个链接中,只有2D梯度噪声导数.
请注意,我不是在寻找数值导数,因为那些需要生成4个相邻的噪声样本,而且开销太多了.
有人计算过这些衍生物吗?是否有使用它们的参考实现?
我想找到双变量函数的数值导数.
是否有包或内置函数来执行此操作?
如何计算同情中多变量函数的(符号)梯度?
显然我可以单独计算每个变量的导数,但有没有矢量化操作呢?
例如
m=sympy.Matrix(sympy.symbols('a b c d'))
Run Code Online (Sandbox Code Playgroud)
现在对于i = 0..3,我可以这样做:
sympy.diff(np.sum(m*m.T),m[i])
Run Code Online (Sandbox Code Playgroud)
这将工作,但我宁愿做类似的事情:
sympy.diff(np.sum(m*m.T),m)
Run Code Online (Sandbox Code Playgroud)
哪个不起作用("AttributeError:ImmutableMatrix没有属性_diff_wrt").
我有两个数组x
,y
如下:
x = np.array([6, 3, 5, 2, 1, 4, 9, 7, 8])
y = np.array([2, 1, 3, 5, 3, 9, 8, 10, 7])
Run Code Online (Sandbox Code Playgroud)
我发现当地最小值和最大值的索引如下:
sortId = np.argsort(x)
x = x[sortId]
y = y[sortId]
minm = np.array([])
maxm = np.array([])
while i < y.size-1:
while(y[i+1] >= y[i]):
i = i + 1
maxm = np.insert(maxm, 0, i)
i++
while(y[i+1] <= y[i]):
i = i + 1
minm = np.insert(minm, 0, i)
i++
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题?答案应该是索引minima = [2, 5, …
I am currently implementing derivatives of regular data structures, in Agda, as presented in the One-Hole Context paper by Conor McBride [5].
In implementing it straight out of the OHC paper, which has also been done by Löh & Magalhães [3,4], we are left with the ?_?
function highlighted in red,
as Agda can't tell if the ?
and I
cases will terminate together.
Löh & Magalhães made a comment of this in their repository.
Other papers have also …
这是确定是否foo
相同或从类型派生的最简单方法T
bool Derives<T>(object foo)
{
return foo is T;
}
Run Code Online (Sandbox Code Playgroud)
并且完全匹配
bool ExactMatch<T>(object foo)
{
return foo.GetType() == typeof(T);
}
Run Code Online (Sandbox Code Playgroud) 所以我阅读了OpenGL信息页面,textureGrad
但它并没有真正解释任何内容.因此,您可以明确指定P相对于X和Y的偏导数
我的思绪已被吹嘘.
我已按照此视频中的说明实施了反向传播. https://class.coursera.org/ml-005/lecture/51
这似乎成功,通过梯度检查,并允许我训练MNIST数字.
但是,我注意到反向传播的大多数其他解释都将输出增量计算为
d =(a - y)*f'(z) http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm
而视频使用.
d =(a - y).
当我将delta乘以激活导数(S形导数)时,我不再以梯度检查的相同梯度结束(差异至少为一个数量级).
什么允许Andrew Ng(视频)省略输出增量的激活衍生物?为什么它有效?然而,当添加导数时,会计算出不正确的梯度?
编辑
我现在已经在输出上测试了线性和sigmoid激活函数,只有在我使用Ng的delta方程(没有sigmoid导数)时才进行梯度检查.
我不时使用同情,但不是很擅长.目前我仍然坚持定义一个索引变量列表,即n1到nmax并对其进行求和.然后我希望能够采用衍生物:
到目前为止我尝试了以下内容:
numSpecies = 10
n = IndexedBase('n')
i = symbols("i",cls=Idx)
nges = summation(n[i],[i,1,numSpecies])
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试针对一个变量采用派生,则会失败:
diff(nges,n[5])
Run Code Online (Sandbox Code Playgroud)
我也试图避免使用IndexedBase
.
numSpecies = 10
n = symbols('n0:%d'%numSpecies)
k = symbols('k',integer=True)
ntot = summation(n[k],[k,0,numSpecies])
Run Code Online (Sandbox Code Playgroud)
但是,这里总和已经失败,因为混合了python元组和sympy总和.
我如何执行indexedbase衍生产品或某种变通方法?
derivative ×10
python ×3
sympy ×2
3d ×1
activation ×1
agda ×1
c# ×1
delta ×1
generics ×1
glsl ×1
numpy ×1
opengl ×1
perlin-noise ×1
r ×1
termination ×1
textures ×1
zipper ×1