日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

發(fā)布時間:2023/11/27 生活经验 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【神经网络】(13) ShuffleNetV2 代码复现,网络解析,附Tensorflow完整代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

各位同學(xué)好,今天和大家分享一下如何使用 Tensorflow 復(fù)現(xiàn)輕量化神經(jīng)網(wǎng)絡(luò) ShuffleNetV2

為了能將神經(jīng)網(wǎng)絡(luò)模型用于移動端(手機(jī))和終端(安防監(jiān)控、無人駕駛)的實(shí)時計算,通常這些設(shè)備計算能力有限,因此我們需要減少模型參數(shù)量、減小計算量、更少的內(nèi)存訪問量、更少的能耗MobileNet、ShuffleNet 等輕量化網(wǎng)絡(luò)就非常適合于一些計算能力受限的設(shè)備,犧牲少量準(zhǔn)確率換取更快的運(yùn)算速度。

在之前的章節(jié)中,我詳細(xì)介紹了 MobileNetV1 和 MobileNetV2 網(wǎng)絡(luò)模型,今天介紹的 ShuffleNet 網(wǎng)絡(luò)也會使用到 MobileNet 的深度可分離卷積。建議先看一下我的前兩篇文章:

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

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

左圖是各個神經(jīng)網(wǎng)絡(luò)模型的準(zhǔn)確率--參數(shù)量散點(diǎn)圖,越靠近左上角代表模型參數(shù)量少而且準(zhǔn)確率高。右圖單位參數(shù)量對準(zhǔn)確率的貢獻(xiàn),ShuffleNet 的計算量和參數(shù)量很少,但是計算的效率很高,計算速度很快。

???


1. ShuffleNetV1 創(chuàng)新點(diǎn)

在講 ShuffleNetV2 之前我們需要對 ShuffleNetV1 有一定的了解,這里主要介紹ShuffleNetV1的兩個核心內(nèi)容。(1)分組1x1卷積;(2)通道重排

1.1 分組卷積(Group?Convolution)

(1)在標(biāo)準(zhǔn)卷積中輸入有多少個通道,卷積核就有多少個通道

舉個例子:若輸入的圖像shape為5x5x6,一個卷積核的shape為3x3x6,使用3個卷積核,得到的特征圖shape為3x3x3。參數(shù)量 = 5x5x6x3 = 450

(2)在分組卷積中每個卷積核只處理部分通道。如下圖,紅色的卷積核只處理輸入圖像中紅色的兩個通道,綠色的卷積核只處理輸入圖像中間的兩個綠色的通道,第三個卷積核只處理黃色的兩個通道。此時,每個卷積核有兩個通道,每個卷積核生成一個特征圖

舉個例子:若輸入的圖像shape為5x5x6,一個分組卷積核的shape為3x3x2,使用3個分組卷積核,得到的特征圖shape為3x3x3。參數(shù)量 = 5x5x(6/3)x(3/3)x3?= 5x5x2x1x3 = 150 。可見,分成三組,參數(shù)量為原來的三分之一。

因此,分組卷積能夠有效地降低參數(shù)量和計算量

(3)深度可分離卷積是分組卷積的一個特例。隨著分組的組數(shù)不斷增加,輸入圖像有多少個通道就分幾組,每個卷積核處理一個通道的特征,每個卷積核生成一個特征圖,輸入圖像有多少通道就生成多少張?zhí)卣鲌D,再堆疊起來。

深度可分離卷積詳細(xì)內(nèi)容,看我前一篇MobileNetV1的文章。


1.2 通道重排(Channel Shuffle)

分組卷積存在一個問題,各個分組之間相互獨(dú)立,沒有特征融合通道重排方法實(shí)現(xiàn)跨組的信息交融

如下圖(a)所示,卷積核分三組,生成特征圖也是三組,每組只在內(nèi)部進(jìn)行信息交互,組與組之間沒有任何信息交融。

如圖(b, c)所示,將每個組的第一份,收集起來作為下一組;每組的第二份收集起來作為下一組....這樣就實(shí)現(xiàn)了跨組的信息交流。

舉個例子來說,如下圖。分組卷積生成的三組特征圖,第一組1~4;第二組5~8;第三組9~12。先將特征圖重塑,為三行N列的矩形。然后進(jìn)行轉(zhuǎn)置,變成N行三列。最后壓平,從二維tensor變成一維tensor,每一組的特征圖交叉組合在一起。實(shí)現(xiàn)各組之間的信息交融。


