主要介绍如何快速构建一个模型并进行训练,重点在于模型构建流程的讲解,其中所用到的API可以通过头文件、官网查询其功能,参数,输入与输出数据
简单堆叠模型
- model = tf.keras.Sequential(),可理解为实例化一个用于构建模型的类,我们可以通过add()的方式向其内部添加网络层,这些网络层就等价于类中的成员与方法
# 实例化一个堆叠模型
model = tf.keras.Sequential()
# 构建模型的网络层结构
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
- 设置训练流程,调用compile()方法,对优化器,损失函数,性能指标进行配置
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
loss=tf.keras.losses.categorical_crossentropy,
metrics=[tf.keras.metrics.categorical_accuracy])
- 训练网络,调用fit()方法,送入数据对模型进行训练
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers
model = tf.keras.Sequential()
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
loss=tf.keras.losses.categorical_crossentropy,
metrics=[tf.keras.metrics.categorical_accuracy])
train_x = np.random.random((1000, 72))
train_y = np.random.random((1000, 10))
val_x = np.random.random((200, 72))
val_y = np.random.random((200, 10))
model.fit(train_x, train_y, epochs=1000, batch_size=100,
validation_data=(val_x, val_y))
函数式构建模型
tf.keras.Sequential()属于简单模型的堆叠,无法完成复杂模型的构建(多输入、多输出模型、包含共享层的模型、残差结构的模型),因此通过函数式API构建模型
- 定义模型的输入,网络中间层,模型的输出;相比于堆叠模型add()方法的方式,该方式构建模型更灵活
# 输入数据的维度需提前指定,并且数据维度需保持与定义一致
input_x = tf.keras.Input(shape=(72,))
hidden1 = layers.Dense(32, activation="relu")(input_x)
hidden2 = layers.Dense(16, activation="relu")(hidden1)
pred = layers.Dense(10, activation="softmax")(hidden2)
- 调用tf.keras.Model()方法构建模型,只需要写入输入与输出
model = tf.keras.Model(inputs=input_x, outputs=pred)
- 设置训练流程,训练网络与上部分构建堆叠模型一致
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers
input_x = tf.keras.Input(shape=(72,))
hidden1 = layers.Dense(32, activation="relu")(input_x)
hidden2 = layers.Dense(16, activation="relu")(hidden1)
pred = layers.Dense(10, activation="softmax")(hidden2)
model = tf.keras.Model(inputs=input_x, outputs=pred)
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
loss=tf.keras.losses.categorical_crossentropy,
metrics=['accuracy'])
train_x = np.random.random((1000, 72))
train_y = np.random.random((1000, 10))
val_x = np.random.random((200, 72))
val_y = np.random.random((200, 10))
model.fit(train_x, train_y, epochs=1000, batch_size=100,
validation_data=(val_x, val_y))