使用顺序模型,如何获取二维输入(三维输入)的数组,并让模型对每个二维输入进行预测以产生标量?输入形状(板):[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。
答案 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。 >