2. ShuffleNetV2 模型

2.1 四條輕量化網(wǎng)絡(luò)的設(shè)計原則

(1)輸入輸出通道數(shù)相同時,內(nèi)存訪問量MAC最小

輸出通道數(shù)對應(yīng)的是卷積核的數(shù)量。比如輸入圖像的通道數(shù)是256個,那么卷積核個數(shù)最好也是256個。

(2)分組數(shù)過大的分組卷積會增加MAC

ShuffleNetV1使用的分組1x1卷積,減少了參數(shù)量、計算量,增大網(wǎng)絡(luò)表達(dá)能力。但是增加了內(nèi)存占用量。

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

碎片化操作指多分枝、多通路,如Inception系列網(wǎng)絡(luò)的過多的分支

(4)逐元素操作(殘差網(wǎng)絡(luò)求和、relu激活等)帶來的內(nèi)存和耗時不可忽略

如:避免使用殘差求和,將原來的 layers.Add() 變成 layers.Concat()


2.2 網(wǎng)絡(luò)主干結(jié)構(gòu)

作者根據(jù)這四條原則設(shè)計出來 ShuffleNetV2 輕量化網(wǎng)絡(luò)。如下圖。

Channel Spilt 模塊將輸入圖像的通道數(shù)平均分成兩份,一份用于殘差連接,一份用于特征提取。

Channel Shuffle 模塊將堆疊的特征圖的通道重新排序,實(shí)現(xiàn)各分組之間的特征融合。

在基本模塊中,特征圖size不變,通道數(shù)不變。在下采樣模塊中,特征圖的長寬減半,通道數(shù)加倍。


3. ShuffleNetV2 代碼復(fù)現(xiàn)

根據(jù)論文中給出的網(wǎng)絡(luò)構(gòu)架,搭建模型。其中 Stage模塊一個ShuffleNetv2下采樣模塊若干個ShuffleNetv2基本模塊 組成。輸入圖像的shape為 224x224x3。output channel列的幾個寬度超參數(shù),一般只用超參數(shù)=1那一列。FLOPs代表乘-加浮點(diǎn)運(yùn)算次數(shù)


3.1 構(gòu)建各個模塊

(1)標(biāo)準(zhǔn)卷積模塊

標(biāo)準(zhǔn)卷積模塊是由 普通卷積+批標(biāo)準(zhǔn)化BN層+ReLU激活函數(shù) 構(gòu)成

#(1)標(biāo)準(zhǔn)卷積塊
def conv_block(input_tensor, filters, kernel_size, stride=1):# 卷積+批標(biāo)準(zhǔn)化+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)  # 批標(biāo)準(zhǔn)化x = layers.ReLU()(x)  # relu激活return x  # 返回一次標(biāo)準(zhǔn)卷積后的tensor

(2)深度可分離卷積模塊

由2.2中的網(wǎng)絡(luò)結(jié)構(gòu)圖可知,深度可分離卷積塊只需要包含 3x3的深度卷積 和 批標(biāo)準(zhǔn)化BN層

#(2)深度可分離卷積塊
def depthwise_conv_block(input_tensor, stride=1):# 深度可分離卷積+批標(biāo)準(zhǔn)化# 不需要傳入卷積核個數(shù),輸入有幾個通道,就有幾個卷積核,每個卷積核負(fù)責(zé)一個通道x = layers.DepthwiseConv2D(kernel_size = (3,3),  # 深度卷積核size默認(rèn)3*3strides = stride,  # 步長padding = 'same',  # strides=1卷積過程中特征圖size不變,strides=2卷積過程中size減半use_bias = False)(input_tensor)  # 有BN層就不需要偏置x = layers.BatchNormalization()(x)  # 批標(biāo)準(zhǔn)化return x  # 返回深度可分離卷積后的tensor

(3)通道重排模塊

Channel Shuffle 模塊用于對兩組堆疊在一起的特征圖進(jìn)行重新排列,實(shí)現(xiàn)各組之間的信息融合。

