鱼C论坛

 找回密码
 立即注册
查看: 1321|回复: 0

[技术交流] 卷积原理

[复制链接]
发表于 2018-11-25 09:36:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 alltolove 于 2018-11-25 09:40 编辑

        这里说的卷积是卷积神经网络里的卷积不是数学上的。在卷积神经网络里卷积层是其中一个层,这个原理很难理解,因为我们在计算卷积神经网络里矩阵的维度一般超过3维,而我们人脑的思维通常是2维的,一旦超过3维以上就会觉得很抽象,看着就像毕加索的画一样。
        先拿灰度图作为例子,灰度图就是一个2维的矩阵比较省事。需要先创建一个小矩阵(这个矩阵可以先初始化成一个随机的矩阵)又叫卷积核,这个卷积核可以是任何大小,然后与灰度图上每个元素挨个相乘再相加,如图:
conv.jpg
        最后得到一个叫做特征图的新矩阵,新矩阵的维度要比原来的小很多,然后再对新矩阵进行卷积,最后得到一个非常小的矩阵。我们再通过矩阵乘法给他变成一个数或者想要的形状(这层就不叫卷积层了)。
        通常我们会创建多个卷积核,比如用2个卷积核,用第一个卷积核跟灰度图卷积,再用第二个卷积核跟灰度图做卷积,作出来的特征图就是2个。这2个特征图再继续跟多个卷积核做卷积,这样我们的特征图就会原来越多,特征图的个数又叫做深度,所以卷积神经网络又被称为深度学习。
        以下为卷积层的代码:
import numpy as np
from sklearn.datasets import load_sample_images
import tensorflow as tf
import matplotlib.pyplot as plt
#读取样本
dataset=np.array(load_sample_images().images,dtype=np.float32)
print(dataset.shape)
batch_size,height,width,channels=dataset.shape
#创建2个卷积核
filters_test=np.zeros(shape=(7,7,channels,2),dtype=np.float32)
filters_test[:,3,:,0]=1
filters_test[3,:,:,1]=1
#创建一个卷积层
X=tf.placeholder(tf.float32,shape=(None,height,width,channels))
convolution=tf.nn.conv2d(X,filter=filters_test,strides=[1,2,2,1],padding="SAME")

with tf.Session() as sess:
    output=sess.run(convolution,feed_dict={X:dataset})
%matplotlib inline
plt.imshow(output[1,:,:,0])#画出第二张图的第一张卷积后的特征图
plt.show()

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 10:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表