我正在使用Mathematica 7.
我有一个插值函数,这是一个例子:
pressures =
WeatherData["Chicago", "Pressure", {2010, 8}] //
DeleteCases[#, {_, _Missing}] & //
Map[{AbsoluteTime[#[[1]]], #[[2]]} &, #] & // Interpolation;
Run Code Online (Sandbox Code Playgroud)
我想计算它的衍生物,这是直截了当的:
dpressures = D[pressures[x], x]
Run Code Online (Sandbox Code Playgroud)
现在,如果你绘制这个功能
Plot[3600*dpressures, {x, AbsoluteTime[{2010, 8, 2}], AbsoluteTime[{2010, 8, 30}]}]
Run Code Online (Sandbox Code Playgroud)
(抱歉,不知道如何从Mathematica中发布图像,并且没有时间弄明白.)你会发现它非常嘈杂.所以,我想说清楚它.我的第一个想法是使用Convolve,并将其与高斯内核集成,如下所示:
a = Convolve[PDF[NormalDistribution[0, 5], x], 3600*dpressures, x, y]
Run Code Online (Sandbox Code Playgroud)
返回
360 Sqrt[2/\[Pi]] Convolve[E^(-(x^2/50)), InterpolatingFunction[{{3.48961266 10^9, 3.49228746 10^9}},<>], ][x], x, y]
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来很合理.不幸的是,我相信我在某个地方犯了一个错误,因为我回来的结果似乎不是可评估的.那是:
a /. y -> AbsoluteTime[{2010, 8, 2}]
Run Code Online (Sandbox Code Playgroud)
返回
360 Sqrt[2/\[Pi]] Convolve[E^(-(x^2/50)), InterpolatingFunction[{{3.48961266 10^9, 3.49228746 10^9}},<>][x], x, 3489696000]]
Run Code Online (Sandbox Code Playgroud)
这不是我想要的东西我期待-1到1之间的数字.
我正在研究CUDA SDK上的FFT示例,我想知道:当填充数据的一半是2的幂时,为什么CUFFT要快得多?(因为频域中的一半是多余的)
拥有两种尺寸的力量有什么意义?
我有一个矩阵a=[[1 2 3]; [4 5 6]; [7 8 9]]和一个子矩阵b=[[5 6];[8 9]].
在matlab中有解卷积的方法(a,b)吗?
我正在寻找一种方法来识别可能的巨型矩阵中子矩阵的存在.通过一种反卷积,我希望1在子矩阵存在的地方获得类似于零的矩阵.
在上面的例子中,a 1在右下角.
CImg库的get_convolve()函数使用哪种过滤器(用C编写)?中位或高斯或双边或其他?我试图了解该功能,以便我可以在PIL openCV中使用类似的功能.在库的头文件CImg.h中,它说:
/**
Compute the convolution of the image by a mask.
The result \p res of the convolution of an image \p img by a mask \p mask is defined to be :
res(x,y,z) = sum_{i,j,k} img(x-i,y-j,z-k)*mask(i,j,k)
param mask = the correlation kernel.
param cond = the border condition type (0=zero, 1=dirichlet)
param weighted_convol = enable local normalization.
**/
Run Code Online (Sandbox Code Playgroud)
声明是这样的:
template<typename t> CImg<typename cimg::superset2<T,t,float>::type>
get_convolve(const CImg<t>& mask, const unsigned int cond=1, const bool weighted_convol=false) const {}
Run Code Online (Sandbox Code Playgroud)
这是一个代码片段:
for (int …Run Code Online (Sandbox Code Playgroud) 当在实现卷积神经网络(CNN)时,遇到两个conv2d运算符变体:
并实现max-pooling:
我的问题是:
conv2d什么区别? subsample参数的使用conv2d和max_pool_2d后采样的应用之间有什么区别conv2d?
那是什么区别:
conv2d( ..., subsample=(2,2) )
Run Code Online (Sandbox Code Playgroud)
和
a = conv2d( ..., subsample = (1,1) )
max_pool_2d( a, ds = (2,2) )
Run Code Online (Sandbox Code Playgroud)我想用Theano训练一个简单的卷积自动编码器,它一直很好用.但是,我没有看到conv2d在使用子采样(stride)时如何反转命令.有没有一种有效的方法可以在使用步幅时"反转"卷积命令,如下图所示?

例如,我想更改以下内容......
from theano.tensor.nnet.conv import conv2d
x = T.tensor4('x')
y = T.tanh( conv2d( x, W, border_mode='valid', subsample = (1,1) ) )
z = conv2d( y, Wprime, border_mode='full', subsample = (1,1) )
Run Code Online (Sandbox Code Playgroud)
......进入的情况subsample = (2,2).第一层将按预期工作.但是,第二层将有效地"用步幅1进行卷积,然后丢弃一半的输出".这显然是与我正在寻找的不同的操作 - z甚至不会像长度一样具有相同数量的神经元x.第二个conv2d命令应该"重建"原件x?
我正在尝试在MATLAB中对矩阵进行一堆滚动求和.为了避免循环,我习惯repmat将2D矩阵分层为3D结构.但是,现在快速卷积功能conv2不能再用于累加器.然而,N维卷积函数(convn)不是我正在寻找的,因为它实际上卷积了所有3个维度.我想要在每个切片上进行2D卷积并返回3D矩阵的东西.
在2D中平铺矩阵而不是在3D中分层它们将无法工作,因为它会破坏卷积边缘情况.我可以在它们之间用零填充但是它开始变得有点混乱.
换句话说,如果没有for循环,我该如何执行以下操作:
A = ones(5,5,5);
B = zeros(size(A));
for i = 1 : size(A, 3)
B(:,:,i) = conv2(A(:,:,i), ones(2), 'same');
end
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
我偶然发现了这些幻灯片,关于CNN使用word2vec来介绍CNN:http://www.people.fas.harvard.edu/~yoonkim/data/Kim_EMNLP_2014_slides.pdf
在幻灯片20上,第四个要点是:
Words not in word2vec are initialized randomly from U[?a, a]
where a is chosen such that the unknown words have the
same variance as words already in word2vec.
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何计算"a"以及如何计算完全未知单词的整个向量.
可以通过Toeplitz矩阵执行离散卷积,如下所示(Wiki文章):
请注意,这与一般Toeplitz矩阵的形式不完全相同,但它经历了各种移位和零填充.
有没有办法在numpy的纯粹的基础上实现这一目标roll,hstack等,即不使用任何for循环?我尝试了各种各样的转变,但我不能真正把它变成上面显示的形式.
我被赋予了为3x3矩阵创建图像过滤功能的任务,其结果必须等于conv2.我写过这个函数,但是它错误地过滤了图像:
function [ image ] = Func134( img,matrix )
image=img;
len=length(img)
for i=2:1:len-1
for j=2:1:len-1
value=0;
for g=-1:1:1
for l=-1:1:1
value=value+img(i+g,j+l)*matrix(g+2,l+2);
end
end
image(i,j)=value;
end
end
i=1:1:length
image(i,1)=image(i,2)
image(i,len)=image(i,len-1)
image(1,i)=image(2,i)
image(len,i)=image(len-1,i)
end
Run Code Online (Sandbox Code Playgroud)
过滤矩阵为[3,10,3; 0,0,0; -3,-10,-3]
请帮助弄清楚我的代码有什么问题.
我得到的一些示例结果conv2和我的代码如下所示.
