Немного теории ...
Число предсказанных является размером пакета функций, предоставленных методу 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
значения результатов.Если вы хотите иметь одно значение, рассмотрите возможность установки b на 1, увеличив размер tf.expandims
или используя tf.reshape
одного элемента формы inputShape
- в данном случае 3.