标量输出Tensorflow JS

时间:2019-02-20 22:46:02

标签: javascript tensorflow machine-learning neural-network tensorflow.js

使用顺序模型,如何获取二维输入(三维输入)的数组,并让模型对每个二维输入进行预测以产生标量?输入形状(板):[153,8,8]。输出形状(结果):[153]。

型号:

const model = tf.sequential();
model.add(tf.layers.dense({units: 8, inputShape: [8]}));
model.add(tf.layers.dense({units:1, activation: 'sigmoid'}));

// Prepare the model for training: Specify the loss and the optimizer.
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});

const xs = tf.tensor(boards);
const ys = tf.tensor(results);


model.fit(xs, ys, {batchSize: 8, epoch: 10000}).then(() => {
});
model.predict(tf.tensor(brokenFen)).print();

console.log(JSON.stringify(model.outputs[0].shape));

输出:

Tensor
    [[1],
     [1],
     [1],
     [1],
     [1],
     [1],
     [1],
     [1]]
[null,1]

所需的输出:

Tensor
[1]

如果还有其他问题,请lmk。

1 个答案:

答案 0 :(得分:0)

一些理论...

预测的数量是为predict方法提供的功能的批量大小。为了更好地了解功能和标签,让我们考虑以下内容。

| feature 1 | feature 2 | ... | feature n | Label |
|----------:|----------:|----:|-----------|------:|
|    x11    |    x12    | ... |    x1n    |   y1  |
|    x21    |    x22    | ... |    x2n    |   y2  |
|    ...    |    ...    |  .. |    ...    |  ...  |

在上图中,数据具有n个特征,对应于n个维度,而标签具有单个维度-为简单起见并适合该问题。构建的模型的输入(第一层)应与要素的尺寸匹配,而输出(最后一层)应与标签的尺寸匹配。在训练和预测时,我们为模型提供了一堆不同的样本n1,n2。给出的样品数量对应于批量大小。该模型将返回相同数量的形状为标签尺寸的元素。


该模型具有以下inputShape: [8],表示我们具有8个功能。最后一层有units:1提示标签的大小为1。当我们预测值时会发生什么?

const model = tf.sequential();

// first layer
model.add(tf.layers.dense({units: 8, inputShape: [8], activation: 'sigmoid' }));
// second layer
model.add(tf.layers.dense({units: 1}));

model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
console.log(model.predict(tf.ones([3, 8])).shape) // [3, 1] 3 elements predicted
console.log(model.predict(tf.ones([1, 8])).shape) // [1, 1] single element predicted
<html>
  <head>
    <!-- Load TensorFlow.js -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.15.1"> </script>
  </head>

  <body>
  </body>
</html>

正如问题所暗示的,标签是根据三维值预测的。在这种情况下,inputShape将为3而不是8。如果tf.tensor(brokenFen)的形状为[b, ...inputShape],将有b个结果值。如果要使用单个值,请考虑通过扩展尺寸tf.expandims或使用形状为tf.reshape的单个元素的inputShape(在这种情况下为3)将b设置为1。 >