2022-03-04
,了解有关机器学习和深度学习的更多信息!
稀疏交互
生物学家Huber和在早期对猫视觉皮层的研究中发现,视觉皮层中存在一些对输入空间,即图像中没有影响的细胞。的子区域非常敏感,我们称之为感受野。在神经网络中,稀疏交互是下一层的节点只连接到上一层的一些节点的操作。稀疏交互可以显着减少神经网络中的参数数量。
左侧是全连接的,隐藏节点需要所有输入;右边是稀疏交互,隐藏层节点只接受一个区域节点的输入。
稀疏交互的实现
以MNIST数据集为例,实现稀疏交互,输出对应图片。
MNIST 原图:
为了执行部分连接,有两个重要的参数可供选择:
1.局部区域的大小
局部区域的大小,先以5*5的局部区域为例:
2.局部特征提取次数
可以对局部区域进行多次特征提取,可以选择局部特征提取的次数。首先以5次提取为例。
3.步长
确定局部区域大小后,可以一次平滑移动一个像素,也可以每隔N个像素移动一次。
如图:
也可以使用不同的特征提取器对同一区域提取多个特征,如图所示:
4.边缘填充
在进行部分连接的过程中,如果不进行边缘填充,图片的维度会发生变化,如图:
4*4的图片已经在本地连接了3*3,尺寸发生了变化。
边的两种处理方式:
权重分享价值分享的由来
为了减少网络中的参数数量,另一种方法是共享参数。每组参数都可以看作是一个特征提取器,即使图像有一定的偏移量,同样的一组参数仍然可以提取出对应的特征。
实现本地连接和权重共享
如下图所示:
为了演示局部连接和权重共享在特征提取中的作用,下面将使用稀疏交互中常用的一组权重进行边缘提取。
就是这个矩阵的权重:
[[-1,-1,-1],
[-1,8,-1],
[-1,-1,-1]]
使用的函数对 MNIST 数据集进行卷积操作。因为这部分代码涉及到很多维度相关的操作,后面会在卷积网络部分详细讲解。这段代码单独实现了卷积功能:
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as plt
#引入 MNIST 数据集
mnist = input_data.read_data_sets("/tmp/data/", one_hot=False)
#选取训练集中的第 1 个图像的矩阵
mnist_one=mnist.train.images[0]
plt.subplot(121)
plt.imshow(mnist_one.reshape((28,28)), cmap=plt.cm.gray)
#输出图片的维度,结果是:(784,)
print(mnist_one.shape)
#因为原始的数据是长度是 784 向量,需要转换成 1*28*28*1 的矩阵。
mnist_one_image=mnist_one.reshape((1,28,28,1))
#输出矩阵的维度
print(mnist_one_image.shape)
#滤波器参数
filter_array=np.asarray([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])
#滤波器维度
print(filter_array.shape)
#调整滤波器维度
filter_tensor=filter_array.reshape((3,3,1,1))
#卷机操作
conv_image_tensor=tf.nn.convolution(mnist_one_image,filter=tf.to_float(filter_tensor),padding="SAME")
#返回的张量维度
print(conv_image_tensor.shape)
#调整为二维图片
conv_image=tf.reshape(conv_image_tensor,[28,28])
with tf.Session() as sess:
#获得张量的值
conv_image=sess.run(conv_image)
plt.subplot(122)
#使用 matplotlib 输出为图片
plt.imshow(conv_image, cmap=plt.cm.gray)
plt.show()
池化池简介
除了前面两种方法,现实生活中数据量大,事情复杂的时候,我们总想抓住重点。在图像中,我们可以选择一个区域中的一个重要点。
一般选择数值最大的点作为这个区域的代表:
如图:
这个池化选择一个2*2的区域,留下最大值的点,步长为2。原来4*4的图像矩阵经过池化后变成2*2的图像矩阵。手写数字识别
下一步将以MNIST数据集为例,使用卷积层和池化层实现手写数字识别的卷积神经网络,并输出卷积和池化效果。
数据准备
MNIST数据集可以直接从网站的THE MNIST下载。
网址:
train–idx3-ubyte.gz:训练集图片
train–idx1-ubyte.gz:训练集列索引
p>
t10k–idx3-ubyte.gz: 测试集图片
t10k–idx1-ubyte.gz:测试集列索引
与加载MNIST数据库相关的,可以在程序运行时直接加载。
代码如下:
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as pyplot
#引入 MNIST 数据集
mnist = input_data.read_data_sets("/tmp/data/", one_hot=False)
#选取训练集中的第 1 个图像的矩阵
mnist_one=mnist.train.images[0]
#输出图片的维度,结果是:(784,)
print(mnist_one.shape)
#因为原始的数据是长度是 784 向量,需要转换成 28*28 的矩阵。
mnist_one_image=mnist_one.reshape((28,28))
#输出矩阵的维度
print(mnist_one_image.shape)
#使用 matplotlib 输出为图片
pyplot.imshow(mnist_one_image)
pyplot.show()
代码的输出是:
1.单个手写数字图片的尺寸:
(784,)
2.转换成二维矩阵后的打印结果:
(28, 28)
3.使用输出作为图片
本文来自,对深度学习感兴趣的朋友,欢迎关注我们的网站!
分类:
技术要点:
相关文章:
暂无评论内容