卷积神经网络卷积计算具体过程?

看了很多资料,三维卷积的计算都是如图一所示,但是自己上次验证的结果却不满足图一的运算规则,今天手动验证了一下,三维卷积的运算规则就是按图一所示。只能说python对矩阵的计算应该还不够强大吧,哎,或者是自己代码写错了。。。
对于卷积神经网络中的计算,大部分人所知道的计算如图一所示:卷积核中的各参数与图像矩阵相应位置的数值相乘后再求和。但是实际计算时图像往往是rgb图像,即图像有三个通道,每张输入图像有三个二维矩阵(也说图像的深度为3),而且卷积核的数量也不止一个,所以在实际计算中是每个卷积核分别与矩阵的不同通道计算再加和,还是卷积核与所以通道同时计算,还是有其它的计算规则呢?有些人给出的解释如图二所示,为了验证图二的卷积计算过程用tensorflow(tf.nn.conv2d())进行了实验,但是实验结果却和图二不一致,反而更像是按图三的计算规则进行的,请大神们给予指导

在图一这里插入图片描述
图一
在图二这里插入图片描述
图二

经实验得到的卷积计算规则:
每一个(共五个:自己选取的数量)卷积核中的每一个通道(三个:由输入图像的通道数决定)分别与输入图像的三个通道相乘加和,也就是每个卷积核进行了3x3=9次运算加和后得到特征图中的一个像素点。
图三在这里插入图片描述
图三(2)
在这里插入图片描述
图三(b)
以下是验证过程:
实验用输入图像:(图像尺寸:28x28x3)
在这里插入图片描述
借助tensorflow对图像进行卷积操作,代码如下:

在这里插入import tensorflow as tf
from skimage import io
import numpy as np
np.set_printoptions(threshold=10000000)
def weight_variable(shape):     #定义卷积核
    inital=tf.truncated_normal(shape,dtype=tf.float32)
    return tf.Variable(inital)

def conv2d(x,w):  #定义卷积操作
    return tf.nn.conv2d(x,w,strides=[1,1,1,1],padding='VALID')

image=io.imread('./bike.jpg')  #读取图像,得到图像矩阵 28*28*3
xs=tf.cast(image,dtype=tf.float32)  #转换图像矩阵格式
x_image=tf.reshape(xs,[-1,28,28,3])  #改变图像尺寸
weight=weight_variable([3,3,3,5])    #生成权重参数 3*3*3*5:前两个3表示二维卷积核的尺寸,第三个3表示输入图像矩阵的深度,也是生成卷积核的深度,5表示卷积核的数量
sess=tf.Session()
sess.run(tf.global_variables_initializer()) #初始化
print('weight:',sess.run(weight))   #输出权重值
print(weight.shape)  #输出权重矩阵尺寸
res=sess.run(conv2d(x_image,weight))  #对图形进行卷积操作
print('feature_map:',res)      #输出卷积后的图像矩阵

输入的图像是rgb图,将生成的图像矩阵提取到表格中,得到“三个二维矩阵”,如图所示:
R通道矩阵:
在这里插入图片描述
G通道矩阵:
在这里插入图片描述
B通道矩阵:
在这里插入图片描述
weights:(3x3x3x5)
结合下面的卷积核矩阵:第一个3对应3个“[[[ ]]]”,第二个3对应每个“[[[ ]]]”中的3个“[[ ]]”,第3个三对应每个“[[ ]]”中的3个“[ ]”,5对应每个“[ ]”中的5个数值。3x3x3x5表示有5个3x3x3的卷积核(因为输入图像是3,所以每个卷积核的深度是3)。
在这里插入图片描述
通过卷积核矩阵,提取第一个卷积核的值到表格中(三个通道,所以三个表格。)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于得到的特征图(26x26x5)矩阵太长,下面只放出每个(共5个)特征图的第一行的各列(其中第一列为第一张特征图第一行的各列,共26列):
在这里插入图片描述
取特征图中的两个数进行验证(标绿的数字):
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190604193247309.png
经过计算,发现计算规则更接近于文章开头图三所示的规则。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值