Tensorflow дает ложные результаты

Это простейшая проблема, которую я могу придумать, чтобы проверить точность tf. Но это не дает мне удовлетворительных результатов. У меня есть собственные модели, и для такой задачи они даже не требуют обучения, потому что ошибка уже в нулях. Что-то не так с моим пониманием / кодом и т. д.? Он должен давать точные ответы, например, .11, .06 (мои модели .net делают)

const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [2]}));
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
const xs = tf.tensor2d([.01, .02, .03, .04, .05, .06], [3, 2]);
const ys = tf.tensor2d([.03, .07, .11], [3, 1]);
model.fit(xs, ys).then(() => {
model.predict(tf.tensor2d([.05,.06,.02,.03], [2, 2])).print();
});

Возможно, вы захотите пометить язык, на котором пишете. Основной API Tensorflow находится на python, а это не на python. Но ваш единственный тег - tenorflow. Но не важно. Когда вы вызываете fit (), вы фактически обучаете модель с помощью SGD. И я не уверен, почему вы думаете, что ваша модель не требует обучения. Вы не инициализируете веса или что-то еще, поэтому ваша модель каким-то образом должна их изучить.

Mad Wombat 11.09.2018 04:53

Спасибо @MadWombat, добавлен тег JS. Я знаю, что TF требует обучения. Остальные модели на заказ могут быть разными. Для такой проблемы, как эта, даже если вы установите все веса, скажем, «1», прогнозируемая линия должна почти перекрывать фактическую линию, потому что проблема слишком проста. Вот что я имел в виду. Однако ТФ (после тренировки) по-прежнему дает очень неудовлетворительные результаты. Почему?

Shahid Latif 12.09.2018 06:06

Вы не инициализируете веса, поэтому они, вероятно, установлены в 0. Вы не передаете никаких конфигураций в fit (), поэтому он, вероятно, выполняет ровно один проход обратного распространения. Таким образом, вы получаете довольно случайные результаты. Не знаю, почему вы удивлены.

Mad Wombat 12.09.2018 18:29

Если вы явно установите вес на 1, вы волшебным образом добьетесь гораздо лучших результатов.

Mad Wombat 12.09.2018 18:45

@MadWombat Как инициализировать веса в tf.js?

Shahid Latif 24.09.2018 07:18

Вы читаете документы. В документации для плотного слоя у вас есть аргумент с именем config, а в конфигурации вы можете установить для параметра kernelInitializer значение «единицы». js.tensorflow.org/api/0.13.0/#layers.dense

Mad Wombat 25.09.2018 16:40

@MadWombat Я разобрался. Не было никаких проблем, за исключением того, что я использовал очень мало эпох каждый раз, полагая, что 1 эпоха означает одно прохождение через все веса.

Shahid Latif 03.10.2018 12:49
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
146
1

Ответы 1

С вашей моделью существует только одна эпоха обучения. В результате модель не дает ложных результатов, как вы предлагали. Я бы сказал, что это дает случайные результаты. Происходит следующее: в течение первой эпохи веса вашего слоя инициализируются случайным образом. Простое изменение количества эпох приведет к лучшим результатам.

Также возможно настроить веса во время инициализации, вызвав инициализатор для значения kernelInitializer при установке плотный слой.

Вот модель, обученная с 10 эпохами, которая будет работать лучше, чем модель с одной эпохой.

const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [2]}));
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
const xs = tf.tensor2d([.01, .02, .03, .04, .05, .06], [3, 2]);
const ys = tf.tensor2d([.03, .07, .11], [3, 1]);
model.fit(xs, ys, {epochs: 100}).then(() => {
model.predict(tf.tensor2d([.05,.06,.02,.03], [2, 2])).print();
});
<html>
  <head>
    <!-- Load TensorFlow.js -->
    <script src = "https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]"> </script>
  </head>

  <body>
  </body>
</html>

Похожий ответ можно найти здесь

Другие вопросы по теме