各位同学好,今天和大家分享一下如何使用 Tensorflow 复现轻量化神经网络 ShuffleNetV2

为了能将神经网络模型用于移动端(手机)和终端(安防监控、无人驾驶)的实时计算,通常这些设备计算能力有限,因此我们需要减少模型参数量、减小计算量、更少的内存访问量、更少的能耗MobileNet、ShuffleNet 等轻量化网络就非常适合于一些计算能力受限的设备,牺牲少量准确率换取更快的运算速度。

在之前的章节中,我详细介绍了 MobileNetV1 和 MobileNetV2 网络模型,今天介绍的 ShuffleNet 网络也会使用到 MobileNet 的深度可分离卷积。建议先看一下我的前两篇文章:

MobileNetV1:https://blog.csdn.net/dgvv4/article/details/123415708

MobileNetV2:https://blog.csdn.net/dgvv4/article/details/123417739

左图是各个神经网络模型的准确率--参数量散点图,越靠近左上角代表模型参数量少而且准确率高。右图单位参数量对准确率的贡献,ShuffleNet 的计算量和参数量很少,但是计算的效率很高,计算速度很快。


1. ShuffleNetV1 创新点

在讲 ShuffleNetV2 之前我们需要对 ShuffleNetV1 有一定的了解,这里主要介绍ShuffleNetV1的两个核心内容。(1)分组1x1卷积;(2)通道重排

1.1 分组卷积(Group Convolution)

(1)在标准卷积中输入有多少个通道,卷积核就有多少个通道

举个例子:若输入的图像shape为5x5x6,一个卷积核的shape为3x3x6,使用3个卷积核,得到的特征图shape为3x3x3。参数量 = 5x5x6x3 = 450

(2)在分组卷积中每个卷积核只处理部分通道。如下图,红色的卷积核只处理输入图像中红色的两个通道,绿色的卷积核只处理输入图像中间的两个绿色的通道,第三个卷积核只处理黄色的两个通道。此时,每个卷积核有两个通道,每个卷积核生成一个特征图

举个例子:若输入的图像shape为5x5x6,一个分组卷积核的shape为3x3x2,使用3个分组卷积核,得到的特征图shape为3x3x3。参数量 = 5x5x(6/3)x(3/3)x3 = 5x5x2x1x3 = 150 。可见,分成三组,参数量为原来的三分之一。

因此,分组卷积能够有效地降低参数量和计算量

(3)深度可分离卷积是分组卷积的一个特例。随着分组的组数不断增加,输入图像有多少个通道就分几组,每个卷积核处理一个通道的特征,每个卷积核生成一个特征图,输入图像有多少通道就生成多少张特征图,再堆叠起来。

深度可分离卷积详细内容,看我前一篇MobileNetV1的文章。


1.2 通道重排(Channel Shuffle)

分组卷积存在一个问题,各个分组之间相互独立,没有特征融合通道重排方法实现跨组的信息交融

如下图(a)所示,卷积核分三组,生成特征图也是三组,每组只在内部进行信息交互,组与组之间没有任何信息交融。

如图(b, c)所示,将每个组的第一份,收集起来作为下一组;每组的第二份收集起来作为下一组....这样就实现了跨组的信息交流。

举个例子来说,如下图。分组卷积生成的三组特征图,第一组1~4;第二组5~8;第三组9~12。先将特征图重塑,为三行N列的矩形。然后进行转置,变成N行三列。最后压平,从二维tensor变成一维tensor,每一组的特征图交叉组合在一起。实现各组之间的信息交融。


2. ShuffleNetV2 模型

2.1 四条轻量化网络的设计原则

(1)输入输出通道数相同时,内存访问量MAC最小

输出通道数对应的是卷积核的数量。比如输入图像的通道数是256个,那么卷积核个数最好也是256个。

(2)分组数过大的分组卷积会增加MAC

ShuffleNetV1使用的分组1x1卷积,减少了参数量、计算量,增大网络表达能力。但是增加了内存占用量。

(3)碎片化操作对并行加速(GPU)不友好

碎片化操作指多分枝、多通路,如Inception系列网络的过多的分支

(4)逐元素操作(残差网络求和、relu激活等)带来的内存和耗时不可忽略

如:避免使用残差求和,将原来的 layers.Add() 变成 layers.Concat()


2.2 网络主干结构

作者根据这四条原则设计出来 ShuffleNetV2 轻量化网络。如下图。

Channel Spilt 模块将输入图像的通道数平均分成两份,一份用于残差连接,一份用于特征提取。

Channel Shuffle 模块将堆叠的特征图的通道重新排序,实现各分组之间的特征融合。

在基本模块中,特征图size不变,通道数不变。在下采样模块中,特征图的长宽减半,通道数加倍。


3. ShuffleNetV2 代码复现

根据论文中给出的网络构架,搭建模型。其中 Stage模块一个ShuffleNetv2下采样模块若干个ShuffleNetv2基本模块 组成。输入图像的shape为 224x224x3。output channel列的几个宽度超参数,一般只用超参数=1那一列。FLOPs代表乘-加浮点运算次数


3.1 构建各个模块

(1)标准卷积模块

标准卷积模块是由 普通卷积+批标准化BN层+ReLU激活函数 构成

#(1)标准卷积块
def conv_block(input_tensor, filters, kernel_size, stride=1):# 卷积+批标准化+relu激活x = layers.Conv2D(filters, kernel_size, strides = stride,  # 步长padding = 'same',  # strides=1卷积过程中特征图size不变,strides=2卷积过程中size减半use_bias = False)(input_tensor)  # 有BN层就不需要偏置x = layers.BatchNormalization()(x)  # 批标准化x = layers.ReLU()(x)  # relu激活return x  # 返回一次标准卷积后的tensor

(2)深度可分离卷积模块

由2.2中的网络结构图可知,深度可分离卷积块只需要包含 3x3的深度卷积 和 批标准化BN层

#(2)深度可分离卷积块
def depthwise_conv_block(input_tensor, stride=1):# 深度可分离卷积+批标准化# 不需要传入卷积核个数,输入有几个通道,就有几个卷积核,每个卷积核负责一个通道x = layers.DepthwiseConv2D(kernel_size = (3,3),  # 深度卷积核size默认3*3strides = stride,  # 步长padding = 'same',  # strides=1卷积过程中特征图size不变,strides=2卷积过程中size减半use_bias = False)(input_tensor)  # 有BN层就不需要偏置x = layers.BatchNormalization()(x)  # 批标准化return x  # 返回深度可分离卷积后的tensor

(3)通道重排模块

Channel Shuffle 模块用于对两组堆叠在一起的特征图进行重新排列,实现各组之间的信息融合。

