标签: convolution

访问matlab中的函数声明

matlab中的卷积函数是conv()。我的问题是如何获得函数本身的实际实现?

matlab convolution

1
推荐指数
1
解决办法
165
查看次数

Keras 卷积 1D 通道独立,[样本,时间步长,特征],风力涡轮机数据集

我正在研究具有常规矩阵格式的风力涡轮机数据集:[ row:datetime , column:features]

但我想用卷积来捕捉每个特征的进展,就像在 LSTM 中完成的那样。因此,我生成了一个具有以下维度的新数据集:

[datetime, 15 timesteps,128 features] :每个原始日期时间行现在有 15 个寄存器(t-0,t-1,...,t-14)用于每个特征。

我的计划是使用大小为 1x5 的内核和 5 的步长分别对每个特征(通道)的时间步长维度进行卷积。从 128 个特征中获取每个 DateTime(batch)、长度为 5 的 3 个过滤器,输出形状为(无,3,128)。

然后我将最大池化应用于前一个第二维 (3) 结果,以获得“最重要的复杂时间步长”,期望输出大小:(None,1,128)

最后我连接了一个用于二元分类的密集层。

目前的网络架构在 keras 中实现如下:

model.add( Conv1D(padding = 'valid',filters = nfeatures,strides = 5,kernel_size = 5, 
                  activation = 'relu',input_shape = (timesteps,nfeatures)) )
model.add( MaxPooling1D() )
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
Run Code Online (Sandbox Code Playgroud)

问题是当我检查第一层 (conv1d) 的权重时,权重具有以下维度:[5,128,128] 和偏差 [128]。

预期的权重格式是:[5,1,128] 为什么是 5x128x128?,我只需要每个功能/通道的 5 个权重(内核大小)。

谢谢!

convolution deep-learning conv-neural-network keras tensorflow

1
推荐指数
1
解决办法
1601
查看次数

C++中的卷积实现

我想自己用C++实现2D卷积函数,而不使用filter2D()。我试图迭代输入图像和内核的所有像素,然后为 dst 的每个像素分配新值。但是,我收到了这个错误。

线程 1:EXC_BAD_ACCESS(代码=1,地址=0x0)

我发现这个错误告诉我正在访问 nullptr,但我无法解决问题。这是我的 C++ 代码。

cv::Mat_<float> spatialConvolution(const cv::Mat_<float>& src, const cv::Mat_<float>& kernel)
{
//    declare variables
    Mat_<float> dst;
    Mat_<float> flipped_kernel;
    float tmp = 0.0;

//    flip kernel
    flip(kernel, flipped_kernel, -1);

//    multiply and integrate
// input rows
    for(int i=0;i<src.rows;i++){
// input columns
        for(int j=0;j<src.cols;j++){
// kernel rows
            for(int k=0;k<flipped_kernel.rows;k++){
// kernel columns
                for(int l=0;l<flipped_kernel.cols;l++){
                    tmp += src.at<float>(i,j) * flipped_kernel.at<float>(k,l);
                }
            }
            dst.at<float>(i,j) = tmp;
        }
    }
       return dst.clone();
} 
Run Code Online (Sandbox Code Playgroud)

c++ opencv filter convolution

1
推荐指数
1
解决办法
2万
查看次数

PyTorch:使用 torch.nn.Conv2d 对单通道图像进行卷积

我正在尝试使用卷积层对灰度(单层)图像(存储为 numpy 数组)进行卷积。这是代码:

conv1 = torch.nn.Conv2d(in_channels = 1, out_channels = 1, kernel_size = 33)
tensor1 = torch.from_numpy(img_gray)
out_2d_np = conv1(tensor1)

out_2d_np = np.asarray(out_2d_np)
Run Code Online (Sandbox Code Playgroud)

我希望我的内核为 33x33,并且输出层的数量应等于输入层的数量,当图像的 RGB 通道相加时,输入层的数量为 1。运行时out_2d_np = conv1(tensor1)会产生以下运行时错误:

RuntimeError: 预期 4 维输入为 4 维权重 1 1 33 33,但得到了大小为 [246, 248] 的 2 维输入

我知道如何解决这个问题吗?我特别想使用torch.nn.Conv2d()类/函数。

预先感谢您的任何帮助!

convolution conv-neural-network pytorch tensor

1
推荐指数
1
解决办法
4774
查看次数

重现 MATLAB 的 imfilter 函数时出现问题

我想了解 MATLAB 的imfilter函数是如何工作的。

im = imread("cameraman.tif");

% Kernel for sharpening the image
kernel = [
     0 -1  0;
    -1  5 -1;
     0 -1  0];

im2 = zeros(size(im));

for y = 1 : size(im,1) - 3
    for x = 1 : size(im,2) - 3

        sum = 0;
        for ky = 1:3
            for kx = 1:3
                xx = x + kx - 1;
                yy = y + ky - 1;
                sum = sum + im(yy,xx)*kernel(ky,kx);
            end
        end
        
        im2(y,x) = sum; …
Run Code Online (Sandbox Code Playgroud)

