当前位置: 代码迷 >> 综合 >> 定义CNN网络结构
  详细解决方案

定义CNN网络结构

热度:4   发布时间:2024-02-08 09:27:19.0
class CNN(tf.keras.Model):def __init__(self):super().__init__()self.conv1 = tf.keras.layers.Conv2D(filters=32,              # 卷积层神经元(卷积核)数目kernel_size=[5, 5],     # 感知域大小(滤波器大小) padding=2strides=(2,2),padding='same',         # padding策略(vaild 或 same)same保证卷出来的图大小与原输入相同kernel_initializer=tf.random_normal_initializer,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],strides=(1,1),padding='same',kernel_initializer=tf.random_normal_initializer,activation=tf.nn.relu)self.pool2 = tf.keras.layers.MaxPool2D(pool_size=[2, 2],strides=2)self.flatten = tf.keras.layers.Flatten()self.dense1 = tf.keras.layers.Dense(units=512, activation=tf.nn.relu)self.dropout = tf.keras.layers.Dropout(rate=0.1)self.dense2 = tf.keras.layers.Dense(units=120)def call(self, inputs):                     # [batch_size, 150, 150, 1] x = self.conv1(inputs)                  # [batch_size, 75, 75, 32] x = self.pool1(x)                       # [batch_size, 37, 37, 64]x = self.conv2(x)                       # [batch_size, 19, 19, 64]x = self.pool2(x)                       # [batch_size, 9, 9, 64]x = self.flatten(x)                      # [batch_size, 9*9*64=5184]x = self.dense1(x)                      # [batch_size, 512]x = self.dropout(x)                     x = self.dense2(x)                      # [batch_size, 120]output = tf.nn.softmax(x)return output

调用:

model = CNN()

网络结构示意图:

输入150x150单通道的黑白图像,

第一层卷积:32个5x5,步长为2的卷积核卷积后是75x75的32通道。

下一层是2x2的最大池化层得到37x37,64通道的数据。

下一层再经过64个5x5,步长为1的卷积核卷积后是19x19的64通道,

下一层是2x2,步长为2的最大池化层得到9x9,64通道的数据。

下一层将多维的输入一维化

下一层全连接,下一层dropout随机失活,下一层再神经网络全连接,最后softmax全连接。

  相关解决方案