tf2.0推荐的模型搭建方法是:
- 继承tf.keras.Model类,进行扩展以定义自己的新模型。
- 手工编写模型训练、评估模型的流程。
(优点:灵活度高;与其他深度学习框架共通)
以CNN示例
<>
- 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