本文主要是介绍05 TensorFlow 2.0:CNN总结及实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
浮云爱蹉跎 流光怕寂寞
填残篇脉络 续断章因果
问今生旅途几时交错
前尘灯火 隔世传说
《流光卷》
卷积层
发现特征轮廓,实现特征提取。数据稀疏交互,参数共享(因为样本存在局部相关的特性),参数大幅下降。为了保证输入输出shape一致,可采用padding。深层,习得更高级的特征。
激活层
卷积层发现特征之后,激活层,有种使得重要特征更突出,不重要特征为0或者更小的意思(Relu负的值=0)。还有一种解释是,非线性变换,空间维度扭曲,这样就可以在高维表征/区分数据特征。
池化层
下采样,一般2x2的过滤器maxpooling,4个点变1个,最大特征凸显,减少卷积核尺寸(长度和宽度改变了,深度没变),权重参数的数目减少到了75%。一定程度提高空间不变性,比如说平移不变性,尺度不变性,形变不变性(降采样特性),控制过拟合。
全连接层
对学习到的特征进行结果的概率映射(多分类softmax保证输出P为0~1且概率和=1)。也就是这里解释说的“分类器”作用。因全连接大幅增加了参数,目前有用其他代替全连接的策略,可搜搜。
动手搭建一个
CIFAR-100数据集CNN搭建
import tensorflow as tf
import getConfig
gConfig={}
gConfig=getConfig.get_config(config_file='config.ini')class cnnModel(object):#初始化函数,将dropout的失效概率初始化def __init__(self,rate):self.rate=ratedef createModel(self):#容器model = tf.keras.Sequential()#使用双层卷积结构的方式提取图像特征,第一层双层卷积使用使用3*3的卷积核,输出维度是64,全局使用he_normal进行kernel_initializer,激活函数使用relumodel.add(tf.keras.layers.Conv2D(64, 3, kernel_initializer='he_normal', strides=1, activation='relu', padding='same',input_shape=(32,32,3),name="conv1"))model.add(tf.keras.layers.Conv2D(64, 3, kernel_initializer='he_normal', strides=1, activation='relu', padding='same',name="conv2"))#使用tf.keras.layers.MaxPool2D搭建神经网络的池化层,使用最大值池化策略,将2*2局域的像素使用一个最大值代替,步幅为2,padding使用valid策略model.add(tf.keras.layers.MaxPool2D((2, 2), strides=2, padding='valid', name="pool1"))#叠加一层Dropout层,提高泛化性,降低神经网络的复杂度model.add(tf.keras.layers.Dropout(rate=self.rate, name="d1"))# 使用batchnormalization对上一层的输出数据进行归一化model.add(tf.keras.layers.BatchNormalization(
这篇关于05 TensorFlow 2.0:CNN总结及实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!