介绍
Keras中构建 模型有两种方式,一种是通过Model类构建,一种是通过Sequential构建。前者类似对数据的pipline处理,后者侧重于模型的堆叠。
Model操作
- 包
tf.keras.Model
tf.keras.models.Model
Model 类提供了数据特征处理和模型训练的一些操作。在keras中构建model有两种方式,直接构建和通过定义一个子类构建。
- 直接构建
import tensorflow as tf
inputs = tf.keras.Input(shape=(3,))
x = tf.keras.layers.Dense(4, activation=tf.nn.relu)(inputs)
outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
首先需要定义一个layer的pipline ,然后通过传入输入输出参数进行构建。
- 通过定义一个model class来构建
import tensorflow as tf
class MyModel(tf.keras.Model):
def __init__(self):
super(MyModel, self).__init__()
self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu)
self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)
def call(self, inputs):
x = self.dense1(inputs)
return self.dense2(x)
model = MyModel()
在MyModel类init函数中初始化需要的网络层,然后实现一个前向传播函数,来定义传播方式;推荐使用这种方式进行构建,代码高度模块化,并且可以通过传递参数控制前向传播的执行逻辑。
import tensorflow as tf
class MyModel(tf.keras.Model):
def __init__(self):
super(MyModel, self).__init__()
self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu)
self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)
self.dropout = tf.keras.layers.Dropout(0.5)
def call(self, inputs, training=False):
x = self.dense1(inputs)
if training:
x = self.dropout(x, training=training)
return self.dense2(x)
model = MyModel()
Sequential操作
通过网络层堆叠构建模型
- 包
tf.keras.Sequential
tf.keras.models.Sequential
- 我们定义了一个Sequential, 并添加两层
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(32, input_shape=(500,)))
model.add(tf.keras.layers.Dense(32))