#(3)通道重排,跨组信息交融
def channel_shuffle(input_tensor, num=2): # 默认时2组特征:shortcut和卷积后的x# 先得到输入特征图的shape,b:batch size,h,w:一张图的size,c:通道数b, h, w, c = input_tensor.shape# 确定shape = [b, h, w, num, c//num]。通道维度原来是一个长为c的一维tensor,变成2行n列的矩阵# 在通道维度上将特征图reshape为2行n列的矩阵。x_reshaped = tf.reshape(input_tensor, [-1, h, w, num, c//num])# 确定转置的矩形的shape = [b, h, w, c//num, num]# 矩阵转置,最后两个维度从2行n列变成n行2列x_transposed = tf.transpose(x_reshaped, [0,1,2,4,3])# 重新排列,shotcut和x的通道像素交叉排列,通道维度重新变成一维tensoroutput = tf.reshape(x_transposed, [-1, h, w, c])return output  # 返回通道维度交叉排序后的tensor

(4)ShuffleNetV2 基本模块

步长为1时,先将输入特征图在通道维度上平均分成两份。如2.2中的结构图,左分支输入等于输出,右分支特征传递,将两个分支的结果堆叠在一起,通道数变成原始大小。

#(4)步长=1时的卷积块
def shufflent_unit_1(input_tensor, filters):# 首先将输入特征图在通道维度上平均分成两份:一部分用于残差连接,一部分卷积提取特征shortcut, x = tf.split(input_tensor, 2, axis=-1)  # axis指定轴# 现在shotcut和x的通道数都只有原来的二分之一# 1*1卷积+3*3深度卷积+1*1卷积x = conv_block(x, filters//2, kernel_size=(1,1), stride=1)  # 1*1卷积,通道数保持不变x = depthwise_conv_block(x, stride=1)  # 3*3深度卷积x = conv_block(x, filters//2, kernel_size=(1,1), stride=1)  # 1*1卷积跨通道信息融合# 堆叠shoutcut和x,要求两个tensor的size相同x = tf.concat([shortcut, x], axis=-1)  # 在通道维度上堆叠# 将堆叠后2组特征图,在通道维度上重新排列x = channel_shuffle(x)return x  # 返回步长为1时的卷积块输出的tensor

(5)ShuffleNetV2 下采样模块

步长为2时,输入图像不平分通道数。左分支先3*3深度卷积(步长=2),然后1*1卷积,输出特征图的长宽减半,通道数不变右分支先1*1卷积降维,然后3*3深度卷积(步长=2),再1*1卷积升维。

这里要注意左分支输出特征图数量+右分支输出特征图数量=下采样模块输出特征图数量

已知左分支输出特征图的通道数保持不变(in_channel),下采样模块输出特征图数量(out_channel)已给出,可计算得到右分支输出特征图的通道数,将它作为右分支最后一个1*1卷积的卷积核个数。

#(5)步长=2时(下采样)的卷积块
def shufflenet_unit_2(input_tensor, out_channel):# 输入特征图的通道数in_channel = input_tensor.shape[-1]# 首先将输入特征图复制一份,分别用于左右两个分支的卷积shortcut = input_tensor# ① 左分支的卷积部分==深度卷积+逐点卷积,输出特征图通道数等于原通道数shortcut = depthwise_conv_block(shortcut, stride=2)  # 特征图size减半shortcut = conv_block(shortcut, filters=in_channel, kernel_size=(1,1), stride=1)  # 输出特征图个数不变# ② 右分支==1*1卷积下降通道数+3*3深度卷积+1*1卷积上升通道数x = conv_block(input_tensor, in_channel//2, kernel_size=(1,1), stride=1)x = depthwise_conv_block(x, stride=2)# 右分支的通道数和左分支的通道数叠加==输出特征图的通道数out_channelx = conv_block(x, out_channel-in_channel, kernel_size=(1,1), stride=1)# ③ 左右分支的输出特征图在通道维度上堆叠,并且output.shape[-1]==out_channeloutput = tf.concat([shortcut, x], axis=-1)# ④ 堆叠后的2组特征在通道维度上重新排列output = channel_shuffle(output)return output  # 返回步长=2时的输出结果

(6)Stage 模块

一个Stage模块是由一个下采样模块,和多个基本模块组合而成的

#(6)构建shufflenet卷积块
# 一个shuffle卷积块是由一个shufflenet_unit_2下采样单元,和若干个shufflenet_unit_1特征传递单元构成
def stage(input_tensor, filters, n):   # filters代表输出通道数# 下采样单元x = shufflenet_unit_2(input_tensor, out_channel=filters)# 特征传递单元循环n次for i in range(n):x = shufflent_unit_1(x, filters=filters)return x  # 返回一个shufflenet卷积结果

3.2 完整代码展示

