美文网首页
MobileNet V1 代码

MobileNet V1 代码

作者: 晨光523152 | 来源:发表于2020-03-04 14:29 被阅读0次

    上周看来MobileNet V1的文章,然后去找了找代码。

    代码传送门:
    https://github.com/calmisential/Basic_CNNs_TensorFlow2/blob/master/models/mobilenet_v1.py

    用了这个代码之后我发现运行 model.summary()之后,看不见每一层 output_shape,所以稍微进行了下改变,

    网络代码如下:

    class MobileNetV1(tf.keras.Model):
        def __init__(self):
            super(MobileNetV1, self).__init__()
            self.conv1 = tf.keras.layers.Conv2D(filters=32, kernel_size=(3, 3),
                               strides=2,
                               padding="same")
            self.separable_conv_1 = tf.keras.layers.SeparableConv2D(filters=64,
                                        kernel_size=(3, 3),
                                        strides=1,
                                        padding="same")
            self.separable_conv_2 = tf.keras.layers.SeparableConv2D(filters=128,
                                        kernel_size=(3, 3),
                                        strides=2,
                                        padding="same")
            self.separable_conv_3 = tf.keras.layers.SeparableConv2D(filters=128,
                                        kernel_size=(3, 3),
                                        strides=1,
                                        padding="same")
            self.separable_conv_4 = tf.keras.layers.SeparableConv2D(filters=256,
                                        kernel_size=(3, 3),
                                        strides=2,
                                        padding="same")
            self.separable_conv_5 = tf.keras.layers.SeparableConv2D(filters=256,
                                        kernel_size=(3, 3),
                                        strides=1,
                                        padding="same")
            self.separable_conv_6 = tf.keras.layers.SeparableConv2D(filters=512,
                                        kernel_size=(3, 3),
                                        strides=2,
                                        padding="same")
    
            self.separable_conv_7 = tf.keras.layers.SeparableConv2D(filters=512,
                                        kernel_size=(3, 3),
                                        strides=1,
                                        padding="same")
            self.separable_conv_8 = tf.keras.layers.SeparableConv2D(filters=512,
                                        kernel_size=(3, 3),
                                        strides=1,
                                        padding="same")
            self.separable_conv_9 = tf.keras.layers.SeparableConv2D(filters=512,
                                        kernel_size=(3, 3),
                                        strides=1,
                                        padding="same")
            self.separable_conv_10 = tf.keras.layers.SeparableConv2D(filters=512,
                                        kernel_size=(3, 3),
                                        strides=1,
                                        padding="same")
            self.separable_conv_11 = tf.keras.layers.SeparableConv2D(filters=512,
                                        kernel_size=(3, 3),
                                        strides=1,
                                        padding="same")
    
            self.separable_conv_12 = tf.keras.layers.SeparableConv2D(filters=1024,
                                        kernel_size=(3, 3),
                                        strides=2,
                                        padding="same")
            self.separable_conv_13 = tf.keras.layers.SeparableConv2D(filters=1024,
                                        kernel_size=(3, 3),
                                        strides=1,
                                        padding="same")
    
            self.avg_pool = tf.keras.layers.AveragePooling2D(pool_size=(7, 7),
                                      strides=1)
            self.fc = tf.keras.layers.Dense(units=10,
                            activation=tf.keras.activations.softmax)
    
        def call(self, inputs, training=None, mask=None):
            x = self.conv1(inputs)
            x = self.separable_conv_1(x)
            x = self.separable_conv_2(x)
            x = self.separable_conv_3(x)
            x = self.separable_conv_4(x)
            x = self.separable_conv_5(x)
            x = self.separable_conv_6(x)
            x = self.separable_conv_7(x)
            x = self.separable_conv_8(x)
            x = self.separable_conv_9(x)
            x = self.separable_conv_10(x)
            x = self.separable_conv_11(x)
            x = self.separable_conv_12(x)
            x = self.separable_conv_13(x)
    
            x = self.avg_pool(x)
            x = self.fc(x)
    
            return x
    
        def model(self):
            x = tf.keras.layers.Input(shape=(224, 224, 3))
            return tf.keras.Model(inputs=[x], outputs=self.call(x))
    
    sub = MobileNetV1()
    sub.model().summary()
    
    模型

    参考资料:
    https://github.com/calmisential/Basic_CNNs_TensorFlow2/blob/master/models/mobilenet_v1.py
    https://stackoverflow.com/questions/55235212/model-summary-cant-print-output-shape-while-using-subclass-model

    相关文章

      网友评论

          本文标题:MobileNet V1 代码

          本文链接:https://www.haomeiwen.com/subject/chpvlhtx.html