4. 定义模型架构
在本部分中,我们将编写代码来描述模型架构。模型架构其实就是“模型在执行时会运行的函数”,换一种说法就是“我们的模型将用于计算答案的算法”。
机器学习模型是指接受输入并生成输出的算法。使用神经网络时,算法是一组神经元层,其中权重(数字)控制着其输出。训练过程会学习这些权重的理想值。
将以下函数添加到您的
script.js 文件来定义模型架构。
function createModel() {
// Create a sequential model
const model = tf.sequential();
// Add a single input layer
model.add(tf.layers.dense({inputShape: [1], units: 1, useBias: true}));
// Add an output layer
model.add(tf.layers.dense({units: 1, useBias: true}));
return model;
}
这是我们在 tensorflow.js 中定义的一个最简单的模型,让我们来详细介绍每一行。
实例化模型
const model = tf.sequential();
这样会实例化[tf.Model](https://js.tensorflow.org/api/latest/#class:Model)
对象。此模型是 sequential,因为其输入直接向下流至其输出。其他类型的模型可以有分支,甚至可以有多个输入和输出,但在许多情况下,模型将是贯序的。贯序模型还更易于使用 API。
添加层
model.add(tf.layers.dense({inputShape: [1], units: 1, useBias: true}));
此操作会向我们的网络添加输入层,从而自动连接到包含一个隐藏单元的 dense 层。 dense 是一种层,可将输入与矩阵(称为“权重”)相乘,并向结果添加一个数字(称为“偏差”)。由于这是网络的第一层,因此我们需要定义 inputShape。inputShape 是 [1],因为我们将 1 数字用作输入(某辆指定汽车的马力)。
units 用于设置权重矩阵在层中的大小。将其设置为 1 即表示数据的每个输入特征的权重为 1。
注意:默认情况下,密集层带有一个偏差项,因此我们无需将 useBias 设置为 true,并在对 tf.layers.dense 的后续调用中省略这一步
model.add(tf.layers.dense({units: 1}));
上述代码用于创建我们的输出层。我们将 units 设置为 1,因为我们想要输出数字 1。
注意:在此样本中,因为隐藏层有 1 个单元,所以我们实际上不需要在上方添加最终输出层(也就是说,我们可以将隐藏层作为输出层)。但是,通过定义单独的输出层,我们可以修改隐藏层中的单元数量,同时保留输入和输出的一对一映射。
创建实例
将以下代码添加到
我们之前定义的 run 函数。
// Create the model
const model = createModel();
tfvis.show.modelSummary({name: 'Model Summary'}, model);
这样将创建模型的实例,并显示网页上各层的摘要。