我关注的是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解决这个问题,但是如果可以的话我想等待。 有谁知道为什么?
答案 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]);
}
}
: