#javascript #tensorflow.js
Вопрос:
Я пытаюсь создать генератор данных, который, как я проверил, работал сам по себе в чистом js. Документация TFJS для этого находится здесь, с двумя примерами: https://js.tensorflow.org/api/latest/#data.generator
Я хотел бы использовать a tf.data.generator
, поскольку эти наборы данных требуют тщательной предварительной обработки. Минимальный пример выглядит следующим образом:
const tf = require('@tensorflow/tfjs-node');
class dataGeneratorGenerator {
constructor(test) {
this.test = test
}
* dataGenerator() {
let len = this.test.length
let idx = 0
while (idx < len) {
idx
console.log(idx)
yield this.test[idx]
}
}
}
let dgg = new dataGeneratorGenerator(['hi', 'hi2', 'hi3'])
let trainDs = tf.data.generator(dgg.dataGenerator);
trainDs.forEachAsync(e => console.log(e));
Ошибка заключается в следующем:
TypeError: Error thrown while iterating through a dataset: Cannot read property 'test' of undefined
Итерация через наш генератор данных в чистом javascript работает:
let dgg = new dataGeneratorGenerator(['hi', 'hi2', 'hi3'])
let dg = dgg.dataGenerator()
console.log(dgg.next())
console.log(dgg.next())
console.log(dgg.next())
Я понимаю, что мы только переходим dataGenerator
в tf.data.generator
вместо всего класса. Тогда, как можно вводить переменные в tf.data.generator
? Спасибо.
Ответ №1:
Можно просто использовать функцию со стрелкой.
const tf = require('@tensorflow/tfjs-node');
function* dataGenerator(test) {
let len = test.length
let idx = 0
while (idx < len) {
idx
console.log(idx)
}
}
let trainDs = tf.data.generator(() => dataGenerator(['hi', 'hi2', 'hi3']));
trainDs.forEachAsync(e => console.log(e));