python 卷积计算,自定义卷积核,并将卷积后的结果保存为图片

版本python3.6
保存图片需要PIL,在 cmd 输入pip install pillow
以下是代码`

import numpy as np
import matplotlib.image as mpimg
from PIL import Image


# 代码功能:
# 对一幅3通道图像的一个尺度的卷积运算


def compute_conv(fm, kernel):
    [h, w] = fm.shape
    k = 3
    r = int(k / 2)
    padding_fm = np.zeros([h + 2, w + 2])  # , np.int)
    rs = np.zeros([h, w])  # , np.int)
    padding_fm[1:h + 1, 1:w + 1] = fm
    for i in range(1, h + 1):
        for j in range(1, w + 1):
            i0 = i - r
            i1 = i + r + 1
            j0 = j - r
            j1 = j + r + 1
            roi = padding_fm[i0:i1, j0:j1]
            rs[i - 1][j - 1] = np.sum(roi * kernel)
    return rs


# 定义卷积核
def kernel_i():
    weights_data = [
            [0, 0, 0],
            [0, 1, 0],
            [0, 0, 0]
    ]
    weights = np.asarray(weights_data)  # , np.int)
    return weights


def main():
    for i in range(c):
        l1 = temp[:, :, i]
        input = np.asarray(l1)  # , np.int)
        weights = kernel_i()  # 获取卷积核
        rs = compute_conv(input, weights)  # 卷积计算
        arr[:, :, i] = rs  # 把卷积后的结果传给新的数组

    # 把卷积后的结果保存为图片
    arr01 = np.array(arr, dtype=np.uint8)
    image = Image.fromarray(arr01, 'RGB')
    image.save('D:/01.jpg')
    # np.savetxt('D:/%d.txt' % (i+1), arr)  # 把每一个维度的矩阵分别保存为一个txt文本


img = mpimg.imread("D:/picture.jpg")
temp = np.asarray(img)   # , np.int)
[h, w, c] = temp.shape
arr = np.zeros((h, w, c), int)
main()
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elm(Extreme Learning Machine)是一种非常快速的机器学习算法,常用于分类和回归问题。Elm的核心思想是随机生成输入层与隐含层之间的权重和偏置,并使用非线性激活函数将输入数据映射到隐含层。隐含层与输出层之间的权重可以直接计算得出,而无需进行权重优化过程。 下面是一个使用Elm实现卷积分类器的Python代码示例: ```python import numpy as np def convert_to_image_matrix(data): # 将输入数据转换为图片矩阵 # 实现将数据转换为图片矩阵的代码 def relu(x): # ReLU激活函数 return np.maximum(0, x) def elm_convolution_classifier(train_data, train_labels, test_data): # 将输入数据转换为图片矩阵 train_images = convert_to_image_matrix(train_data) test_images = convert_to_image_matrix(test_data) # 定义隐含层节点数和卷积核数量 hidden_nodes = 1000 num_filters = 32 # 随机生成输入层到隐含层的权重和偏置 input_weights = np.random.rand(train_images.shape[1], hidden_nodes) hidden_bias = np.random.rand(hidden_nodes) # 将输入数据通过输入层到隐含层的映射 hidden_activations = relu(np.dot(train_images, input_weights) + hidden_bias) # 计算卷积核 filters = np.random.rand(num_filters, hidden_nodes) # 将隐含层到输出层的权重计算得出 output_weights = np.dot(filters, hidden_activations.T) # 预测测试数据的标签 test_predictions = np.dot(test_images, output_weights) return test_predictions # 使用示例 train_data = np.random.rand(100, 784) train_labels = np.random.randint(0, 10, 100) test_data = np.random.rand(50, 784) predictions = elm_convolution_classifier(train_data, train_labels, test_data) ``` 上述代码中,`convert_to_image_matrix`函数用于将输入数据转换为图片矩阵,实现方法根据具体问题进行自定义。`relu`函数为ReLU激活函数,通过`np.maximum`函数实现对输入的非线性映射。`elm_convolution_classifier`函数实现了卷积分类器的Elm算法。首先将训练数据和测试数据转换为图片矩阵,然后随机生成输入层到隐含层的权重和偏置,计算隐含层节点的激活值。接着随机生成卷积核,通过输入层到隐含层的映射计算隐含层到输出层的权重。最后,使用输出权重对测试数据进行预测并返回预测结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值