Я начал использовать javascript и TensorFlow.js для работы над некоторыми проектами машинного обучения, я работаю над созданием модели линейной регрессии, однако я не могу понять, что вызывает эту ошибку
Невозможно найти связь между любой переменной и результатом функции потерь y = f (x). Убедитесь, что операции, в которых используются переменные, находятся внутри функции f, переданной для минимизации(). "
Я создал два тензора
globalTensorXs = tf.tensor2d(globaArrayXs); //input data
globalTensorYs = tf.tensor1d(globaArrayYs); //y output
Я создал коэффициенты/веса, как показано ниже, как массив tf-скаляров.
function createWeights(_numWeights)
{
for ( var x = 0; x < _numWeights; x++)
{
globalWeightsTensorArr.push(tf.variable(tf.scalar(Math.random())));
}
}
Существует функция обучения, в которую я передаю тензоры x и y, это призыв к оптимизации. Minimize, который вызывает проблему. он не обнаруживает переменную для обучения, которая хранится в globalWeightsTensorArr
async function train(xsTensor, ysTensor, numIterations)
{
/*//////OPTIMISER.MINIMISE/////////////
Minimize takes a function that does two things:
It predicts y values for all the x values using the predict
model function.
It returns the mean squared error loss for those predictions
using the loss function. Minimize then automatically adjusts any
Variables used by thi predict/loss function in order to minimize
the return value (our loss), in this case the variables are in
"globalWeightsTensorArr" which contains the coefficient values
to be altered by the modeld during "numIterations" iterations of
SGD.
*/
for (let iter = 0; iter < numIterations; iter++)
{
optimiser.minimize(function ()
{
return loss(predict(xsTensor), ysTensor);
}, globalWeightsTensorArr);
}
}
//функция прогнозирования и потери здесь...
//Следующий код создает функцию прогнозирования, которая принимает входные данные (X's)//и возвращает предсказание Y: оно представляет нашу "модель". Учитывая вход //'xs', он попытается и * предсказать соответствующий вывод 'y'.
function predict(_Xs)
{
return tf.tidy(() => {
for ( var x = 0; x < 8; x++)
globalWeightsArr[x] = globalWeightsTensorArr[x].dataSync();
const weightTensor = tf.tensor1d(globalWeightsArr);
const prediction = tf.dot(_Xs, weightTensor);
return prediction;
});
}
//Функция потерь принимает предсказания из функции прогнозирования//и фактических таблиц и корректирует весовые коэффициенты//весы считаются любой тензорной переменной, воздействующей на//функцию. Мы можем определить функцию потери MSE в TensorFlow.js следующее:
function loss(_predictedTensor, _labels)
{
const meanSquareError =_predictedTensor.sub(_labels).square().mean();
return meanSquareError ;
}
кто-нибудь может помочь объяснить проблему?
С уважением, Айдеен
Мы решили проблему, изменив способ создания весов/коэффициентов. Теперь свести к минимуму можно обнаружить переменные, используемые предсказанием, и соответственно корректирует их. позже я выложу все решение на codepen. Все еще изучаю!
function createWeights(_numWeights) {
const randomTensor = tf.randomUniform([_numWeights, 1]);
globalWeightsTensorVar = tf.variable(randomTensor);
}
здесь используется функция прогнозирования b
function predictLogical(_Xs) {
return tf.dot(_Xs, globalWeightsTensorVar);
}
Проблема связана с tf.variable
. Нужно использовать tf.variable
для создания весов, которые будут обновляться функцией, созданной optimiser.minimize()
.
Переменная, созданная tf.variable
вопреки tf.tensor
которая является неизменной. В результате, если использовать tf.tenso
r для создания весов, которые они не могли бы обновить во время обучения