объединение данных с горячим кодированием категории и примеров непрерывных данных в TensorFlow JS - PullRequest
1 голос
/ 28 сентября 2019

При использовании данных категории с горячим кодированием и числовых переменных, как вы комбинируете эти различные типы данных для соответствия модели?

Ранее использовали TensorflowJS , и это простоМой сторонний проект, который я использую, чтобы узнать больше о тф Google, я использовал только горячо закодированные данные для значений функции и метки.Все элементы были той же формы, что и этикетки.Я просто строю модель прогнозирования для функций, которые имеют горячее кодирование имен, таких как

"name1" = [1,0,0]
"name2" = [0,1,0]
...

, с результатами, которые также имеют горячее кодирование, такие как

"outcome1" = [1,0,0]
"outcome2" = [0,1,0]
...

Это сработало довольнону, и я смог построить прекрасную модель, которая при тестировании работала довольно хорошо.

Однако, как только я захотел немного проработать особенности и использовать непрерывно числовую часть данных, я не мог понять, как объединить категорию инепрерывные данные.

То, что я хочу сделать, это использовать дополнительный, не относящийся к категории фрагмент переменных данных.Таким образом, мои функции будут

"name1" = [1,0,0]
"name2" = [0,1,0]
variablePieceOfInformation = 10

Изначально я не вижу пути в тензорном потоке совместного использования этих фрагментов данных.

Изначально все мои функции были одинакового размера с одним горячим кодированием названий категорийи мои ярлыки были одним из самых закодированных результатов, которые я хотел предсказать.

Теперь я хочу использовать дополнительную часть информации, которая постоянно изменяется, и я не вижу примеров того, как объединить эти два типа.

То, что я ожидал, это то, что может быть способ объединения категорий (закодированных в однокадровом коде) и непрерывно изменяемых данных.

my git repo

import getTrainingData, { TrainingData, getNames } from "./getModelData";
import save from "./saveModel";
import { numAllTimeTeams } from "@gvhinks/epl-constants";

const createModel = async (): Promise<tf.Sequential> => {
  const model: tf.Sequential = tf.sequential({
    name: "predict"
  });
  model.add(tf.layers.dense({inputShape: [2,numAllTimeTeams], units: 3, useBias: true, name:"teams_layer"}));
  model.add(tf.layers.flatten());
  model.add(tf.layers.dense({units: 3, useBias: true, name: "results_layer"}));
  model.compile({optimizer: tf.train.adam(0.001), loss: 'meanSquaredError'});
  const { labelValues, featureValues } = await getTrainingData();
  const numTeamsInLeague: number = (featureValues[0][0]).length;
  const featureTensors = tf.tensor3d(featureValues, [featureValues.length, 2, numTeamsInLeague], 'int32');
  const labelTensors = tf.tensor2d(labelValues, [labelValues.length, 3], 'int32');
  const fitArgs = {
    batchSize: 500,
    epochs: 200,
    verbose: 0
  };
  await model.fit(featureTensors, labelTensors, fitArgs);
  return model;
};

export { getTrainingData, createModel as default, TrainingData, getNames, save };```

1 Ответ

1 голос
/ 29 сентября 2019

Объединение тензора для получения как категориальных, так и непрерывных данных само по себе не является сложной задачей.Нужно объединить (используя tf.concat) два тензора, один с категориальными данными, а второй с числовыми данными.

При таком вводе прогноз может быть только категориальными или числовыми данными, но не обоими - причина в том, что тип данных будет влиять на выбор функции ошибки.

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