02-25:CNN算法

2021-03-07  本文已影响0人  是黄小胖呀

CNN算法

1、算法原理

卷机神经网络的精华在于卷机、激活、池化

(1)卷机提取特征

(2)激活:激活函数对信号进行非线性变换,使得可以任意学习输入和输出之间的复杂变换

(3)池化下采样降低数据维度

最后将提取到的特征送入全联接层,进行分类任务。

2、例程代码

class CNN(tf.keras.Model):

    def __init__(self):

        super().__init__()

        self.conv1 = tf.keras.layers.Conv2D(

            filters=32,            # 卷积层神经元(卷积核)数目

            kernel_size=[5, 5],    # 感受野大小

            padding='same',        # padding策略(vaild 或 same)

            activation=tf.nn.relu  # 激活函数

        )

        self.pool1 = tf.keras.layers.MaxPool2D(pool_size=[2, 2], strides=2)

        self.conv2 = tf.keras.layers.Conv2D(

            filters=64,

            kernel_size=[5, 5],

            padding='same',

            activation=tf.nn.relu

        )

        self.pool2 = tf.keras.layers.MaxPool2D(pool_size=[2, 2], strides=2)

        self.flatten = tf.keras.layers.Reshape(target_shape=(7 * 7 * 64,))

        self.dense1 = tf.keras.layers.Dense(units=1024, activation=tf.nn.relu)

        self.dense2 = tf.keras.layers.Dense(units=10)

    def call(self, inputs):

        x = self.conv1(inputs)                  # [batch_size, 28, 28, 32]

        x = self.pool1(x)                      # [batch_size, 14, 14, 32]

        x = self.conv2(x)                      # [batch_size, 14, 14, 64]

        x = self.pool2(x)                      # [batch_size, 7, 7, 64]

        x = self.flatten(x)                    # [batch_size, 7 * 7 * 64]

        x = self.dense1(x)                      # [batch_size, 1024]

        x = self.dense2(x)                      # [batch_size, 10]

        output = tf.nn.softmax(x)

        return output

参考资料:

1、卷积神经网络(CNN)

https://www.bookstack.cn/read/TensorFlow2.0/spilt.3.c868281a01ad8ec0.md

上一篇 下一篇

猜你喜欢

热点阅读