简单学习【tensorflow】中实现卷积、池化的api调用

一、概念

(1)卷积(CNN)

  卷积神经网络(CNN)是深度学习中十分重要的一种算法。卷积是一种数学计算方法,实际上是在卷积核(类似于滤波器,是一个含权重的模板)和输入数据共同覆盖部分上,对应位置相乘再求和

卷积神经网络实际操作中在输入数据上按照步长进行滑动,进行卷积操作后得到卷积特征(即卷积操作过后的输出值)。

(2)池化

  池化也称为下采样。简单来说就是将特征矩阵分为若干小的矩阵块,在每个矩阵块中选择出一个数据代替这个区域,从而降低特征矩阵的维度,压缩特征矩阵。池化层往往位于卷积层后面,可以改善结果(不易出现过拟合)。一般池化窗口是不重复的。一般池化分为Max Pooling(最大值池化)和Average Pooling(平均值池化),即在矩阵块中选出该块max值或是该块的均值来代替这个区域。

(3)tensorflow

  tensor-张量,tensorflow-学习系统,谷歌张量流图。tensorflow可以理解为一个编程系统,里面有各种分工和方法。在tensorflow中编程有其自己的逻辑和方法,“图、tensor、会话、节点”等等都代表着其各自的意义。①图是用于搭建网络的工具,相当于工厂。②图的节点(也就是操作op)是用于计算的,相当于工厂中的生产部门。③会话(session)是用于执行节点的部分,相当于生产部门的部长。④tensor张量是指输入的数据(n维数组),节点的输入或输出,相当于工厂加工的原材料。⑤占位符定义了形状和数据类型,并不填充。用于训练,相当于投放原材料的地方。⑥变量维护状态,不跟随流动。一般指权重、偏置等,相当于员工,通过不断的训练可以达到更好的效果。

  一般的执行过程是:创建图-打开会话,执行生产操作-训练过程-保存模型-恢复模型、预测

二、实现卷积神经网络操作(CNN)

  先导入包:

import numpy as np 
import tensorflow as tf
a=np.array([1.0,1,4,2,3,3],dtype=np.float).reshape(1,2,3)#输入数组
a_tensor=tf.constant(a,dtype=tf.float32,shape=(1,2,3))#建立一个tensor
ops_conv=tf.layers.conv1d(inputs=a_tensor,filters=6,kernel_size=2,strides=1) #建一个一维卷积 #卷积的滤波器在第一次初始化过后就会进行训练,不需要进行输出
ops_init=tf.global
_variables_initializer() #初始化一次卷积模板
ops_pooling=tf.layers.max_pooling1d(inputs=a,pool_size=2,strides=1) #操作是沿着竖轴的 最大池化
ops_poolingt=tf.layers.average_pooling1d(inputs=a,pool_size=2,strides=1)#均值池化

with tf.Session() as sess:     #在对话中运行,并输出结果查看
  sess.run(ops_init)
  print(sess.run(a_tensor))
  print(sess.run(ops_conv))
  print(sess.run(ops_conv).shape)
  print(sess.run(ops_pooling))
  print(sess.run(ops_poolingt))

通过简单的api调用,初步理解了tensorflow的流程和卷积、池化等概念。CNN的学习中必须加强理解“轴”的概念。
这里采用的是tensorflow中的tf.layers.conv1d,还有tf.nn.conv1d可以使用。建议使用tf.layers.conv1d()而不是tf.nn.conv1d(),因为layers层结构比nn接口更高级,使用更方便。
关于两者具体的区别,可以参考:https://blog.csdn.net/luoganttcc/article/details/93034404

官方api文档地址:https://tensorflow.google.cn/versions?hl=zh-cn
中文:https://www.w3cschool.cn/tensorflow_python/tensorflow_python-p6qw2t3y.html
 

你可能感兴趣的:(简单学习【tensorflow】中实现卷积、池化的api调用)