Лучший тип модели в TensorFlow.js для цветного прогноза? - PullRequest
0 голосов
/ 21 ноября 2018

Я создавал предсказатель цвета, когда понял, что возникает проблема.Я получил модель для успешной работы, но прогнозы всегда находятся в одном и том же среднем диапазоне от 2,5 до 5,5.Предполагается, что модель выдает значения от 0 до 8, соответствующие каждому цвету, и у меня есть четное количество данных для каждого цвета для обучения.Есть ли лучшая модель, которую я могу использовать, чтобы она предсказывала что-то 0 или 7?Я предполагаю, что этого не произойдет, потому что он думает, что это какие-то выбросы.

Вот моя модель

const model = tf.sequential();

const hidden = tf.layers.dense({
  units: 3,
  inputShape: [3] //Each input has 3 values r, g, and b
});
const output = tf.layers.dense({
  units: 1 //only one output (the color that corresponds to the rgb values
    });
model.add(hidden);
model.add(output);

model.compile({
  activation: 'sigmoid',
  loss: "meanSquaredError",
  optimizer: tf.train.sgd(0.005)
});

Это хорошая модель для моей проблемы?

1 Ответ

0 голосов
/ 23 ноября 2018

В модели отсутствует нелинейность, поскольку нет функций активации.Учитывая ввод rgb, модель должна предсказать наиболее вероятный цвет в 8 возможных значениях.Это проблема классификации.Модель, как определено в вопросе, выполняет регрессию, то есть она пытается предсказать числовое значение с учетом входных данных.

Для задачи классификации последний уровень должен предсказать вероятности.softmax Функция активации в основном используется для последнего слоя в этом случае.Функция потерь должна быть categoricalCrossentropy или binaryCrossEntropy (если было предсказано только два цвета).

Рассмотрим следующую модель, предсказывающую 3 класса цветов: красный, зеленый и синий

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

model.compile({ loss: 'categoricalCrossentropy', optimizer: 'adam' });

const xs = tf.tensor([
  [255, 23, 34],
  [255, 23, 43],
  [12, 255, 56],
  [13, 255, 56],
  [12, 23, 255],
  [12, 56, 255]
]);

// Labels
const label = ['red', 'red', 'green', 'green', 'blue', 'blue']
const setLabel = Array.from(new Set(label))
const ys = tf.oneHot(tf.tensor1d(label.map((a) => setLabel.findIndex(e => e === a)), 'int32'), 3)

// Train the model using the data.
  model.fit(xs, ys, {epochs: 100}).then((loss) => {
  const t = model.predict(xs);
  pred = t.argMax(1).dataSync(); // get the class of highest probability
  labelsPred = Array.from(pred).map(e => setLabel[e])
  console.log(labelsPred)
}).catch((e) => {
  console.log(e.message);
})
<html>
  <head>
    <!-- Load TensorFlow.js -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.3/dist/tf.min.js"> </script>
  </head>

  <body>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...