马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 alltolove 于 2018-11-25 09:40 编辑
这里说的卷积是卷积神经网络里的卷积不是数学上的。在卷积神经网络里卷积层是其中一个层,这个原理很难理解,因为我们在计算卷积神经网络里矩阵的维度一般超过3维,而我们人脑的思维通常是2维的,一旦超过3维以上就会觉得很抽象,看着就像毕加索的画一样。
先拿灰度图作为例子,灰度图就是一个2维的矩阵比较省事。需要先创建一个小矩阵(这个矩阵可以先初始化成一个随机的矩阵)又叫卷积核,这个卷积核可以是任何大小,然后与灰度图上每个元素挨个相乘再相加,如图:
最后得到一个叫做特征图的新矩阵,新矩阵的维度要比原来的小很多,然后再对新矩阵进行卷积,最后得到一个非常小的矩阵。我们再通过矩阵乘法给他变成一个数或者想要的形状(这层就不叫卷积层了)。
通常我们会创建多个卷积核,比如用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()
|