手动实现卷积操作

本文介绍了手动实现图像卷积的操作,包括SAME模式下的补0处理和卷积核的应用,详细解析了程序的关键部分。
摘要由CSDN通过智能技术生成

图像卷积操作

程序

import numpy as np
from matplotlib import pyplot as plt
import tensorflow as tf
from io import BytesIO
from PIL import Image
import base64
import pylab



def conv2d(input, filter, stride, padding):
    # batch x height x width x channels
    in_s = input.shape
    # height x width x in_channels x out_channels
    f_s = filter.shape

    '''assert condition:
    ===>
    if not condition:
        raise AssertionError()
    '''
    assert len(in_s) == 4, 'input size rank 4 required!'
    assert len(f_s) == 4, 'filter size rank 4 required!'
    assert f_s[2] == in_s[3], 'intput channels not match filter channels.'
    assert f_s[0] >= stride and f_s[1] >&
手动实现二维卷积核,我们首先需要了解卷积的工作原理。卷积操作的目的是将一个滤波器(也称为卷积核)在输入的图像上滑动,并对每个滑动位置的局部区域进行加权求和,从而得到一个输出特征图。 首先,我们需要准备输入图像和卷积核。假设输入图像是NxN大小的,卷积核大小为KxK,我们先创建一个大小为NxN的二维数组来表示输入图像,并用随机数初始化。接下来,我们创建一个大小为KxK的二维数组作为卷积核。 然后,我们需要遍历输入图像的每个位置,并在每个位置上进行卷积操作。对于每个位置,我们取与卷积核大小相同的局部区域,并将该区域与卷积核进行按元素相乘,并将结果求和。这个求和结果就是在当前位置上卷积的输出值。 最后,我们将所有卷积的输出值放入一个新的二维数组中,这个数组的大小为(N-K+1)x(N-K+1)。这个输出数组就是经过卷积操作后得到的特征图。 在Python中,我们可以使用循环来实现上述过程。具体代码如下: ```python import numpy as np def manual_convolution(input_image, kernel): N, _ = input_image.shape K, _ = kernel.shape output_size = N - K + 1 output = np.zeros((output_size, output_size)) for i in range(output_size): for j in range(output_size): output[i, j] = np.sum(input_image[i:i+K, j:j+K] * kernel) return output # 生成输入图像和卷积核 N = 5 K = 3 input_image = np.random.random((N, N)) kernel = np.random.random((K, K)) # 手动进行二维卷积操作 output = manual_convolution(input_image, kernel) print("输出特征图:") print(output) ``` 以上代码首先生成了一个5x5的随机输入图像和一个3x3的随机卷积核,然后调用`manual_convolution`函数进行手动实现的二维卷积操作。最后,输出得到的特征图。 请注意,手动实现的二维卷积操作只是一种简化的方式,如果需要高效地进行卷积操作,建议使用已经优化过的卷积函数,如PyTorch中的`torch.nn.functional.conv2d`。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值