结合上文的分析,完整代码如下,代码中每行都有注释,有疑问的在评论区留言

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, Model#(1)标准卷积块
def conv_block(input_tensor, filters, kernel_size, stride=1):# 卷积+批标准化+relu激活x = layers.Conv2D(filters, kernel_size, strides = stride,  # 步长padding = 'same',  # strides=1卷积过程中特征图size不变,strides=2卷积过程中size减半use_bias = False)(input_tensor)  # 有BN层就不需要偏置x = layers.BatchNormalization()(x)  # 批标准化x = layers.ReLU()(x)  # relu激活return x  # 返回一次标准卷积后的tensor#(2)深度可分离卷积块
def depthwise_conv_block(input_tensor, stride=1):# 深度可分离卷积+批标准化# 不需要传入卷积核个数,输入有几个通道,就有几个卷积核,每个卷积核负责一个通道x = layers.DepthwiseConv2D(kernel_size = (3,3),  # 深度卷积核size默认3*3strides = stride,  # 步长padding = 'same',  # strides=1卷积过程中特征图size不变,strides=2卷积过程中size减半use_bias = False)(input_tensor)  # 有BN层就不需要偏置x = layers.BatchNormalization()(x)  # 批标准化return x  # 返回深度可分离卷积后的tensor#(3)通道重排,跨组信息交融
def channel_shuffle(input_tensor, num=2): # 默认时2组特征:shortcut和卷积后的x# 先得到输入特征图的shape,b:batch size,h,w:一张图的size,c:通道数b, h, w, c = input_tensor.shape# 确定shape = [b, h, w, num, c//num]。通道维度原来是一个长为c的一维tensor,变成2行n列的矩阵# 在通道维度上将特征图reshape为2行n列的矩阵。x_reshaped = tf.reshape(input_tensor, [-1, h, w, num, c//num])# 确定转置的矩形的shape = [b, h, w, c//num, num]# 矩阵转置,最后两个维度从2行n列变成n行2列x_transposed = tf.transpose(x_reshaped, [0,1,2,4,3])# 重新排列,shotcut和x的通道像素交叉排列,通道维度重新变成一维tensoroutput = tf.reshape(x_transposed, [-1, h, w, c])return output  # 返回通道维度交叉排序后的tensor#(4)步长=1时的卷积块
def shufflent_unit_1(input_tensor, filters):# 首先将输入特征图在通道维度上平均分成两份:一部分用于残差连接,一部分卷积提取特征shortcut, x = tf.split(input_tensor, 2, axis=-1)  # axis指定轴# 现在shotcut和x的通道数都只有原来的二分之一# 1*1卷积+3*3深度卷积+1*1卷积x = conv_block(x, filters//2, kernel_size=(1,1), stride=1)  # 1*1卷积,通道数保持不变x = depthwise_conv_block(x, stride=1)  # 3*3深度卷积x = conv_block(x, filters//2, kernel_size=(1,1), stride=1)  # 1*1卷积跨通道信息融合# 堆叠shoutcut和x,要求两个tensor的size相同x = tf.concat([shortcut, x], axis=-1)  # 在通道维度上堆叠# 将堆叠后2组特征图,在通道维度上重新排列x = channel_shuffle(x)return x  # 返回步长为1时的卷积块输出的tensor#(5)步长=2时(下采样)的卷积块
def shufflenet_unit_2(input_tensor, out_channel):# 输入特征图的通道数in_channel = input_tensor.shape[-1]# 首先将输入特征图复制一份,分别用于左右两个分支的卷积shortcut = input_tensor# ① 左分支的卷积部分==深度卷积+逐点卷积,输出特征图通道数等于原通道数shortcut = depthwise_conv_block(shortcut, stride=2)  # 特征图size减半shortcut = conv_block(shortcut, filters=in_channel, kernel_size=(1,1), stride=1)  # 输出特征图个数不变# ② 右分支==1*1卷积下降通道数+3*3深度卷积+1*1卷积上升通道数x = conv_block(input_tensor, in_channel//2, kernel_size=(1,1), stride=1)x = depthwise_conv_block(x, stride=2)# 右分支的通道数和左分支的通道数叠加==输出特征图的通道数out_channelx = conv_block(x, out_channel-in_channel, kernel_size=(1,1), stride=1)# ③ 左右分支的输出特征图在通道维度上堆叠,并且output.shape[-1]==out_channeloutput = tf.concat([shortcut, x], axis=-1)# ④ 堆叠后的2组特征在通道维度上重新排列output = channel_shuffle(output)return output  # 返回步长=2时的输出结果#(6)构建shufflenet卷积块
# 一个shuffle卷积块是由一个shufflenet_unit_2下采样单元,和若干个shufflenet_unit_1特征传递单元构成
def stage(input_tensor, filters, n):   # filters代表输出通道数# 下采样单元x = shufflenet_unit_2(input_tensor, out_channel=filters)# 特征传递单元循环n次for i in range(n):x = shufflent_unit_1(x, filters=filters)return x  # 返回一个shufflenet卷积结果#(7)构建网络模型
def ShuffleNet(input_shape, classes):# 构建网络输入的tensorinputs = keras.Input(shape=input_shape)# [224,224,3]==>[112,112,24]x = layers.Conv2D(filters=24, kernel_size=(3,3), strides=2, padding='same')(inputs)  # 普通卷积# [112,112,24]==>[56,56,24]x = layers.MaxPooling2D(pool_size=(3,3), strides=2, padding='same')(x)  # 最大池化# [56,56,24]==>[28,28,116]x = stage(x, filters=116, n=3)# [28,28,116]==>[14,14,232]x = stage(x, filters=232, n=7)# [14,14,232]==>[7,7,464]x = stage(x, filters=464, n=3)# [7,7,464]==>[7,7,1024]x = layers.Conv2D(filters=1024, kernel_size=(1,1), strides=1, padding='same')(x)  # 1*1普通卷积# [7,7,1024]==>[None,1024]x = layers.GlobalAveragePooling2D()(x)  # 在通道维度上全局平均池化# 按论文输出层使用全连接层,也可改为卷积层再Reshapelogits = layers.Dense(classes)(x)  # 为了网络稳定,训练时再使用Softmax函数# 完成网络架构model = Model(inputs, logits)return model  # 返回网络模型#(8)接收网络模型
if __name__ == '__main__':model = ShuffleNet(input_shape=[224,224,3],  # 输入图像的shapeclasses=1000)  # 图像分类类别model.summary()  # 查看网络结构

3.3 查看网络构架

通过 model.summary() 查看网络结构,可见 ShuffleNetV2 的参数量只有两百多万,对比 MobileNetV2 的三百多万的参数量,已经非常轻量化了。

Model: "model"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to
==================================================================================================
input_1 (InputLayer)            [(None, 224, 224, 3) 0
__________________________________________________________________________________________________
conv2d (Conv2D)                 (None, 112, 112, 24) 672         input_1[0][0]
__________________________________________________________________________________________________
max_pooling2d (MaxPooling2D)    (None, 56, 56, 24)   0           conv2d[0][0]
__________________________________________________________________________________________________
conv2d_2 (Conv2D)               (None, 56, 56, 12)   288         max_pooling2d[0][0]
__________________________________________________________________________________________________
batch_normalization_2 (BatchNor (None, 56, 56, 12)   48          conv2d_2[0][0]
__________________________________________________________________________________________________
re_lu_1 (ReLU)                  (None, 56, 56, 12)   0           batch_normalization_2[0][0]
__________________________________________________________________________________________________
depthwise_conv2d (DepthwiseConv (None, 28, 28, 24)   216         max_pooling2d[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_1 (DepthwiseCo (None, 28, 28, 12)   108         re_lu_1[0][0]
__________________________________________________________________________________________________
batch_normalization (BatchNorma (None, 28, 28, 24)   96          depthwise_conv2d[0][0]
__________________________________________________________________________________________________
batch_normalization_3 (BatchNor (None, 28, 28, 12)   48          depthwise_conv2d_1[0][0]
__________________________________________________________________________________________________
conv2d_1 (Conv2D)               (None, 28, 28, 24)   576         batch_normalization[0][0]
__________________________________________________________________________________________________
conv2d_3 (Conv2D)               (None, 28, 28, 92)   1104        batch_normalization_3[0][0]
__________________________________________________________________________________________________
batch_normalization_1 (BatchNor (None, 28, 28, 24)   96          conv2d_1[0][0]
__________________________________________________________________________________________________
batch_normalization_4 (BatchNor (None, 28, 28, 92)   368         conv2d_3[0][0]
__________________________________________________________________________________________________
re_lu (ReLU)                    (None, 28, 28, 24)   0           batch_normalization_1[0][0]
__________________________________________________________________________________________________
re_lu_2 (ReLU)                  (None, 28, 28, 92)   0           batch_normalization_4[0][0]
__________________________________________________________________________________________________
tf.concat (TFOpLambda)          (None, 28, 28, 116)  0           re_lu[0][0]                      re_lu_2[0][0]
__________________________________________________________________________________________________
tf.reshape (TFOpLambda)         (None, 28, 28, 2, 58 0           tf.concat[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose (TFOpLam (None, 28, 28, 58, 2 0           tf.reshape[0][0]
__________________________________________________________________________________________________
tf.reshape_1 (TFOpLambda)       (None, 28, 28, 116)  0           tf.compat.v1.transpose[0][0]
__________________________________________________________________________________________________
tf.split (TFOpLambda)           [(None, 28, 28, 58), 0           tf.reshape_1[0][0]
__________________________________________________________________________________________________
conv2d_4 (Conv2D)               (None, 28, 28, 58)   3364        tf.split[0][1]
__________________________________________________________________________________________________
batch_normalization_5 (BatchNor (None, 28, 28, 58)   232         conv2d_4[0][0]
__________________________________________________________________________________________________
re_lu_3 (ReLU)                  (None, 28, 28, 58)   0           batch_normalization_5[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_2 (DepthwiseCo (None, 28, 28, 58)   522         re_lu_3[0][0]
__________________________________________________________________________________________________
batch_normalization_6 (BatchNor (None, 28, 28, 58)   232         depthwise_conv2d_2[0][0]
__________________________________________________________________________________________________
conv2d_5 (Conv2D)               (None, 28, 28, 58)   3364        batch_normalization_6[0][0]
__________________________________________________________________________________________________
batch_normalization_7 (BatchNor (None, 28, 28, 58)   232         conv2d_5[0][0]
__________________________________________________________________________________________________
re_lu_4 (ReLU)                  (None, 28, 28, 58)   0           batch_normalization_7[0][0]
__________________________________________________________________________________________________
tf.concat_1 (TFOpLambda)        (None, 28, 28, 116)  0           tf.split[0][0]                   re_lu_4[0][0]
__________________________________________________________________________________________________
tf.reshape_2 (TFOpLambda)       (None, 28, 28, 2, 58 0           tf.concat_1[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_1 (TFOpL (None, 28, 28, 58, 2 0           tf.reshape_2[0][0]
__________________________________________________________________________________________________
tf.reshape_3 (TFOpLambda)       (None, 28, 28, 116)  0           tf.compat.v1.transpose_1[0][0]
__________________________________________________________________________________________________
tf.split_1 (TFOpLambda)         [(None, 28, 28, 58), 0           tf.reshape_3[0][0]
__________________________________________________________________________________________________
conv2d_6 (Conv2D)               (None, 28, 28, 58)   3364        tf.split_1[0][1]
__________________________________________________________________________________________________
batch_normalization_8 (BatchNor (None, 28, 28, 58)   232         conv2d_6[0][0]
__________________________________________________________________________________________________
re_lu_5 (ReLU)                  (None, 28, 28, 58)   0           batch_normalization_8[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_3 (DepthwiseCo (None, 28, 28, 58)   522         re_lu_5[0][0]
__________________________________________________________________________________________________
batch_normalization_9 (BatchNor (None, 28, 28, 58)   232         depthwise_conv2d_3[0][0]
__________________________________________________________________________________________________
conv2d_7 (Conv2D)               (None, 28, 28, 58)   3364        batch_normalization_9[0][0]
__________________________________________________________________________________________________
batch_normalization_10 (BatchNo (None, 28, 28, 58)   232         conv2d_7[0][0]
__________________________________________________________________________________________________
re_lu_6 (ReLU)                  (None, 28, 28, 58)   0           batch_normalization_10[0][0]
__________________________________________________________________________________________________
tf.concat_2 (TFOpLambda)        (None, 28, 28, 116)  0           tf.split_1[0][0]                 re_lu_6[0][0]
__________________________________________________________________________________________________
tf.reshape_4 (TFOpLambda)       (None, 28, 28, 2, 58 0           tf.concat_2[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_2 (TFOpL (None, 28, 28, 58, 2 0           tf.reshape_4[0][0]
__________________________________________________________________________________________________
tf.reshape_5 (TFOpLambda)       (None, 28, 28, 116)  0           tf.compat.v1.transpose_2[0][0]
__________________________________________________________________________________________________
tf.split_2 (TFOpLambda)         [(None, 28, 28, 58), 0           tf.reshape_5[0][0]
__________________________________________________________________________________________________
conv2d_8 (Conv2D)               (None, 28, 28, 58)   3364        tf.split_2[0][1]
__________________________________________________________________________________________________
batch_normalization_11 (BatchNo (None, 28, 28, 58)   232         conv2d_8[0][0]
__________________________________________________________________________________________________
re_lu_7 (ReLU)                  (None, 28, 28, 58)   0           batch_normalization_11[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_4 (DepthwiseCo (None, 28, 28, 58)   522         re_lu_7[0][0]
__________________________________________________________________________________________________
batch_normalization_12 (BatchNo (None, 28, 28, 58)   232         depthwise_conv2d_4[0][0]
__________________________________________________________________________________________________
conv2d_9 (Conv2D)               (None, 28, 28, 58)   3364        batch_normalization_12[0][0]
__________________________________________________________________________________________________
batch_normalization_13 (BatchNo (None, 28, 28, 58)   232         conv2d_9[0][0]
__________________________________________________________________________________________________
re_lu_8 (ReLU)                  (None, 28, 28, 58)   0           batch_normalization_13[0][0]
__________________________________________________________________________________________________
tf.concat_3 (TFOpLambda)        (None, 28, 28, 116)  0           tf.split_2[0][0]                 re_lu_8[0][0]
__________________________________________________________________________________________________
tf.reshape_6 (TFOpLambda)       (None, 28, 28, 2, 58 0           tf.concat_3[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_3 (TFOpL (None, 28, 28, 58, 2 0           tf.reshape_6[0][0]
__________________________________________________________________________________________________
tf.reshape_7 (TFOpLambda)       (None, 28, 28, 116)  0           tf.compat.v1.transpose_3[0][0]
__________________________________________________________________________________________________
conv2d_11 (Conv2D)              (None, 28, 28, 58)   6728        tf.reshape_7[0][0]
__________________________________________________________________________________________________
batch_normalization_16 (BatchNo (None, 28, 28, 58)   232         conv2d_11[0][0]
__________________________________________________________________________________________________
re_lu_10 (ReLU)                 (None, 28, 28, 58)   0           batch_normalization_16[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_5 (DepthwiseCo (None, 14, 14, 116)  1044        tf.reshape_7[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_6 (DepthwiseCo (None, 14, 14, 58)   522         re_lu_10[0][0]
__________________________________________________________________________________________________
batch_normalization_14 (BatchNo (None, 14, 14, 116)  464         depthwise_conv2d_5[0][0]
__________________________________________________________________________________________________
batch_normalization_17 (BatchNo (None, 14, 14, 58)   232         depthwise_conv2d_6[0][0]
__________________________________________________________________________________________________
conv2d_10 (Conv2D)              (None, 14, 14, 116)  13456       batch_normalization_14[0][0]
__________________________________________________________________________________________________
conv2d_12 (Conv2D)              (None, 14, 14, 116)  6728        batch_normalization_17[0][0]
__________________________________________________________________________________________________
batch_normalization_15 (BatchNo (None, 14, 14, 116)  464         conv2d_10[0][0]
__________________________________________________________________________________________________
batch_normalization_18 (BatchNo (None, 14, 14, 116)  464         conv2d_12[0][0]
__________________________________________________________________________________________________
re_lu_9 (ReLU)                  (None, 14, 14, 116)  0           batch_normalization_15[0][0]
__________________________________________________________________________________________________
re_lu_11 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_18[0][0]
__________________________________________________________________________________________________
tf.concat_4 (TFOpLambda)        (None, 14, 14, 232)  0           re_lu_9[0][0]                    re_lu_11[0][0]
__________________________________________________________________________________________________
tf.reshape_8 (TFOpLambda)       (None, 14, 14, 2, 11 0           tf.concat_4[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_4 (TFOpL (None, 14, 14, 116,  0           tf.reshape_8[0][0]
__________________________________________________________________________________________________
tf.reshape_9 (TFOpLambda)       (None, 14, 14, 232)  0           tf.compat.v1.transpose_4[0][0]
__________________________________________________________________________________________________
tf.split_3 (TFOpLambda)         [(None, 14, 14, 116) 0           tf.reshape_9[0][0]
__________________________________________________________________________________________________
conv2d_13 (Conv2D)              (None, 14, 14, 116)  13456       tf.split_3[0][1]
__________________________________________________________________________________________________
batch_normalization_19 (BatchNo (None, 14, 14, 116)  464         conv2d_13[0][0]
__________________________________________________________________________________________________
re_lu_12 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_19[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_7 (DepthwiseCo (None, 14, 14, 116)  1044        re_lu_12[0][0]
__________________________________________________________________________________________________
batch_normalization_20 (BatchNo (None, 14, 14, 116)  464         depthwise_conv2d_7[0][0]
__________________________________________________________________________________________________
conv2d_14 (Conv2D)              (None, 14, 14, 116)  13456       batch_normalization_20[0][0]
__________________________________________________________________________________________________
batch_normalization_21 (BatchNo (None, 14, 14, 116)  464         conv2d_14[0][0]
__________________________________________________________________________________________________
re_lu_13 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_21[0][0]
__________________________________________________________________________________________________
tf.concat_5 (TFOpLambda)        (None, 14, 14, 232)  0           tf.split_3[0][0]                 re_lu_13[0][0]
__________________________________________________________________________________________________
tf.reshape_10 (TFOpLambda)      (None, 14, 14, 2, 11 0           tf.concat_5[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_5 (TFOpL (None, 14, 14, 116,  0           tf.reshape_10[0][0]
__________________________________________________________________________________________________
tf.reshape_11 (TFOpLambda)      (None, 14, 14, 232)  0           tf.compat.v1.transpose_5[0][0]
__________________________________________________________________________________________________
tf.split_4 (TFOpLambda)         [(None, 14, 14, 116) 0           tf.reshape_11[0][0]
__________________________________________________________________________________________________
conv2d_15 (Conv2D)              (None, 14, 14, 116)  13456       tf.split_4[0][1]
__________________________________________________________________________________________________
batch_normalization_22 (BatchNo (None, 14, 14, 116)  464         conv2d_15[0][0]
__________________________________________________________________________________________________
re_lu_14 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_22[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_8 (DepthwiseCo (None, 14, 14, 116)  1044        re_lu_14[0][0]
__________________________________________________________________________________________________
batch_normalization_23 (BatchNo (None, 14, 14, 116)  464         depthwise_conv2d_8[0][0]
__________________________________________________________________________________________________
conv2d_16 (Conv2D)              (None, 14, 14, 116)  13456       batch_normalization_23[0][0]
__________________________________________________________________________________________________
batch_normalization_24 (BatchNo (None, 14, 14, 116)  464         conv2d_16[0][0]
__________________________________________________________________________________________________
re_lu_15 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_24[0][0]
__________________________________________________________________________________________________
tf.concat_6 (TFOpLambda)        (None, 14, 14, 232)  0           tf.split_4[0][0]                 re_lu_15[0][0]
__________________________________________________________________________________________________
tf.reshape_12 (TFOpLambda)      (None, 14, 14, 2, 11 0           tf.concat_6[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_6 (TFOpL (None, 14, 14, 116,  0           tf.reshape_12[0][0]
__________________________________________________________________________________________________
tf.reshape_13 (TFOpLambda)      (None, 14, 14, 232)  0           tf.compat.v1.transpose_6[0][0]
__________________________________________________________________________________________________
tf.split_5 (TFOpLambda)         [(None, 14, 14, 116) 0           tf.reshape_13[0][0]
__________________________________________________________________________________________________
conv2d_17 (Conv2D)              (None, 14, 14, 116)  13456       tf.split_5[0][1]
__________________________________________________________________________________________________
batch_normalization_25 (BatchNo (None, 14, 14, 116)  464         conv2d_17[0][0]
__________________________________________________________________________________________________
re_lu_16 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_25[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_9 (DepthwiseCo (None, 14, 14, 116)  1044        re_lu_16[0][0]
__________________________________________________________________________________________________
batch_normalization_26 (BatchNo (None, 14, 14, 116)  464         depthwise_conv2d_9[0][0]
__________________________________________________________________________________________________
conv2d_18 (Conv2D)              (None, 14, 14, 116)  13456       batch_normalization_26[0][0]
__________________________________________________________________________________________________
batch_normalization_27 (BatchNo (None, 14, 14, 116)  464         conv2d_18[0][0]
__________________________________________________________________________________________________
re_lu_17 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_27[0][0]
__________________________________________________________________________________________________
tf.concat_7 (TFOpLambda)        (None, 14, 14, 232)  0           tf.split_5[0][0]                 re_lu_17[0][0]
__________________________________________________________________________________________________
tf.reshape_14 (TFOpLambda)      (None, 14, 14, 2, 11 0           tf.concat_7[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_7 (TFOpL (None, 14, 14, 116,  0           tf.reshape_14[0][0]
__________________________________________________________________________________________________
tf.reshape_15 (TFOpLambda)      (None, 14, 14, 232)  0           tf.compat.v1.transpose_7[0][0]
__________________________________________________________________________________________________
tf.split_6 (TFOpLambda)         [(None, 14, 14, 116) 0           tf.reshape_15[0][0]
__________________________________________________________________________________________________
conv2d_19 (Conv2D)              (None, 14, 14, 116)  13456       tf.split_6[0][1]
__________________________________________________________________________________________________
batch_normalization_28 (BatchNo (None, 14, 14, 116)  464         conv2d_19[0][0]
__________________________________________________________________________________________________
re_lu_18 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_28[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_10 (DepthwiseC (None, 14, 14, 116)  1044        re_lu_18[0][0]
__________________________________________________________________________________________________
batch_normalization_29 (BatchNo (None, 14, 14, 116)  464         depthwise_conv2d_10[0][0]
__________________________________________________________________________________________________
conv2d_20 (Conv2D)              (None, 14, 14, 116)  13456       batch_normalization_29[0][0]
__________________________________________________________________________________________________
batch_normalization_30 (BatchNo (None, 14, 14, 116)  464         conv2d_20[0][0]
__________________________________________________________________________________________________
re_lu_19 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_30[0][0]
__________________________________________________________________________________________________
tf.concat_8 (TFOpLambda)        (None, 14, 14, 232)  0           tf.split_6[0][0]                 re_lu_19[0][0]
__________________________________________________________________________________________________
tf.reshape_16 (TFOpLambda)      (None, 14, 14, 2, 11 0           tf.concat_8[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_8 (TFOpL (None, 14, 14, 116,  0           tf.reshape_16[0][0]
__________________________________________________________________________________________________
tf.reshape_17 (TFOpLambda)      (None, 14, 14, 232)  0           tf.compat.v1.transpose_8[0][0]
__________________________________________________________________________________________________
tf.split_7 (TFOpLambda)         [(None, 14, 14, 116) 0           tf.reshape_17[0][0]
__________________________________________________________________________________________________
conv2d_21 (Conv2D)              (None, 14, 14, 116)  13456       tf.split_7[0][1]
__________________________________________________________________________________________________
batch_normalization_31 (BatchNo (None, 14, 14, 116)  464         conv2d_21[0][0]
__________________________________________________________________________________________________
re_lu_20 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_31[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_11 (DepthwiseC (None, 14, 14, 116)  1044        re_lu_20[0][0]
__________________________________________________________________________________________________
batch_normalization_32 (BatchNo (None, 14, 14, 116)  464         depthwise_conv2d_11[0][0]
__________________________________________________________________________________________________
conv2d_22 (Conv2D)              (None, 14, 14, 116)  13456       batch_normalization_32[0][0]
__________________________________________________________________________________________________
batch_normalization_33 (BatchNo (None, 14, 14, 116)  464         conv2d_22[0][0]
__________________________________________________________________________________________________
re_lu_21 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_33[0][0]
__________________________________________________________________________________________________
tf.concat_9 (TFOpLambda)        (None, 14, 14, 232)  0           tf.split_7[0][0]                 re_lu_21[0][0]
__________________________________________________________________________________________________
tf.reshape_18 (TFOpLambda)      (None, 14, 14, 2, 11 0           tf.concat_9[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_9 (TFOpL (None, 14, 14, 116,  0           tf.reshape_18[0][0]
__________________________________________________________________________________________________
tf.reshape_19 (TFOpLambda)      (None, 14, 14, 232)  0           tf.compat.v1.transpose_9[0][0]
__________________________________________________________________________________________________
tf.split_8 (TFOpLambda)         [(None, 14, 14, 116) 0           tf.reshape_19[0][0]
__________________________________________________________________________________________________
conv2d_23 (Conv2D)              (None, 14, 14, 116)  13456       tf.split_8[0][1]
__________________________________________________________________________________________________
batch_normalization_34 (BatchNo (None, 14, 14, 116)  464         conv2d_23[0][0]
__________________________________________________________________________________________________
re_lu_22 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_34[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_12 (DepthwiseC (None, 14, 14, 116)  1044        re_lu_22[0][0]
__________________________________________________________________________________________________
batch_normalization_35 (BatchNo (None, 14, 14, 116)  464         depthwise_conv2d_12[0][0]
__________________________________________________________________________________________________
conv2d_24 (Conv2D)              (None, 14, 14, 116)  13456       batch_normalization_35[0][0]
__________________________________________________________________________________________________
batch_normalization_36 (BatchNo (None, 14, 14, 116)  464         conv2d_24[0][0]
__________________________________________________________________________________________________
re_lu_23 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_36[0][0]
__________________________________________________________________________________________________
tf.concat_10 (TFOpLambda)       (None, 14, 14, 232)  0           tf.split_8[0][0]                 re_lu_23[0][0]
__________________________________________________________________________________________________
tf.reshape_20 (TFOpLambda)      (None, 14, 14, 2, 11 0           tf.concat_10[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_10 (TFOp (None, 14, 14, 116,  0           tf.reshape_20[0][0]
__________________________________________________________________________________________________
tf.reshape_21 (TFOpLambda)      (None, 14, 14, 232)  0           tf.compat.v1.transpose_10[0][0]
__________________________________________________________________________________________________
tf.split_9 (TFOpLambda)         [(None, 14, 14, 116) 0           tf.reshape_21[0][0]
__________________________________________________________________________________________________
conv2d_25 (Conv2D)              (None, 14, 14, 116)  13456       tf.split_9[0][1]
__________________________________________________________________________________________________
batch_normalization_37 (BatchNo (None, 14, 14, 116)  464         conv2d_25[0][0]
__________________________________________________________________________________________________
re_lu_24 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_37[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_13 (DepthwiseC (None, 14, 14, 116)  1044        re_lu_24[0][0]
__________________________________________________________________________________________________
batch_normalization_38 (BatchNo (None, 14, 14, 116)  464         depthwise_conv2d_13[0][0]
__________________________________________________________________________________________________
conv2d_26 (Conv2D)              (None, 14, 14, 116)  13456       batch_normalization_38[0][0]
__________________________________________________________________________________________________
batch_normalization_39 (BatchNo (None, 14, 14, 116)  464         conv2d_26[0][0]
__________________________________________________________________________________________________
re_lu_25 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_39[0][0]
__________________________________________________________________________________________________
tf.concat_11 (TFOpLambda)       (None, 14, 14, 232)  0           tf.split_9[0][0]                 re_lu_25[0][0]
__________________________________________________________________________________________________
tf.reshape_22 (TFOpLambda)      (None, 14, 14, 2, 11 0           tf.concat_11[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_11 (TFOp (None, 14, 14, 116,  0           tf.reshape_22[0][0]
__________________________________________________________________________________________________
tf.reshape_23 (TFOpLambda)      (None, 14, 14, 232)  0           tf.compat.v1.transpose_11[0][0]
__________________________________________________________________________________________________
conv2d_28 (Conv2D)              (None, 14, 14, 116)  26912       tf.reshape_23[0][0]
__________________________________________________________________________________________________
batch_normalization_42 (BatchNo (None, 14, 14, 116)  464         conv2d_28[0][0]
__________________________________________________________________________________________________
re_lu_27 (ReLU)                 (None, 14, 14, 116)  0           batch_normalization_42[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_14 (DepthwiseC (None, 7, 7, 232)    2088        tf.reshape_23[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_15 (DepthwiseC (None, 7, 7, 116)    1044        re_lu_27[0][0]
__________________________________________________________________________________________________
batch_normalization_40 (BatchNo (None, 7, 7, 232)    928         depthwise_conv2d_14[0][0]
__________________________________________________________________________________________________
batch_normalization_43 (BatchNo (None, 7, 7, 116)    464         depthwise_conv2d_15[0][0]
__________________________________________________________________________________________________
conv2d_27 (Conv2D)              (None, 7, 7, 232)    53824       batch_normalization_40[0][0]
__________________________________________________________________________________________________
conv2d_29 (Conv2D)              (None, 7, 7, 232)    26912       batch_normalization_43[0][0]
__________________________________________________________________________________________________
batch_normalization_41 (BatchNo (None, 7, 7, 232)    928         conv2d_27[0][0]
__________________________________________________________________________________________________
batch_normalization_44 (BatchNo (None, 7, 7, 232)    928         conv2d_29[0][0]
__________________________________________________________________________________________________
re_lu_26 (ReLU)                 (None, 7, 7, 232)    0           batch_normalization_41[0][0]
__________________________________________________________________________________________________
re_lu_28 (ReLU)                 (None, 7, 7, 232)    0           batch_normalization_44[0][0]
__________________________________________________________________________________________________
tf.concat_12 (TFOpLambda)       (None, 7, 7, 464)    0           re_lu_26[0][0]                   re_lu_28[0][0]
__________________________________________________________________________________________________
tf.reshape_24 (TFOpLambda)      (None, 7, 7, 2, 232) 0           tf.concat_12[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_12 (TFOp (None, 7, 7, 232, 2) 0           tf.reshape_24[0][0]
__________________________________________________________________________________________________
tf.reshape_25 (TFOpLambda)      (None, 7, 7, 464)    0           tf.compat.v1.transpose_12[0][0]
__________________________________________________________________________________________________
tf.split_10 (TFOpLambda)        [(None, 7, 7, 232),  0           tf.reshape_25[0][0]
__________________________________________________________________________________________________
conv2d_30 (Conv2D)              (None, 7, 7, 232)    53824       tf.split_10[0][1]
__________________________________________________________________________________________________
batch_normalization_45 (BatchNo (None, 7, 7, 232)    928         conv2d_30[0][0]
__________________________________________________________________________________________________
re_lu_29 (ReLU)                 (None, 7, 7, 232)    0           batch_normalization_45[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_16 (DepthwiseC (None, 7, 7, 232)    2088        re_lu_29[0][0]
__________________________________________________________________________________________________
batch_normalization_46 (BatchNo (None, 7, 7, 232)    928         depthwise_conv2d_16[0][0]
__________________________________________________________________________________________________
conv2d_31 (Conv2D)              (None, 7, 7, 232)    53824       batch_normalization_46[0][0]
__________________________________________________________________________________________________
batch_normalization_47 (BatchNo (None, 7, 7, 232)    928         conv2d_31[0][0]
__________________________________________________________________________________________________
re_lu_30 (ReLU)                 (None, 7, 7, 232)    0           batch_normalization_47[0][0]
__________________________________________________________________________________________________
tf.concat_13 (TFOpLambda)       (None, 7, 7, 464)    0           tf.split_10[0][0]                re_lu_30[0][0]
__________________________________________________________________________________________________
tf.reshape_26 (TFOpLambda)      (None, 7, 7, 2, 232) 0           tf.concat_13[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_13 (TFOp (None, 7, 7, 232, 2) 0           tf.reshape_26[0][0]
__________________________________________________________________________________________________
tf.reshape_27 (TFOpLambda)      (None, 7, 7, 464)    0           tf.compat.v1.transpose_13[0][0]
__________________________________________________________________________________________________
tf.split_11 (TFOpLambda)        [(None, 7, 7, 232),  0           tf.reshape_27[0][0]
__________________________________________________________________________________________________
conv2d_32 (Conv2D)              (None, 7, 7, 232)    53824       tf.split_11[0][1]
__________________________________________________________________________________________________
batch_normalization_48 (BatchNo (None, 7, 7, 232)    928         conv2d_32[0][0]
__________________________________________________________________________________________________
re_lu_31 (ReLU)                 (None, 7, 7, 232)    0           batch_normalization_48[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_17 (DepthwiseC (None, 7, 7, 232)    2088        re_lu_31[0][0]
__________________________________________________________________________________________________
batch_normalization_49 (BatchNo (None, 7, 7, 232)    928         depthwise_conv2d_17[0][0]
__________________________________________________________________________________________________
conv2d_33 (Conv2D)              (None, 7, 7, 232)    53824       batch_normalization_49[0][0]
__________________________________________________________________________________________________
batch_normalization_50 (BatchNo (None, 7, 7, 232)    928         conv2d_33[0][0]
__________________________________________________________________________________________________
re_lu_32 (ReLU)                 (None, 7, 7, 232)    0           batch_normalization_50[0][0]
__________________________________________________________________________________________________
tf.concat_14 (TFOpLambda)       (None, 7, 7, 464)    0           tf.split_11[0][0]                re_lu_32[0][0]
__________________________________________________________________________________________________
tf.reshape_28 (TFOpLambda)      (None, 7, 7, 2, 232) 0           tf.concat_14[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_14 (TFOp (None, 7, 7, 232, 2) 0           tf.reshape_28[0][0]
__________________________________________________________________________________________________
tf.reshape_29 (TFOpLambda)      (None, 7, 7, 464)    0           tf.compat.v1.transpose_14[0][0]
__________________________________________________________________________________________________
tf.split_12 (TFOpLambda)        [(None, 7, 7, 232),  0           tf.reshape_29[0][0]
__________________________________________________________________________________________________
conv2d_34 (Conv2D)              (None, 7, 7, 232)    53824       tf.split_12[0][1]
__________________________________________________________________________________________________
batch_normalization_51 (BatchNo (None, 7, 7, 232)    928         conv2d_34[0][0]
__________________________________________________________________________________________________
re_lu_33 (ReLU)                 (None, 7, 7, 232)    0           batch_normalization_51[0][0]
__________________________________________________________________________________________________
depthwise_conv2d_18 (DepthwiseC (None, 7, 7, 232)    2088        re_lu_33[0][0]
__________________________________________________________________________________________________
batch_normalization_52 (BatchNo (None, 7, 7, 232)    928         depthwise_conv2d_18[0][0]
__________________________________________________________________________________________________
conv2d_35 (Conv2D)              (None, 7, 7, 232)    53824       batch_normalization_52[0][0]
__________________________________________________________________________________________________
batch_normalization_53 (BatchNo (None, 7, 7, 232)    928         conv2d_35[0][0]
__________________________________________________________________________________________________
re_lu_34 (ReLU)                 (None, 7, 7, 232)    0           batch_normalization_53[0][0]
__________________________________________________________________________________________________
tf.concat_15 (TFOpLambda)       (None, 7, 7, 464)    0           tf.split_12[0][0]                re_lu_34[0][0]
__________________________________________________________________________________________________
tf.reshape_30 (TFOpLambda)      (None, 7, 7, 2, 232) 0           tf.concat_15[0][0]
__________________________________________________________________________________________________
tf.compat.v1.transpose_15 (TFOp (None, 7, 7, 232, 2) 0           tf.reshape_30[0][0]
__________________________________________________________________________________________________
tf.reshape_31 (TFOpLambda)      (None, 7, 7, 464)    0           tf.compat.v1.transpose_15[0][0]
__________________________________________________________________________________________________
conv2d_36 (Conv2D)              (None, 7, 7, 1024)   476160      tf.reshape_31[0][0]
__________________________________________________________________________________________________
global_average_pooling2d (Globa (None, 1024)         0           conv2d_36[0][0]
__________________________________________________________________________________________________
dense (Dense)                   (None, 1000)         1025000     global_average_pooling2d[0][0]
==================================================================================================
Total params: 2,216,440
Trainable params: 2,203,236
Non-trainable params: 13,204
__________________________________________________________________________________________________

【神经网络】(13) ShuffleNetV2 代码复现,网络解析,附Tensorflow完整代码相关推荐

  1. 【神经网络】(12) MobileNetV2 代码复现,网络解析,附Tensorflow完整代码

    各位同学好,今天和大家分享一下如何使用 Tensorflow 复现谷歌轻量化神经网络 MobileNetV2. 在上一篇中我介绍了MobileNetV1,探讨了深度可分离卷积,感兴趣的可以看一下:ht ...

  2. 基于卷积神经网络的手写数字识别(附数据集+完整代码+操作说明)

    基于卷积神经网络的手写数字识别(附数据集+完整代码+操作说明) 配置环境 1.前言 2.问题描述 3.解决方案 4.实现步骤 4.1数据集选择 4.2构建网络 4.3训练网络 4.4测试网络 4.5图 ...

  3. 【神经网络】(11) 轻量化网络MobileNetV1代码复现、解析,附Tensorflow完整代码

    各位同学好,今天和大家分享一下如何使用 Tensorflow 复现轻量化神经网络模型 MobileNetV1.为了能将神经网络模型用于移动端(手机)和终端(安防监控.无人驾驶)的实时计算,通常这些设备 ...

  4. 【神经网络】(14) MnasNet 代码复现,网络解析,附Tensorflow完整代码

    各位同学好,今天和大家分享一下如何使用 Tensorflow 复现谷歌轻量化神经网络 MnasNet  通常而言,移动端(手机)和终端(安防监控.无人驾驶)上的设备计算能力有限,无法搭载庞大的神经网络 ...

  5. 【神经网络】(19) ConvNeXt 代码复现,网络解析,附Tensorflow完整代码

    各位同学好,今天和大家分享一下如何使用 Tensorflow 构建 ConvNeXt 卷积神经网络模型. 论文地址:https://arxiv.org/pdf/2201.03545.pdf 完整代码在 ...

  6. 【神经网络】(17) EfficientNet 代码复现,网络解析,附Tensorflow完整代码

    各位同学好,今天和大家分享一下如何使用 Tensorflow 复现 EfficientNet 卷积神经网络模型. EfficientNet 的网络结构和 MobileNetV3 比较相似,建议大家在学 ...

  7. 【神经网络】(16) MobileNetV3 代码复现,网络解析,附Tensorflow完整代码

    各位同学好,今天和大家分享一下如何使用 Tensorflow 构建 MobileNetV3 轻量化网络模型. MobileNetV3 做了如下改动(1)更新了V2中的逆转残差结构:(2)使用NAS搜索 ...

  8. 【神经网络】(15) Xception 代码复现,网络解析,附Tensorflow完整代码

    各位同学好,今天和大家分享一下如何使用 Tensorflow 构建 Xception 神经网络模型. 在前面章节中,我已经介绍了很多种轻量化卷积神经网络模型,感兴趣的可以看一下:https://blo ...

  9. 【神经网络】(18) EfficientNetV2 代码复现,网络解析,附Tensorflow完整代码

    各位同学好,今天和大家分享一下如何使用 Tensorflow 搭建 EfficientNetV2 卷积神经网络模型. EfficientNetV2 在 EfficientNetV1 的基础上进行了改进 ...

最新文章

  1. Java并发编程:Thread类的使用
  2. 串口调试神器之Docklight
  3. HTML基础_Day01
  4. C/S+P2P网络模型(一)--聊天
  5. 初学Java该学哪些知识?这6大知识必学
  6. python批量读取文件夹的图片并处理成模型输入格式
  7. java 如何把源码导出为jar包,以及如何使用导出的jar包
  8. 工具-eclipse-hibernate关于快速生成*.hbm.xml文件,与bean文件的操作,不使用hibernate tool解决办法之一,主要为了快速开发,写的小工具
  9. 【医疗】疫情下的医院信息化短板如何补足?
  10. springboot listener_看完这份springboot 全套面试提升宝典,面试不带怕的
  11. 数据结构上机实践第四周项目5 - 猴子选大王
  12. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)
  13. 【转】JAVA成长之路
  14. (X)HTML Strict 下的嵌套规则
  15. IT公司、软件公司资质
  16. mybatis获取map中的key和value
  17. python中的抽象类
  18. 用Python画樱花树的代码
  19. 用计算机做图画ppt模板,装逼|如何用一张图片做出一份高颜值的PPT模板
  20. 【算法】贪心算法:LeetCode 714 买卖股票的最佳时机含手续费 、LeetCode 968 监控二叉树

热门文章

  1. Android Read-only file system
  2. Error: Default interface methods are only supported starting with Android N (--min-api 24): java.uti
  3. Android studio 自动导入(全部)包 import
  4. 请给出一个Scala RDD的HelloWorld例子
  5. .Net Core快速创建Windows服务
  6. HTTP协议详解(真的很经典)
  7. Android窗口管理服务WindowManagerService计算窗口Z轴位置的过程分析
  8. 把mysql 中的字符gb2312 改为gbk的方法
  9. ((ios开发学习笔记九)) Simple TableView 实现(附 实例源码)
  10. 关于内网linux系统如果安装nodejs,npm,express,mongodb,forever等