我试图理解GLSL中的dFdx和dFdy函数.
我理解以下内容:
我不明白变化率是指什么.它是片段坐标的变化率吗?
可能是你可以在片段着色器的两个调用之间找到任意变量的变化率吗?着色器调用是否从相邻调用中"读取"变量?对于(简单)示例:
// invokation for fragment 1
float x = 1.0;
float d = dFdx(x);
// invokation for fragment next to fragment 1 along the x axis.
float x = 2.0;
float d = dFdx(x);
Run Code Online (Sandbox Code Playgroud)
d分别为-1.0和1.0?
(注意:这是一个社区Wiki.)
假设我有一组点xi = { x0,x1,x2,... xn }和相应的函数值fi = f(xi)= { f0,f1,f2,...,fn },其中f(x),一般来说,是一个未知的功能.(在某些情况下,我们可能提前知道f(x),但我们想要这样做,因为我们通常不提前知道f(x).)什么是近似f的导数的好方法(x)在每个点xi?也就是说,如何在每个点xi处估计dfi == d/d x fi == d f(xi)/ d x的值?
不幸的是,MATLAB没有一个非常好的通用数值微分程序.造成这种情况的部分原因可能是因为选择一个好的例程可能很困难!
那有什么样的方法呢?有哪些例程?我们如何为特定问题选择一个好的例行程序?
在选择如何区分MATLAB时,有几个注意事项:
什么是最好的方法?
我正在使用D来获得函数的导数.但是,R在返回导数时不会简化表达式.我需要弄清楚函数是否具有可以一般表达的导数.R中是否有某种方法可以简化表达式?
> D(expression(sqrt(1 - x^2)), 'x')
-(0.5 * (2 * x * (1 - x^2)^-0.5))
> D(D(expression(sqrt(1 - x^2)), 'x'), 'x')
-(0.5 * (2 * (1 - x^2)^-0.5 - 2 * x * (-0.5 * (2 * x * (1 - x^2)^-1.5))))
Run Code Online (Sandbox Code Playgroud)
其次,R有没有办法进行数值积分?
我有一组模拟数据,我想在n维中找到最低的斜率.数据的间距沿着每个维度是恒定的,但不是全部相同(为了简单起见,我可以改变它).
我可以忍受一些数字不准确,尤其是边缘.我非常希望不生成样条并使用该衍生物; 只要原始价值就足够了.
可以numpy
使用该numpy.gradient()
函数计算一阶导数.
import numpy as np
data = np.random.rand(30,50,40,20)
first_derivative = np.gradient(data)
# second_derivative = ??? <--- there be kudos (:
Run Code Online (Sandbox Code Playgroud)
这是关于拉普拉斯与粗麻布矩阵的评论; 这不再是一个问题,而是为了帮助理解未来的读者.
我使用2D函数作为测试用例来确定阈值以下的"最平坦"区域.以下图片显示了使用以下最小值second_derivative_abs = np.abs(laplace(data))
和最小值之间的结果差异:
second_derivative_abs = np.zeros(data.shape)
hess = hessian(data)
# based on the function description; would [-1] be more appropriate?
for i in hess[0]: # calculate a norm
for j in i[0]:
second_derivative_abs += j*j
Run Code Online (Sandbox Code Playgroud)
色标表示功能值,箭头表示一阶导数(梯度),红点表示最接近零的点,红线表示阈值.
数据的生成器函数是( 1-np.exp(-10*xi**2 - yi**2) )/100.0
使用生成的xi,yi生成的np.meshgrid
.
拉普拉斯:
黑森州:
我将使用两个变量计算时间序列的一阶导数(dpH/dtime),time
和pH
.
在R中是否有任何类型的函数可以执行此操作,还是应该计算额外的函数来执行此操作?
使用SciPy函数计算相对于第一个参数的点的函数的偏导数是直截了当的scipy.misc.derivative
.这是一个例子:
def foo(x, y):
return(x**2 + y**3)
from scipy.misc import derivative
derivative(foo, 1, dx = 1e-6, args = (3, ))
Run Code Online (Sandbox Code Playgroud)
但是,如何foo
针对第二个参数采用函数的导数呢?我能想到的一种方法是生成一个lambda函数来重新调整参数,但这很快就会变得很麻烦.
另外,有没有办法根据函数的部分或全部参数生成偏导数组?
是否有可能使用c程序找到函数的导数.我正在使用matlab,它有一个内置函数diff(),可用于查找函数的导数.
f(x)=x^2
Run Code Online (Sandbox Code Playgroud)
是否有可能使用c找到上述函数的导数.算法是什么?
我一直在抨击这堵砖墙,看起来像是永恒的,我似乎无法绕过它.我正在尝试仅使用numpy和矩阵乘法来实现自动编码器.没有theano或keras技巧允许.
我将描述问题及其所有细节.它起初有点复杂,因为有很多变量,但它确实非常简单.
我们知道什么
1)X
是一种m
由n
矩阵这是我们的输入.输入是该矩阵的行.每个输入都是一个n
维度行向量,我们有m
它们.
2)我们(单个)隐藏层中的神经元数量,即k
.
3)我们的神经元(sigmoid,将表示为g(x)
)及其衍生物的激活功能g'(x)
我们不知道什么,想找到什么
总的来说,我们的目标是找到6个矩阵:w1
这是n
通过k
,b1
这是m
通过k
,w2
这是k
由n
,B2是m
通过n
,w3
这是n
由n
和b3
是m
由n
.
它们随机初始化,我们找到使用梯度下降的最佳解决方案.
这个过程
首先我们计算z1 = Xw1+b1
.它是m
通过k
并输入到我们的隐藏层.然后我们计算h1 = g(z1)
,它只是将sigmoid函数应用于所有元素z1
.当然它也是m
通过k
和我们的隐层的输出.
然后,我们计算 …
我希望用Java编写一个方法,找到连续函数的导数.这些是对该方法做出的一些假设 -
例如,函数cos(x)可以显示为0,pi,2pi,3pi,... npi的最大值或最小值.
我正在寻找一个方法,它将找到所有这些最大值或最小值,只要给出函数,lowerBound,upperBound和步长.
为了简化我的测试代码,我为cos(x)编写了一个程序.我使用的函数与cos(x)非常相似(至少在图形上).这是我写的一些测试代码 -
public class Test {
public static void main(String[] args){
Function cos = new Function ()
{
public double f(double x) {
return Math.cos(x);
}
};
findDerivative(cos, 1, 100, 0.01);
}
// Needed as a reference for the interpolation function.
public static interface Function {
public double f(double x);
}
private static int sign(double x) {
if (x < 0.0)
return -1;
else if (x > 0.0) …
Run Code Online (Sandbox Code Playgroud) 对于神经网络库,我实现了一些激活函数和损失函数及其衍生物.它们可以任意组合,输出层的导数只是损耗导数和激活导数的乘积.
但是,我没有独立于任何损失函数实现Softmax激活函数的导数.由于归一化即等式中的分母,改变单个输入激活会改变所有输出激活而不仅仅是一个.
这是我的Softmax实现,其衍生物未通过梯度检查约1%.如何实现Softmax衍生产品以便与任何损耗功能相结合?
import numpy as np
class Softmax:
def compute(self, incoming):
exps = np.exp(incoming)
return exps / exps.sum()
def delta(self, incoming, outgoing):
exps = np.exp(incoming)
others = exps.sum() - exps
return 1 / (2 + exps / others + others / exps)
activation = Softmax()
cost = SquaredError()
outgoing = activation.compute(incoming)
delta_output_layer = activation.delta(incoming) * cost.delta(outgoing)
Run Code Online (Sandbox Code Playgroud) regression derivative backpropagation neural-network softmax