Добавление входных данных в » генератор tf.data.` в tensorflow.js

#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));