#(3)通道重排,跨組信息交融
def channel_shuffle(input_tensor, num=2): # 默認(rèn)時2組特征:shortcut和卷積后的x# 先得到輸入特征圖的shape,b:batch size,h,w:一張圖的size,c:通道數(shù)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])# 確定轉(zhuǎn)置的矩形的shape = [b, h, w, c//num, num]# 矩陣轉(zhuǎn)置,最后兩個維度從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 基本模塊

當(dāng)步長為1時,先將輸入特征圖在通道維度上平均分成兩份。如2.2中的結(jié)構(gòu)圖,左分支輸入等于輸出,右分支特征傳遞,將兩個分支的結(jié)果堆疊在一起,通道數(shù)變成原始大小。

#(4)步長=1時的卷積塊
def shufflent_unit_1(input_tensor, filters):# 首先將輸入特征圖在通道維度上平均分成兩份:一部分用于殘差連接,一部分卷積提取特征shortcut, x = tf.split(input_tensor, 2, axis=-1)  # axis指定軸# 現(xiàn)在shotcut和x的通道數(shù)都只有原來的二分之一# 1*1卷積+3*3深度卷積+1*1卷積x = conv_block(x, filters//2, kernel_size=(1,1), stride=1)  # 1*1卷積,通道數(shù)保持不變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 下采樣模塊

當(dāng)步長為2時,輸入圖像不平分通道數(shù)。左分支先3*3深度卷積(步長=2),然后1*1卷積,輸出特征圖的長寬減半,通道數(shù)不變右分支先1*1卷積降維,然后3*3深度卷積(步長=2),再1*1卷積升維。

這里要注意左分支輸出特征圖數(shù)量+右分支輸出特征圖數(shù)量=下采樣模塊輸出特征圖數(shù)量

已知左分支輸出特征圖的通道數(shù)保持不變(in_channel),下采樣模塊輸出特征圖數(shù)量(out_channel)已給出,可計算得到右分支輸出特征圖的通道數(shù),將它作為右分支最后一個1*1卷積的卷積核個數(shù)。

#(5)步長=2時(下采樣)的卷積塊
def shufflenet_unit_2(input_tensor, out_channel):# 輸入特征圖的通道數(shù)in_channel = input_tensor.shape[-1]# 首先將輸入特征圖復(fù)制一份,分別用于左右兩個分支的卷積shortcut = input_tensor# ① 左分支的卷積部分==深度卷積+逐點(diǎn)卷積,輸出特征圖通道數(shù)等于原通道數(shù)shortcut = depthwise_conv_block(shortcut, stride=2)  # 特征圖size減半shortcut = conv_block(shortcut, filters=in_channel, kernel_size=(1,1), stride=1)  # 輸出特征圖個數(shù)不變# ② 右分支==1*1卷積下降通道數(shù)+3*3深度卷積+1*1卷積上升通道數(shù)x = conv_block(input_tensor, in_channel//2, kernel_size=(1,1), stride=1)x = depthwise_conv_block(x, stride=2)# 右分支的通道數(shù)和左分支的通道數(shù)疊加==輸出特征圖的通道數(shù)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時的輸出結(jié)果

(6)Stage 模塊

一個Stage模塊是由一個下采樣模塊,和多個基本模塊組合而成的

#(6)構(gòu)建shufflenet卷積塊
# 一個shuffle卷積塊是由一個shufflenet_unit_2下采樣單元,和若干個shufflenet_unit_1特征傳遞單元構(gòu)成
def stage(input_tensor, filters, n):   # filters代表輸出通道數(shù)# 下采樣單元x = shufflenet_unit_2(input_tensor, out_channel=filters)# 特征傳遞單元循環(huán)n次for i in range(n):x = shufflent_unit_1(x, filters=filters)return x  # 返回一個shufflenet卷積結(jié)果

3.2 完整代碼展示

