Не удалось зарегистрировать бэкэнд webgl для тензорного потока

Здесь много правильных ответов, но я хотел добавить это (для полноты):

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

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

template class vector<int>;

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

Вышеприведенный пример бесполезен, поскольку вектор полностью определен в заголовках, за исключением случаев, когда common include file (precompiled header?) использует extern template class vector<int>, чтобы не создавать его из всех других (1000?) файлов, которые используют вектор.

0
задан Parthiban Rajendran 4 March 2019 в 07:27
поделиться

1 ответ

Так что, поскольку вы опубликовали свой результат about: gpu, показывающий, что вы получаете программный рендеринг только для WebGL, который предполагает отображение tenorflow.js в WebGL флага создания контекста failIfMajorPerformanceCaveat, который почти наверняка потерпит неудачу при рендеринге программного обеспечения [ 1117]

Мы можем проверить путем переопределения getContext и распечатать флаги создания

<script>
HTMLCanvasElement.prototype.getContext = function(type, parameters) {
 console.log(JSON.stringify(parameters, null, 2));
 return null;
};
</script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.15.3/dist/tf.min.js"></script>

Так работает, что я см. эти результаты

{
  "alpha": false,
  "antialias": false,
  "premultipliedAlpha": false,
  "preserveDrawingBuffer": false,
  "depth": false,
  "stencil": false,
  "failIfMajorPerformanceCaveat": true    <====-------
}

Так вот почему он печатает это предупреждение.

Тем не менее, это всего лишь предупреждение . tenorflow.js все еще работает. Обратите внимание (а), что он говорит 2 предупреждения, а не 2 ошибки. (б) они отображаются желтым, а не красным.

warnings not errors

с помощью console.warn против console.error вы можете увидеть разницу

warning vs error [ 1110]

tenorflow.js отлично работает AFAICT. Вот пример. Я взломал getContext, поэтому он всегда терпит неудачу, так что tenorflow.js не может получить контекст WebGL. Он выводит 2 предупреждения, но также работает нормально. Прокрутите до конца сообщения, и вы увидите, что он запустил результаты примера кода tenorflow.

const d = tf.tensor2d([[1.0, 2.0], [3.0, 4.0]]);
const d_squared = d.square();
d_squared.print();
<script>
HTMLCanvasElement.prototype.getContext = function() {
 return null;
};
</script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.15.3/dist/tf.min.js"></script>

0
ответ дан gman 4 March 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: