Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在 JS 循环中正确使用 async 与 await

如何在 JS 循环中正确使用 async 与 await

作者头像
桃翁
发布于 2019-06-18 07:37:36
发布于 2019-06-18 07:37:36
4.9K09
代码可运行
举报
文章被收录于专栏:前端桃园前端桃园
运行总次数:9
代码可运行

阅读本文大约需要 9 分钟

asyncawait 的使用方式相对简单。 当你尝试在循环中使用await时,事情就会变得复杂一些。

在本文中,分享一些在如果循环中使用await值得注意的问题。

准备一个例子

对于这篇文章,假设你想从水果篮中获取水果的数量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fruitBasket = {
 apple: 27,
 grape: 0,
 pear: 14
};

你想从fruitBasket获得每个水果的数量。 要获取水果的数量,可以使用getNumFruit函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const getNumFruit = fruit => {
  return fruitBasket[fruit];
};

const numApples = getNumFruit('apple');
console.log(numApples); //27

现在,假设fruitBasket是从服务器上获取,这里我们使用 setTimeout 来模拟。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const sleep = ms => {
  return new Promise(resolve => setTimeout(resolve, ms))
};

const getNumFruie = fruit => {
  return sleep(1000).then(v => fruitBasket[fruit]);
};

getNumFruit("apple").then(num => console.log(num)); // 27

最后,假设你想使用awaitgetNumFruit来获取异步函数中每个水果的数量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const control = async _ => {
  console.log('Start')

  const numApples = await getNumFruit('apple');
  console.log(numApples);

  const numGrapes = await getNumFruit('grape');
  console.log(numGrapes);

  const numPears = await getNumFruit('pear');
  console.log(numPears);

  console.log('End')
}

在 for 循环中使用 await

首先定义一个存放水果的数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fruitsToGet = [“apple”, “grape”, “pear”];

循环遍历这个数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const forLoop = async _ => {
  console.log('Start');

  for (let index = 0; index < fruitsToGet.length; index++) {
    // 得到每个水果的数量
  }

  console.log('End')
}

for循环中,过上使用getNumFruit来获取每个水果的数量,并将数量打印到控制台。

由于getNumFruit返回一个promise,我们使用 await 来等待结果的返回并打印它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const forLoop = async _ => {
  console.log('start');

  for (let index = 0; index < fruitsToGet.length; index ++) {
    const fruit = fruitsToGet[index];
    const numFruit = await getNumFruit(fruit);
    console.log(numFruit);
  }
  console.log('End')
}

当使用await时,希望JavaScript暂停执行,直到等待 promise 返回处理结果。这意味着for循环中的await 应该按顺序执行。

结果正如你所预料的那样。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
“Start”;
“Apple: 27;
“Grape: 0;
“Pear: 14;
“End”;

这种行为适用于大多数循环(比如whilefor-of循环)…

但是它不能处理需要回调的循环,如forEachmapfilterreduce。在接下来的几节中,我们将研究await 如何影响forEach、map和filter

在 forEach 循环中使用 await

首先,使用 forEach 对数组进行遍历。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const forEach = _ => {
  console.log('start');

  fruitsToGet.forEach(fruit => {
    //...
  })

  console.log('End')
}

接下来,我们将尝试使用getNumFruit获取水果数量。 (注意回调函数中的async关键字。我们需要这个async关键字,因为await在回调函数中)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const forEachLoop = _ => {
  console.log('Start');

  fruitsToGet.forEach(async fruit => {
    const numFruit = await getNumFruit(fruit);
    console.log(numFruit)
  });

  console.log('End')
}

我期望控制台打印以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
“Start”;27;0;14;
“End”;

但实际结果是不同的。在forEach循环中等待返回结果之前,JavaScrip先执行了 console.log('End')。

实际控制台打印如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
‘Start’
‘End’
‘27’
‘0’
‘14

JavaScript 中的 forEach不支持 promise 感知,也不支持 asyncawait,所以不能在 forEach 使用 await

在 map 中使用 await

如果在map中使用await, map 始终返回promise数组,这是因为异步函数总是返回promise

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const mapLoop = async _ => {
  console.log('Start')
  const numFruits = await fruitsToGet.map(async fruit => {
    const numFruit = await getNumFruit(fruit);
    return numFruit;
  })

  console.log(numFruits);

  console.log('End')
}

“Start”;[Promise, Promise, Promise];
“End”;

