我试图直接在R中进行卷积并使用FFT然后进行反演.但似乎从简单的观察来看它是不正确的.看看这个例子:
# DIRECTLY
> x2$xt
[1] 24.610 24.605 24.610 24.605 24.610
> h2$xt
[1] 0.003891051 0.003875910 0.003860829 0.003845806 0.003830842
> convolve(h2$xt,x2$xt)
[1] 0.4750436 0.4750438 0.4750435 0.4750437 0.4750435
# USING INVERSE FOURIER TRANSFORM
> f=fft(fft(h2$xt)*fft(x2$xt), inv=TRUE)
> Re(f)/length(f)
[1] 0.4750438 0.4750435 0.4750437 0.4750435 0.4750436
>
Run Code Online (Sandbox Code Playgroud)
让我们取指数0.在0时,卷积应该只是x2 $ xt(24.610)的最后一个值乘以h2 $ xt(0.003891051)的第一个值,它应该在索引0 = 24.610*0.003891051 = 0.09575877处给出卷积,这是从0.4750436离开.
难道我做错了什么?为什么价值观与预期不同?
这是我们在图像处理功课中的练习.我的代码工作正常.我想得到一些代码优化方面的帮助.
function C = convolve_slow(A,B)
(file name is accordingly convolve_slow.m )
This routine performs convolution between an image A and a mask B.
Input: A - a grayscale image (values in [0,255])
B - a grayscale image (values in [0,255]) serves as a mask in the convolution.
Output: C - a grayscale image (values in [0,255]) - the output of the convolution.
C is the same size as A.
Method: Convolve A with mask B using zero padding. Assume the …Run Code Online (Sandbox Code Playgroud) 我阅读了反向传播算法并理解为了计算网络参数的梯度,误差项应该从最后一个输出层反向传播到第一个隐藏层.但是当我在卷积神经网络中使用局部对比度归一化层时,我发现不清楚如何反向传播误差项.
可以在此处找到本地对比度规范化层的说明:http: //code.google.com/p/cuda-convnet/wiki/LayerParams#Data_layer
scipy(或其他类似的库)中是否有办法仅在某些所需的点上获取具有给定内核的图像的卷积?
我正在寻找类似的东西:
ndimage.convolve(image, kernel, mask=mask)
Run Code Online (Sandbox Code Playgroud)
其中mask包含True(或1)每当内核需要被应用,False(或0)其他方式。
编辑:示例python代码可以完成我想做的事情(但不比使用scipy进行整个图像卷积要快):
def kernel_responses(im, kernel, mask=None, flatten=True):
if mask is None:
mask = np.ones(im.shape[:2], dtype=np.bool)
ks = kernel.shape[0]//2
data = np.pad(im, ks, mode='reflect')
y, x = np.where(mask)
responses = np.empty(y.shape[0], float)
for k, (i, j) in enumerate(zip(y, x)):
responses[k] = (data[i:i+ks*2+1, j:j+ks*2+1] * kernel).sum()
if flatten:
return responses
result = np.zeros(im.shape[:2], dtype=float)
result[y, x] = responses
return result
Run Code Online (Sandbox Code Playgroud)
上面的代码使用wrap边界条件来完成这项工作,但是内部循环在python中进行,因此很慢。我在想,如果有东西在快已经实施scipy/ opencv/ …
我试图为2D输入创建一个简单的单层卷积,这个想法只是有一个输入图像,内核和输出代码是:
import tensorflow as tf
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
filename_queue = tf.train.string_input_producer(['/home/ubuntu/test.png'])
reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)
my_img = tf.image.decode_png(value)
init_op = tf.initialize_all_variables()
sess = tf.InteractiveSession()
with sess.as_default():
sess.run(init_op)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
for i in range(1):
image = my_img.eval()
image = tf.cast(image, tf.float64)
image = tf.expand_dims(image, 0)
K=np.array([[0,1,0],[1,1,1],[0,1,0]]).astype(float)
K = tf.expand_dims(K, 2)
K = tf.expand_dims(K, 0)
conv = tf.nn.conv2d(
image,
K,
strides=[3, 3, 3, 3],
padding="SAME")
Run Code Online (Sandbox Code Playgroud)
我收到此错误: …
我有关于keras和卷积神经网络的问题:
1.如何使用keras和卷积神经网络创建边界框?
2.如何使用keras vgg16应用程序再培训?
我是TensorFlow的新手.我正在使用自己的数据集进行二进制分类.但是我不知道如何计算准确度.有人可以帮我这么做吗?
我的分类器有5个卷积层,后面是2个完全连接的层.最终的FC层的输出维度为2,我使用过:
prob = tf.nn.softmax(classification_features, name="output")
Run Code Online (Sandbox Code Playgroud) 我正在阅读Szegedy等人的起始论文:https://arxiv.org/abs/1512.00567 ,我无法理解他们如何通过用2层3x3过滤器替换单个5x5过滤器来减少计算量(部分3.1).
特别是这段经文:
如果我们在不重用相邻网格块之间的计算的情况下天真地滑动网络,我们就会增加计算成本.滑动该网络可以由两个3×3卷积层表示,这两个层重复使用相邻瓦片之间的激活.
我不明白我们如何重用这些激活.
我试图在PyTorch中计算每个通道的渐变图像.为此,我想在图像的每个通道上使用Sobel滤波器执行标准2D卷积.我正在使用这个torch.nn.functional.conv2d功能
在我下面的最小工作示例代码中,我收到一个错误:
import torch
import torch.nn.functional as F
filters = torch.autograd.Variable(torch.randn(1,1,3,3))
inputs = torch.autograd.Variable(torch.randn(1,3,10,10))
out = F.conv2d(inputs, filters, padding=1)
Run Code Online (Sandbox Code Playgroud)
RuntimeError:给定组= 1,权重[1,1,3,3],所以预期输入[1,3,10,10]有1个通道,但得到3个通道
这表明groups需要为3.但是,当我制作时groups=3,我得到一个不同的错误:
import torch
import torch.nn.functional as F
filters = torch.autograd.Variable(torch.randn(1,1,3,3))
inputs = torch.autograd.Variable(torch.randn(1,3,10,10))
out = F.conv2d(inputs, filters, padding=1, groups=3)
Run Code Online (Sandbox Code Playgroud)
RuntimeError:无效参数4:超出范围/usr/local/src/pytorch/torch/lib/TH/generic/THTensor.c:440
当我检查THTensor类中的代码片段时,它引用了一堆维度检查,但我不知道我哪里出错了.
这个错误是什么意思?如何使用此conv2d功能执行我想要的卷积?我相信我误解了groups参数.
我已经通过在FFT卷积输出上应用它们来测试两个重新缩放功能.
第一个是从这个链接收集的.
public static void RescaleComplex(Complex[,] convolve)
{
int imageWidth = convolve.GetLength(0);
int imageHeight = convolve.GetLength(1);
double maxAmp = 0.0;
for (int i = 0; i < imageWidth; i++)
{
for (int j = 0; j < imageHeight; j++)
{
maxAmp = Math.Max(maxAmp, convolve[i, j].Magnitude);
}
}
double scale = 1.0 / maxAmp;
for (int i = 0; i < imageWidth; i++)
{
for (int j = 0; j < imageHeight; j++)
{
convolve[i, j] = new Complex(convolve[i, …Run Code Online (Sandbox Code Playgroud) convolution ×10
python ×3
tensorflow ×2
bounding-box ×1
c# ×1
fft ×1
keras ×1
matlab ×1
networking ×1
numpy ×1
optimization ×1
pytorch ×1
r ×1
scikit-image ×1
scipy ×1