等待不在Tensorflow.js

时间:2018-06-05 16:24:20

标签: javascript tensorflow.js

我关注的是Tensorflow.js示例 但出于某种原因,浏览器会在await前面使用model.fit关键字投诉。

错误消息:

  

Uncaught SyntaxError:await仅在异步函数

中有效

我运行的示例代码:

const model = tf.sequential({
    layers: [tf.layers.dense({units: 1, inputShape: [10]})]
});
model.compile({optimizer: 'sgd', loss: 'meanSquaredError'});
for (let i = 1; i < 5 ; ++i) {
    const h = await model.fit(tf.ones([8, 10]), tf.ones([8, 1]), {
        batchSize: 4,
        epochs: 3
    });
    console.log("Loss after Epoch " + i + " : " + h.history.loss[0]);
}

我已经确认model.fit返回Promise 我在safari和chrome上都尝试过它。

我可以用.then解决这个问题,但是如果可以的话我想等待。 有谁知道为什么?

2 个答案:

答案 0 :(得分:2)

await关键字仅在异步函数中可用,因此您必须将其包装在一个中。

最简单的方法是保持范围:

(async () => {
   yourStuffHere
})();

创建一个匿名的异步箭头函数,在创建时自行调用。

或者,如果您不需要将整个事物变为异步,则可以使用&#34;较旧的&#34;异步函数的方法,使用.then()在异步函数完成时运行给定的回调函数:

model.fit(...).then(h => {
   console.log("Loss after Epoch " + i + " : " + h.history.loss[0]);
});

答案 1 :(得分:1)

您需要将封闭函数声明为template<class T> T ReadAq(T* val) { using AT = std::atomic<T>; static_assert(sizeof(T) == sizeof(AT), "Incompatible layout."); static_assert(alignof(T) == alignof(AT), "Incompatible layout."); return reinterpret_cast<AT*>(val)->load(std::memory_order_acquire); } 函数,例如:

async

否则,您需要使用async function yourFunction() { const model = tf.sequential({ layers: [tf.layers.dense({ units: 1, inputShape: [10] })] }); model.compile({ optimizer: "sgd", loss: "meanSquaredError" }); for (let i = 1; i < 5; ++i) { const h = await model.fit(tf.ones([8, 10]), tf.ones([8, 1]), { batchSize: 4, epochs: 3 }); console.log("Loss after Epoch " + i + " : " + h.history.loss[0]); } }