如果你在 map 中使用 awaitmap 总是返回promises,你必须等待promises 数组得到处理。 或者通过await Promise.all(arrayOfPromises)来完成此操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const mapLoop = async _ => {
  console.log('Start');

  const promises = fruitsToGet.map(async fruit => {
    const numFruit = await getNumFruit(fruit);
    return numFruit;
  });

  const numFruits = await Promise.all(promises);
  console.log(numFruits);

  console.log('End')
}

运行结果如下:

如果你愿意,可以在promise 中处理返回值,解析后的将是返回的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const mapLoop = _ => {
  // ...
  const promises = fruitsToGet.map(async fruit => {
    const numFruit = await getNumFruit(fruit);
    return numFruit + 100
  })
  // ...
}

“Start”;[127, 100, 114];
“End”;

在 filter 循环中使用 await

当你使用filter时,希望筛选具有特定结果的数组。假设过滤数量大于20的数组。

如果你正常使用filter (没有 await),如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const filterLoop =  _ => {
  console.log('Start')

  const moreThan20 =  fruitsToGet.filter(async fruit => {
    const numFruit = await fruitBasket[fruit]
    return numFruit > 20
  })

  console.log(moreThan20) 
  console.log('END')
}

运行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Start
["apple"]
END

filter 中的await不会以相同的方式工作。 事实上,它根本不起作用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const filterLoop = async _ => {
  console.log('Start')

  const moreThan20 =  await fruitsToGet.filter(async fruit => {
    const numFruit = fruitBasket[fruit]
    return numFruit > 20
  })

  console.log(moreThan20) 
  console.log('END')
}

// 打印结果
Start
["apple", "grape", "pear"]
END

为什么会发生这种情况?

当在filter 回调中使用await时,回调总是一个promise。由于promise 总是真的,数组中的所有项都通过filter 。在filter 使用 await类以下这段代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const filtered = array.filter(true);

filter使用 await 正确的三个步骤

  1. 使用map返回一个promise 数组
  2. 使用 await 等待处理结果
  3. 使用 filter 对返回的结果进行处理
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const filterLoop = async _ => {
  console.log('Start');

  const promises = await fruitsToGet.map(fruit => getNumFruit(fruit));

  const numFruits = await Promise.all(promises);

  const moreThan20 = fruitsToGet.filter((fruit, index) => {
    const numFruit = numFruits[index];
    return numFruit > 20;
  })

  console.log(moreThan20);
  console.log('End')
} 

在 reduce 循环中使用 await

如果想要计算 fruitBastet中的水果总数。 通常,你可以使用reduce循环遍历数组并将数字相加。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const reduceLoop = _ => {
  console.log('Start');

  const sum = fruitsToGet.reduce((sum, fruit) => {
    const numFruit = fruitBasket[fruit];
    return sum + numFruit;
  }, 0)

  console.log(sum)
  console.log('End')
}

运行结果:

当你在 reduce 中使用await时,结果会变得非常混乱。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 const reduceLoop = async _ => {
  console.log('Start');

  const sum = await fruitsToGet.reduce(async (sum, fruit) => {
    const numFruit = await fruitBasket[fruit];
    return sum + numFruit;
  }, 0)

  console.log(sum)
  console.log('End')
}

[object Promise]14 是什么 鬼??

剖析这一点很有趣。

  1. 在第一次遍历中,sum0numFruit27(通过getNumFruit(apple)的得到的值),0 + 27 = 27
  2. 在第二次遍历中,sum是一个promise。 (为什么?因为异步函数总是返回promises!)numFruit0.promise 无法正常添加到对象,因此JavaScript将其转换为[object Promise]字符串。 [object Promise] + 0object Promise] 0
  3. 在第三次遍历中,sum 也是一个promisenumFruit14. [object Promise] + 14[object Promise] 14

解开谜团!

这意味着,你可以在reduce回调中使用await,但是你必须记住先等待累加器!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const reduceLoop = async _ => {
  console.log('Start');

  const sum = await fruitsToGet.reduce(async (promisedSum, fruit) => {
    const sum = await promisedSum;
    const numFruit = await fruitBasket[fruit];
    return sum + numFruit;
  }, 0)

  console.log(sum)
  console.log('End')
}

但是从上图中看到的那样,await 操作都需要很长时间。 发生这种情况是因为reduceLoop需要等待每次遍历完成promisedSum

有一种方法可以加速reduce循环,如果你在等待promisedSum之前先等待getNumFruits(),那么reduceLoop只需要一秒钟即可完成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const reduceLoop = async _ => {
  console.log('Start');

  const sum = await fruitsToGet.reduce(async (promisedSum, fruit) => {
    const numFruit = await fruitBasket[fruit];
    const sum = await promisedSum;
    return sum + numFruit;
  }, 0)

  console.log(sum)
  console.log('End')
}

这是因为reduce可以在等待循环的下一个迭代之前触发所有三个getNumFruit promise。然而,这个方法有点令人困惑,因为你必须注意等待的顺序。

在reduce中使用wait最简单(也是最有效)的方法是

  1. 使用map返回一个promise 数组
  2. 使用 await 等待处理结果
  3. 使用 reduce 对返回的结果进行处理
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    const reduceLoop = async _ => {
    console.log('Start');

    const promises = fruitsToGet.map(getNumFruit);
    const numFruits = await Promise.all(promises);
    const sum = numFruits.reduce((sum, fruit) => sum + fruit);

    console.log(sum)
    console.log('End')
    }

这个版本易于阅读和理解,需要一秒钟来计算水果总数。

从上面看出来什么

  1. 如果你想连续执行await调用,请使用for循环(或任何没有回调的循环)。
  2. 永远不要和forEach一起使用await,而是使用for循环(或任何没有回调的循环)。
  3. 不要在 filterreduce 中使用 await,如果需要,先用 map 进一步骤处理,然后在使用 filterreduce进行处理。

