卷积是一种数学运算
应用场景:图像识别、卷积神经网络
本质:计算当前数值时,与之前的数值有关联,需要与之前的数值衰减后的量叠加
一维卷积
一维卷积运算过程
a = [1,2,3,4,5] #源数组
b = [8,7,6] #卷积核
#使用 b作为卷积核对a数组执行卷积运算的过程如下:
#数据准备:
0 0 1 2 3 4 5 0 0 #排一下源数组
6 7 8 #将卷积核 6 7 8与对应的 0 0 1相乘再相加,得到的结果 8 记在源数组的上面
#计算:
44 65 86 #有效卷积(value):6这个元素对最终值产生影响时称为有效卷积
23 44 65 86 59 30 #同维卷积(same):7这个元素对最终值产生影响时称为同维卷积
8 23 44 65 86 59 30 #这个技术称为完全卷积(full)
0 0 1 2 3 4 5 0 0
6 7 8
6 7 8 #将卷积核 6 7 8与对应的 0 1 2相乘再相加,得到的结果 23记在源数组的上面(本质是本次的计算累加了前面计算的缩减)
6 7 8 #继续上面的计算
6 7 8 #继续上面的计算
6 7 8
6 7 8
API
c = numpy.convolve(a,b,卷积类型)
实例1:基于卷积运算实现股票5日移动平均线
假设closing_prices是已知的收盘价数组,dates是已知的日期数组
import numpy as np
import matplotlib as mp
#生成卷积核: 5个 1/5,表示每天股价的权重相同
kernel = np.ones(5)/5
np.convolve(closing_prices,kernel,'valid')
#绘图
mp.plot(dates[4:],ma52,color='orangered',linewidth=7,alpha=0.5,label='MA5')
mp.legend()
mp.gcf().autofmt_xdate()
mp.show()
实例2:加权卷积:加权5日移动平均线
#通过以e为底的幂函数生成权重(即卷积核):[0.36 0.47 0.607 0.779]
kernel = np.exp(np.linspace(-1,0,5))
#卷积自己的运算规则,需要将卷积核翻转一下
kernel = kernel[::-1]
#对卷积核做归一化,使各个权重之和等于1
kernel /= kernel.sum()
ma53 = np.convolve(closing_prices,kernel,'valid')
#绘图
mp.plot(dates[4:],ma53,color='limegreen',linewidth=7,alpha=0.5,label='MA5-2')
mp.legend()
mp.gcf().autofmt_xdate()
mp.show()
本文深入解析卷积运算的本质及其在图像识别和卷积神经网络中的应用。从一维卷积出发,详细介绍卷积核如何与源数组进行运算,包括有效卷积、同维卷积和完全卷积的概念。并通过实例展示如何利用卷积运算实现股票移动平均线,包括常规和加权移动平均线的计算。
4103