結(jié)合上文的分析,完整代碼如下,代碼中每行都有注釋,有疑問的在評論區(qū)留言

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, Model#(1)標(biāo)準(zhǔn)卷積塊
def conv_block(input_tensor, filters, kernel_size, stride=1):# 卷積+批標(biāo)準(zhǔn)化+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)  # 批標(biāo)準(zhǔn)化x = layers.ReLU()(x)  # relu激活return x  # 返回一次標(biāo)準(zhǔn)卷積后的tensor#(2)深度可分離卷積塊
def depthwise_conv_block(input_tensor, stride=1):# 深度可分離卷積+批標(biāo)準(zhǔn)化# 不需要傳入卷積核個數(shù),輸入有幾個通道,就有幾個卷積核,每個卷積核負(fù)責(zé)一個通道x = layers.DepthwiseConv2D(kernel_size = (3,3),  # 深度卷積核size默認(rèn)3*3strides = stride,  # 步長padding = 'same',  # strides=1卷積過程中特征圖size不變,strides=2卷積過程中size減半use_bias = False)(input_tensor)  # 有BN層就不需要偏置x = layers.BatchNormalization()(x)  # 批標(biāo)準(zhǔn)化return x  # 返回深度可分離卷積后的tensor#(3)通道重排,跨組信息交融
def channel_shuffle(input_tensor, num=2): # 默認(rèn)時2組特征:shortcut和卷積后的x# 先得到輸入特征圖的shape,b:batch size,h,w:一張圖的size,c:通道數(shù)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])# 確定轉(zhuǎn)置的矩形的shape = [b, h, w, c//num, num]# 矩陣轉(zhuǎn)置,最后兩個維度從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指定軸# 現(xiàn)在shotcut和x的通道數(shù)都只有原來的二分之一# 1*1卷積+3*3深度卷積+1*1卷積x = conv_block(x, filters//2, kernel_size=(1,1), stride=1)  # 1*1卷積,通道數(shù)保持不變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):# 輸入特征圖的通道數(shù)in_channel = input_tensor.shape[-1]# 首先將輸入特征圖復(fù)制一份,分別用于左右兩個分支的卷積shortcut = input_tensor# ① 左分支的卷積部分==深度卷積+逐點(diǎn)卷積,輸出特征圖通道數(shù)等于原通道數(shù)shortcut = depthwise_conv_block(shortcut, stride=2)  # 特征圖size減半shortcut = conv_block(shortcut, filters=in_channel, kernel_size=(1,1), stride=1)  # 輸出特征圖個數(shù)不變# ② 右分支==1*1卷積下降通道數(shù)+3*3深度卷積+1*1卷積上升通道數(shù)x = conv_block(input_tensor, in_channel//2, kernel_size=(1,1), stride=1)x = depthwise_conv_block(x, stride=2)# 右分支的通道數(shù)和左分支的通道數(shù)疊加==輸出特征圖的通道數(shù)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時的輸出結(jié)果#(6)構(gòu)建shufflenet卷積塊
# 一個shuffle卷積塊是由一個shufflenet_unit_2下采樣單元,和若干個shufflenet_unit_1特征傳遞單元構(gòu)成
def stage(input_tensor, filters, n):   # filters代表輸出通道數(shù)# 下采樣單元x = shufflenet_unit_2(input_tensor, out_channel=filters)# 特征傳遞單元循環(huán)n次for i in range(n):x = shufflent_unit_1(x, filters=filters)return x  # 返回一個shufflenet卷積結(jié)果#(7)構(gòu)建網(wǎng)絡(luò)模型
def ShuffleNet(input_shape, classes):# 構(gòu)建網(wǎng)絡(luò)輸入的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)  # 為了網(wǎng)絡(luò)穩(wěn)定,訓(xùn)練時再使用Softmax函數(shù)# 完成網(wǎng)絡(luò)架構(gòu)model = Model(inputs, logits)return model  # 返回網(wǎng)絡(luò)模型#(8)接收網(wǎng)絡(luò)模型
if __name__ == '__main__':model = ShuffleNet(input_shape=[224,224,3],  # 輸入圖像的shapeclasses=1000)  # 圖像分類類別model.summary()  # 查看網(wǎng)絡(luò)結(jié)構(gòu)

3.3 查看網(wǎng)絡(luò)構(gòu)架

通過 model.summary() 查看網(wǎng)絡(luò)結(jié)構(gòu),可見 ShuffleNetV2 的參數(shù)量只有兩百多萬,對比 MobileNetV2 的三百多萬的參數(shù)量,已經(jīng)非常輕量化了。

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
__________________________________________________________________________________________________

總結(jié)

以上是生活随笔為你收集整理的【神经网络】(13) ShuffleNetV2 代码复现,网络解析,附Tensorflow完整代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。