文章来自 sf 的小智,有兴趣可以关注他的公众号「大迁世界」 原文链接:https://segmentfault.com/a/1190000019357943

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端桃园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nat. Commun. | 基于回归的深度学习从病理切片预测分子生物标志物
今天为大家介绍的是来自Jakob Nikolas Kather团队的一篇论文。深度学习(DL)能够从癌症组织病理学中预测生物标志物。目前,已有几种获得临床批准的应用采用了这项技术。然而,大多数方法预测的是分类标签,而生物标志物往往是连续的测量值。作者假设基于回归的深度学习在性能上超过了基于分类的深度学习。因此开发并评估了一种自监督的、基于注意力的、弱监督回归方法。
DrugAI
2024/03/18
4470
Nat. Commun. | 基于回归的深度学习从病理切片预测分子生物标志物
NC | MSInuit:基于人工智能的预筛选工具,用于从结直肠癌组织学切片中检测MSI
错配修复缺陷(dMMR)/微卫星不稳定性(MSI)是结直肠癌(CRC)的关键生物标志物。目前建议对CRC患者进行MSI状态的普遍筛查,但这增加了病理学家的工作量,延误了治疗决策。深度学习可能减轻dMMR/MSI检测的难度,加快肿瘤学家在临床实践中做出决策的速度,但目前尚未对临床认可的工具进行全面验证。2023年11月,《Nature Communications》发表了一种基于人工智能(AI)的预筛查工具——MSInuit,用于从苏木精-伊红 (H&E) 染色的载玻片中检测MSI。
尐尐呅
2023/12/21
2910
NC | MSInuit:基于人工智能的预筛选工具,用于从结直肠癌组织学切片中检测MSI
6+免疫相关lncRNA特征构建!
NSCLC (非小细胞肺癌)患者的肿瘤突变负荷相对较高,意味着可以产生更多的新抗原,从而激活机体的免疫系统,产生抗肿瘤的T细胞应答。了解NSCLC患者T细胞特征并与临床结局关联,可以帮助提高免疫治疗的疗效。
作图丫
2022/03/29
3490
6+免疫相关lncRNA特征构建!
深度学习也能用来预测癌症预后?快来看看吧!
估计肿瘤患者的疾病进展对医生来说是非常有价值的。然而,目前的临床方法并不能有效地利用可用于癌症患者的大量多模态数据。为了解决这一问题,作者构建了一个基于多模式神经网络的模型,利用临床数据、mRNA表达数据、microRNA表达数据和组织病理学全载玻片图像(WSIs)来预测20种不同癌症类型患者的生存率。
作图丫
2022/03/29
2.2K0
深度学习也能用来预测癌症预后?快来看看吧!
9+!通过深度学习从结直肠癌的组织学中预测淋巴结状态
近几年深度学习一直是研究热点,今天小编为大家带来的这篇文章,研究了通过深度学习模型从常规组织学切片和临床数据中提取的图像特征是否可用于预测 CRC 淋巴结转移 (LNM)。文章发表在《European Journal of Cancer》上,影响因子为9.162,文章题目为Deep learning can predict lymph node status directly from histology in colorectal cancer。
作图丫
2022/06/24
3130
9+!通过深度学习从结直肠癌的组织学中预测淋巴结状态
7+分基于深度学习筛选组织学特征预测甲状腺肿瘤亚型!
甲状腺肿瘤可大致分为乳头状癌或滤泡型肿瘤。典型甲状腺乳头状癌(PTC-c)为浸润性,常转移到淋巴结。由于观察者间的高变异性和观察到的行为异质性,各种滤泡模式肿瘤的定义最近受到了关注。
作图丫
2022/04/28
3640
7+分基于深度学习筛选组织学特征预测甲状腺肿瘤亚型!
Nat Commun. | 单细胞+空间转录联合分析肿瘤微环境浸润细胞间的相互作用
通过单细胞测序可以最大程度的反映细胞的异质性,发现新的细胞群和细胞亚群,并为阐明细胞状态转换的调控机理提供了技术保障。但是,常规单细胞转录组测序技术丢失了细胞在原组织中至关重要的空间位置信息,而单细胞和空间转录组结合可以弥补这个遗憾,帮助研究人员探索肿瘤异质性和肿瘤微环境(TEM)的复杂相互作用。
用户6317549
2022/05/25
3K0
Nat Commun. | 单细胞+空间转录联合分析肿瘤微环境浸润细胞间的相互作用
14分+的利用深度学习从切除淋巴结组织病理学图像预测胃癌预后!
N分期是预后评估和基于分期的癌症治疗策略决策的决定性因素。目视检查完整淋巴结的整个切片是目前病理学家计算转移淋巴结(MLNs)数量的主要方法,即使在同一个N期,患者的预后也有很大差异。
作图丫
2022/04/28
6480
14分+的利用深度学习从切除淋巴结组织病理学图像预测胃癌预后!
Nature 子刊!从整张幻灯片图像预测肿瘤RNA-Seq表达的深度学习模型
肿瘤活检切片的组织学分析是肿瘤学中的重要工具,可提供高分辨率的肿瘤图谱,帮助病理学家确定诊断和分级。
作图丫
2022/04/28
1.1K0
Nature 子刊!从整张幻灯片图像预测肿瘤RNA-Seq表达的深度学习模型
Nature Medicine | 基于群体学习的分散式人工智能在癌症组织病理学中的应用
本文介绍由英国利兹大学圣詹姆斯医学研究所、德国国家肿瘤疾病中心的Jakob Nikolas Kather住院医师团队发表在Nature Medicine的研究成果。作者展示了群体学习(SL)在5000多名患者的千兆像素组织病理学图像的大型多中心数据集中上的成功应用。作者表明,使用SL训练的人工智能(AI)模型可以直接从结直肠癌H&E染色的病理切片上预测BRAF突变状态和微卫星不稳定性。作者在北爱尔兰、德国和美国三类患者人群中训练AI模型,并在来自英国的两个独立数据集中验证了预测性能。数据显示,经过SL训练的AI模型优于大多数本地训练的模型,并与在合并数据集上训练的模型表现相同。此外,作者展示了基于SL的AI模型是数据高效的。未来,SL可用于训练分布式AI模型,用于任何组织病理学图像分析任务,从而无需数据传输。
DrugAI
2022/06/10
7860
Nature Medicine | 基于群体学习的分散式人工智能在癌症组织病理学中的应用
Nat. Med. | 基于视觉和语言的基础模型,用于病理图像分析
今天为大家介绍的是来自James Zou 团队的一篇论文。公开可用的医学图像缺乏注释,成为计算研究和教育创新的主要障碍。与此同时,许多医生在医学Twitter等公共论坛上分享了匿名化的图像和大量知识。在这里,作者利用这些群体平台来策划OpenPath,这是一个包含208,414张病理图像与自然语言描述配对的大型数据集。通过开发病理语言-图像预训练(PLIP)来展示这个数据资源的价值,这是一个具有图像和文本理解能力的多模式人工智能,它在OpenPath上进行了训练。
DrugAI
2023/11/08
9930
Nat. Med. | 基于视觉和语言的基础模型,用于病理图像分析
Nat. Bio. Eng. | 社论:情境学习几乎能满足你所有需求
2022年12月23日,《Nature Biomedical Engineering》编辑部发表社论“Contextual learning is nearly all you need”,对利用上下文信息与大型未标记多模态数据集的transformer和图神经网络在计算医学领域的可能性进行了论述。
DrugAI
2023/02/17
3190
Nat. Bio. Eng. | 社论:情境学习几乎能满足你所有需求
【他山之石】CVPR 2024 | 知识感知注意力!用于组织病理学全幻灯片图像分析!
“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注!
马上科普尚尚
2024/05/14
5570
【他山之石】CVPR 2024 | 知识感知注意力!用于组织病理学全幻灯片图像分析!
AI Lab医疗AI又一成功探索——深度学习助力靶向疗法相关基因预测
| 导语   近期腾讯AI Lab医疗AI中心和南方医院合作发表一项基于病理图片预测微卫星不稳定性的可解释深度学习模型研究成果,助力分子病理和精准医疗的研究。 微卫星不稳定性(Microsatellite instability,MSI)是一种基因组不稳定的表型,发生在DNA错配修复缺陷(dMMR)的肿瘤中,据报道是遗传性林奇综合征(LS)相关癌症的标志。MSI已被确定为II期结直肠癌(CRC)辅助化疗的有利预后因素。更重要的是,最近的研究表明,MSI或dMMR与增加的新生抗原(Neoantigen)
腾讯大讲堂
2020/10/14
1.3K0
Nat. Commun. | 俞章盛/张岳团队开发基于组织病理学图像的癌症诊断和生存预测AI基础模型
组织病理学图像分析被认为是癌症诊断的金标准,但依赖于病理学家的传统人工诊断方法既耗时又繁重,如果诊断经验不足还会导致漏诊和误诊,严重影响患者的后续治疗。计算病理学和人工智能(AI)的进步为使用十亿像素切片进行客观诊断、预后和治疗反应预测提供了可能。虽然基于深度学习的计算病理学在各种病理任务中显示出良好的前景,但自然图像和病理图像之间的内在差异、训练数据的稀缺性、不同癌症类型的形态学差异等因素影响了模型的分析性能和跨癌症任务的适应。相比之下,计算病理学的基础模型(训练策略包括监督学习和自监督学习)是通过对大量无监督的数字病理图像进行预训练而建立,即使面对多个任务也能始终实现高性能。
DrugAI
2025/03/20
1040
Nat. Commun. | 俞章盛/张岳团队开发基于组织病理学图像的癌症诊断和生存预测AI基础模型
Nat. Med. | 基于遗传学原发部位未知癌症的分类和治疗反应预测
今天为大家介绍的是来自Alexander Gusev团队的一篇论文。原发部位未知癌症(Cancer of unknown primary,CUP)是一种无法追溯到其原发部位的癌症,占所有癌症的3-5%。CUP缺乏已建立的靶向治疗方法,导致普遍预后不佳。作者开发了OncoNPC,这是一个基于机器学习的分类器,使用来自三个机构的22种癌症类型中的36,445个肿瘤的定向次世代测序(NGS)数据进行训练。肿瘤NGS基础的原发癌类型分类器(OncoNPC)在保留的肿瘤样本上取得了加权F1分数为0.942的高置信度预测(≥ 0.9)。
DrugAI
2023/11/06
2250
Nat. Med. | 基于遗传学原发部位未知癌症的分类和治疗反应预测
多组学数据挖掘结直肠癌的预后与免疫应答潜在的预测标记
现在的数据挖掘文章越来越难了吗,本篇文章影响因子只有1分,但是图表内容其实还挺全的,「下面咱们解析一下看看这篇低分文章干了什么」。
生信技能树
2022/12/16
7360
多组学数据挖掘结直肠癌的预后与免疫应答潜在的预测标记
结直肠癌中的B细胞单细胞图谱及临床情况
结果:确定了5种不同的B细胞亚型及其标记基因、分布模式和功能特性。肿瘤部位的IgG浆细胞比例高于相邻正常黏膜组织。肿瘤组织中产生CXCL13的CD8+ T细胞可以促进三级淋巴结构(TLS) B细胞的形成,而CCL28-CCR10轴是IgG浆细胞从TLS外周向肿瘤基质迁移的关键。
生信技能树jimmy
2023/02/10
8760
结直肠癌中的B细胞单细胞图谱及临床情况
人工智能 | Nature | 针对精准肿瘤学的视觉-语言基础模型
◉ 我们开发了一个基于多模态变压器架构的视觉-语言基础模型作为网络主干。◉ 模型预训练包括两个连续阶段。◉ 首先,MUSK 在来自 11,577 名患者的近 33,000 张全切片组织病理学扫描图像和一亿个与病理相关的文本标记上进行了预训练。◉ 这些图像是代表 33 种肿瘤类型的图像。◉ MUSK 模型改编自 BEiT3(参考文献 21)架构,包含共享的自注意力块和用于视觉和语言输入的两个独立专家;使用掩码建模实现了预训练。◉ 其次,MUSK 使用对比学习对来自模型 QUILT-1M 的一百万张图像-文本对进行了多模态对齐预训练。◉ 通用临床应用。◉ 一旦预训练完成,MUSK 可以用于各种下游任务,并且只需要少量或不需要进一步的训练。◉ 重要的是,我们使用全切片图像和临床报告评估了 MUSK 的预测能力,包括复发、预后和免疫治疗反应预测。◉ MUSK 在视觉-语言基础模型方面显著优于最先进的模型,包括 PLIP15、QUILT-1M46、BiomedCLIP47 和 CONCH16。◉ b 图中的插图、黑色素瘤、预后、肺癌和胃食管癌是使用 BioRender 制作的(https://biorender.com)。
生信菜鸟团
2025/02/27
2100
人工智能 | Nature | 针对精准肿瘤学的视觉-语言基础模型
Nat. Commun. | 源于病理切片的可解释性图像特征指导分子表型预测
今天给大家介绍的是数字病理学初创公司PathAI的研究人员近期发表在Nature Communications上的一项研究。作者提出一种从全玻片图像中利用可解释的图像特征(Human-interpretable Image Features,HIFs)预测临床相关分子表型的方法。实验证明,这些HIFs与肿瘤微环境标志物相关,并能预测不同的分子特征,包括四种免疫检查点蛋白的表达和同源重组缺陷,其性能可与 "黑盒 "方法相媲美。该方法为肿瘤微环境的组成和空间结构提供了一个全面、定量且可解释的窗口。
DrugAI
2021/03/18
2.1K0
Nat. Commun. | 源于病理切片的可解释性图像特征指导分子表型预测
推荐阅读
Nat. Commun. | 基于回归的深度学习从病理切片预测分子生物标志物
4470
NC | MSInuit:基于人工智能的预筛选工具,用于从结直肠癌组织学切片中检测MSI
2910
6+免疫相关lncRNA特征构建!
3490
深度学习也能用来预测癌症预后?快来看看吧!
2.2K0
9+!通过深度学习从结直肠癌的组织学中预测淋巴结状态
3130
7+分基于深度学习筛选组织学特征预测甲状腺肿瘤亚型!
3640
Nat Commun. | 单细胞+空间转录联合分析肿瘤微环境浸润细胞间的相互作用
3K0
14分+的利用深度学习从切除淋巴结组织病理学图像预测胃癌预后!
6480
Nature 子刊!从整张幻灯片图像预测肿瘤RNA-Seq表达的深度学习模型
1.1K0
Nature Medicine | 基于群体学习的分散式人工智能在癌症组织病理学中的应用
7860
Nat. Med. | 基于视觉和语言的基础模型,用于病理图像分析
9930
Nat. Bio. Eng. | 社论:情境学习几乎能满足你所有需求
3190
【他山之石】CVPR 2024 | 知识感知注意力!用于组织病理学全幻灯片图像分析!
5570
AI Lab医疗AI又一成功探索——深度学习助力靶向疗法相关基因预测
1.3K0
Nat. Commun. | 俞章盛/张岳团队开发基于组织病理学图像的癌症诊断和生存预测AI基础模型
1040
Nat. Med. | 基于遗传学原发部位未知癌症的分类和治疗反应预测
2250
多组学数据挖掘结直肠癌的预后与免疫应答潜在的预测标记
7360
结直肠癌中的B细胞单细胞图谱及临床情况
8760
人工智能 | Nature | 针对精准肿瘤学的视觉-语言基础模型
2100
Nat. Commun. | 源于病理切片的可解释性图像特征指导分子表型预测
2.1K0
相关推荐
Nat. Commun. | 基于回归的深度学习从病理切片预测分子生物标志物
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验