tensorflow.js中预测的输出概率
我通过tensorflow.js转换器从tensorflow生成了一个model.json 在python中tensorflow模型的原始实现中,它是这样构建的:tensorflow.js中预测的输出概率,tensorflow,tensorflow.js,Tensorflow,Tensorflow.js,我通过tensorflow.js转换器从tensorflow生成了一个model.json 在python中tensorflow模型的原始实现中,它是这样构建的: model = models.Sequential([ base_model, layers.Dropout(0.2), layers.Flatten(), layers.Dense(128, activation='relu'), layers.Dense(num_classes)
model = models.Sequential([
base_model,
layers.Dropout(0.2),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(num_classes)
])
根据官方网站上的教程,在tensorflow中,概率可以通过score=tf.nn.softmax(预测[0])生成
如何在tensorflow.js中获得此概率
我已复制代码模板,如下所示:
$("#predict-button").click(async function () {
if (!modelLoaded) { alert("The model must be loaded first"); return; }
if (!imageLoaded) { alert("Please select an image first"); return; }
let image = $('#selected-image').get(0);
// Pre-process the image
console.log( "Loading image..." );
let tensor = tf.browser.fromPixels(image, 3)
.resizeNearestNeighbor([224, 224]) // change the image size
.expandDims()
.toFloat()
// RGB -> BGR
let predictions = await model.predict(tensor).data();
console.log(predictions);
let top5 = Array.from(predictions)
.map(function (p, i) { // this is Array.map
return {
probability: p,
className: TARGET_CLASSES[i] // we are selecting the value from the obj
};
}).sort(function (a, b) {
return b.probability - a.probability;
}).slice(0, 2);
console.log(top5);
$("#prediction-list").empty();
top5.forEach(function (p) {
$("#prediction-list").append(`<li>${p.className}: ${p.probability.toFixed(6)}</li>`);
});
请帮忙!!!
谢谢 要使用softmax函数从模型的logits中提取概率,可以执行以下操作: 这是logit数组,也是从模型中得到的
预测
const logits = [-2.5525975227355957, 7.398464679718018, -3.252196788787842, 4.710395812988281, -4.636396408081055]
您可以对值数组调用tf.softmax()
const probabilities = tf.softmax(logits)
结果:
[0.0000446, 0.9362511, 0.0000222, 0.0636765, 0.0000056]
1
然后,如果希望以最大的概率获取索引,可以使用tf.argMax()
:
结果:
[0.0000446, 0.9362511, 0.0000222, 0.0636765, 0.0000056]
1
编辑
我不太熟悉jQuery,所以这可能不正确。但下面是我如何按降序获得输出概率的方法:
let probabilities = tf.softmax(predictions).dataSync();
$("#prediction-list").empty();
probabilities.forEach(function(p, i) {
$("#prediction-list").append(
`<li>${TARGET_CLASSES[i]}: ${p.toFixed(6)}</li>`
);
});
let probabilities=tf.softmax(预测).dataSync();
$(“#预测列表”).empty();
概率。forEach(函数(p,i){
$(“#预测列表”)。追加(
`${TARGET_CLASSES[i]}:${p.toFixed(6)} `
);
});
不是p.probability.toFixed(6)
概率吗?它只是输出变量“predictions”中的值,包括问题中预测的输出。它现在包含在编辑的问题中。概率与预测的输出值完全相同。我不明白这些概率不是你想要的吗?听起来很棒!所以,您能直接告诉我应该如何修改原始代码,以降序显示(而不是在console.log中)每个输出的概率吗?(很抱歉,当我想在线发布我的模型时,我只是javascript的初学者)@Maximus你能检查一下更新的答案吗?没有,因为它的形状是5。你能试试概率打印吗?现在怎么样?我认为问题在于我没有使用dataSync()
下载张量。它现在可以工作了。谢谢