上一篇:《创建用于预测序列的人工智能模型,设计数据集》
序言:在前一篇中,我们创建了用于训练人工智能模型的数据集。接下来,就要设计模型的架构了。其实,人工智能模型的开发关键并不在于代码量,而在于其中的数学原理和数据集(即人类经验)的深度与质量。
创建模型的架构(一个DNN神经网络)
现在你已经将数据存储在 tf.data.Dataset 中,在 tf.keras 中创建一个神经网络模型就变得非常简单了。我们先来探索一个简单的DNN模型,代码如下:
dataset = windowed_dataset(series, window_size, batch_size, shuffle_buffer_size)
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(10, input_shape=[window_size], activation="relu"),
tf.keras.layers.Dense(10, activation="relu"),
tf.keras.layers.Dense(1)
])
这是一个非常简单的模型,包含两个全连接层(Dense层)。第一层接收形状为 window_size 的输入,最后通过输出层生成预测值。
接下来,我们像之前一样,为模型编译指定损失函数和优化器。在本例中,损失函数选择了 mse(均方误差),它通常用于回归问题(这实际上就是一个回归问题)。优化器选择了 sgd(随机梯度下降),非常适合这样的场景。
关于这些函数的细节,本书不会深入讨论,但任何优秀的机器学习资源都会详细讲解它们——比如 Andrew Ng 在 Coursera 上的经典《深度学习专项课程》就是一个很好的起点。
SGD 优化器可以接受学习率(lr)和动量(momentum)两个参数,它们会影响优化器的学习方式。由于每个数据集都有其独特性,因此能够手动控制这些参数是非常有价值的。在下一节中,你将学习如何找到这些参数的最优值,但现在可以先这样设置:
model.compile(
loss="mse",
optimizer=tf.keras.optimizers.SGD(
lr=1e-6,
momentum=0.9
)
)
总结:本篇中,我们设计了一个人工智能模型的架构(一个简单的 DNN)。模型的性能与其架构和参数密切相关——参数量越大,所需的数据集也越庞大,模型的能力通常也会随之增强,这正是“规模效应”(Scaling Law)的体现