matlab image-processing filter convolution

1
推荐指数
1
解决办法
224
查看次数

毫无意义地使用CUDA共享内存

我有两个版本的相同算法.它最初是卷积,但我修改它以减少它以检查我的瓶颈在哪里(注意每个循环只有一次访问全局内存):

__global__
void convolve (unsigned char * Md, float * Kd, unsigned char * Rd, int width, int height, int kernel_size, int tile_width, int channels){

int row = blockIdx.y*tile_width + threadIdx.y;
int col = blockIdx.x*tile_width + threadIdx.x;

int sum = 0;
int pixel;
int local_pixel;
int working_pixel;

int row_offset = (kernel_size/2)*(width+kernel_size-1);
int col_offset = kernel_size/2;

for(int color=0; color<channels; color++){

    pixel = color*width*height + row*width + col;
    local_pixel = color*(width+kernel_size-1)*(height+kernel_size-1) + row*(width+kernel_size-1) + col + row_offset + col_offset;
    if(row < height …
Run Code Online (Sandbox Code Playgroud)

memory shared cuda convolution

0
推荐指数
1
解决办法
543
查看次数

卷积张量流程教程,logit量表

我试图通过向cifar10.py添加一些代码来编辑我自己的模型,这就是问题所在.

在cifar10.py中,[tutorial] [1]说:

练习:推理的输出是非标准化的logits.尝试使用tf.nn.softmax()编辑网络体系结构以返回规范化预测.

所以我直接输入"local4"的输出tf.nn.softmax().这给了我缩放的 logits,这意味着所有logits的总和是1.

但是在loss函数中,cifar10.py代码使用:

tf.nn.sparse_softmax_cross_entropy_with_logits()
Run Code Online (Sandbox Code Playgroud)

和这个功能的描述说

警告:此操作需要未缩放的日志,因为它在内部执行logmax以提高效率.不要使用softmax的输出调用此op,因为它会产生不正确的结果.

此外,根据描述,作为上述函数的输入的logits必须具有[batch_size,num_classes]的形状,并且它意味着logits应该是未缩放的softmax,如示例代码计算unnormalized softmaxlogit,如下所示.

  # softmax, i.e. softmax(WX + b)
  with tf.variable_scope('softmax_linear') as scope:
    weights = _variable_with_weight_decay('weights', [192, NUM_CLASSES],
                                          stddev=1/192.0, wd=0.0)
    biases = _variable_on_cpu('biases', [NUM_CLASSES],
                              tf.constant_initializer(0.0))
    softmax_linear = tf.add(tf.matmul(local4, weights), biases, name=scope.name)
    _activation_summary(softmax_linear)
Run Code Online (Sandbox Code Playgroud)

这是否意味着我不必tf.nn.softmax在代码中使用?

convolution tensorflow

0
推荐指数
1
解决办法
560
查看次数

卷积神经网络与下采样?

读完这个主题后,我并不完全理解:神经网络中的“卷积”是否可以与简单的下采样或“锐化”功能相媲美?

你能把这个词分解成一个简单易懂的形象/类比吗?

编辑:在第一个答案之后改写:池化可以理解为权重矩阵的下采样吗?

machine-learning convolution neural-network deep-learning conv-neural-network

0
推荐指数
1
解决办法
2823
查看次数

了解 3D 卷积以及何时使用它?

我是卷积神经网络的新手,我正在学习 3D 卷积。我能理解的是,2D 卷积为我们提供了 XY 维度中低级特征之间的关系,而 3D 卷积有助于检测所有 3 维中的低级特征和它们之间的关系。

考虑使用 2D 卷积层来识别手写数字的 CNN。如果一个数字,比如 5,用不同的颜色书写:

在此处输入图片说明

严格的 2D CNN 是否会表现不佳(因为它们在 z 维度上属于不同的通道)?

另外,是否有使用 3D 卷积的实用的知名神经网络?

convolution neural-network conv-neural-network

0
推荐指数
1
解决办法
730
查看次数

为什么创建空白矩阵会返回null而不是0.0?

我有一个Java方法fill0s(),它将一个较小的矩阵输入到一个较大的矩阵中,据说填充了0:

public class PoolingFunctions {

    // Fill needed spaces with 0
    public static Double[][] fill0s(Double[][] image, int filter_size){
        int columns_remaining = filter_size - (image[0].length%filter_size);
        int rows_remaining = filter_size - (image.length%filter_size);
        // CREATE A MATRIX: HERE LIES THE PROBLEM: //////////////////////////////
        Double [][] blank_matrix = new Double [(image.length)+columns_remaining][(image[0].length)+rows_remaining];
            for (int i = 0; i<image.length; i++) {
                for (int j = 0; j<image[i].length; j++) {
                    blank_matrix[i][j] = image[i][j];
                }
            }

        return blank_matrix;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在调用此方法后:

public class MainPooling{
    public static void …
Run Code Online (Sandbox Code Playgroud)

java null matrix convolution conv-neural-network

-1
推荐指数
1
解决办法
131
查看次数