Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
在 torch.vmap 中高效处理内部张量创建_创想鸟

在 torch.vmap 中高效处理内部张量创建

在 torch.vmap 中高效处理内部张量创建

理解 torch.vmap 与内部张量创建的挑战

torch.vmap 是 PyTorch 提供的一个强大工具,它允许我们将一个处理单个样本的函数(即非批处理函数)转换为一个能够高效处理一批样本的函数,而无需手动管理批处理维度。这在编写通用代码和加速计算方面非常有用。然而,当被 vmap 向量化的函数内部需要创建新的张量,并且这些张量的形状依赖于批处理输入的形状时,就会遇到一个常见的陷阱。

考虑以下场景:我们有一个函数 polycompanion,它接收一个多项式系数张量,并计算其伴随矩阵。伴随矩阵的维度取决于多项式的次数。

import torchpoly_batched = torch.tensor([[1, 2, 3, 4], [1, 2, 3, 4]], dtype=torch.float32)def polycompanion(polynomial):    # polynomial.shape[-1] 是多项式系数的个数,例如 [a, b, c, d] 代表 ax^3 + bx^2 + cx + d    # 次数 deg = 系数个数 - 1 - 1 = 系数个数 - 2 (如果最后一个系数是常数项)    deg = polynomial.shape[-1] - 2    # 尝试创建伴随矩阵    companion = torch.zeros((deg + 1, deg + 1), dtype=torch.float32)    # 填充单位矩阵部分    companion[1:, :-1] = torch.eye(deg, dtype=torch.float32)    # 填充最后一列    # 注意这里 polynomial[:-1] 表示除了最后一个系数以外的所有系数    # polynomial[-1] 表示最后一个系数    companion[:, -1] = -1. * polynomial[:-1] / polynomial[-1]    return companion# 尝试使用 vmap 向量化polycompanion_vmap = torch.vmap(polycompanion)try:    print(polycompanion_vmap(poly_batched))except Exception as e:    print(f"Initial attempt failed: {e}")

上述代码在执行 polycompanion_vmap(poly_batched) 时会失败。原因是 polycompanion 函数内部通过 torch.zeros((deg+1, deg+1)) 创建了一个新的 companion 张量。尽管 deg 是从 polynomial(一个批处理输入)派生出来的,但 torch.zeros 本身创建的是一个普通的、非批处理的张量。当 vmap 试图对这个非批处理的 companion 张量执行批处理操作(例如,将其与从 polynomial 派生的批处理张量进行索引或赋值)时,就会出现维度不匹配或类型不兼容的问题,因为 vmap 期望所有参与运算的张量都带有批处理维度。

为什么 torch.zeros 不会自动批处理?

torch.vmap 的核心机制是跟踪批处理维度,并将操作提升到批处理层面。它能识别作为 vmap 输入的张量及其通过各种张量操作(如加法、乘法、切片等)派生出的张量,并为它们自动添加和管理批处理维度。然而,像 torch.zeros 这种从零开始创建新张量的操作,其默认行为是创建一个标准张量,不包含任何批处理维度信息。即使其形状参数 (deg+1, deg+1) 是基于批处理输入计算得出的,torch.zeros 也无法“感知”到外部的 vmap 上下文,从而无法自动生成一个 BatchedTensor。

torch.zeros_like 是一个例外,因为它基于一个已存在的张量来创建新张量。如果这个已存在的张量是 BatchedTensor,那么 torch.zeros_like 也能创建出一个 BatchedTensor。但在本例中,我们没有一个现成的 BatchedTensor 可以作为 zeros_like 的模板来创建 companion。

规避方案:预分配与外部传递

一种可行的(但不理想的)规避方法是,在调用 vmap 之前,手动创建一个带有批处理维度的 companion 张量,并将其作为函数的额外输入传递给 vmap。

def polycompanion_workaround(polynomial, companion_template):    # 注意:这里的 deg 现在从 companion_template 的形状推断,因为它已经有了批处理维度    deg = companion_template.shape[-1] - 1     # 在传入的 companion_template 上进行就地修改    companion_template[1:, :-1] = torch.eye(deg, dtype=torch.float32)    companion_template[:, -1] = -1. * polynomial[:-1] / polynomial[-1]    return companion_templatepolycompanion_vmap_workaround = torch.vmap(polycompanion_workaround)# 预先创建批处理的 companion 模板# poly_batched.shape[0] 是批次大小# poly_batched.shape[-1]-1 是伴随矩阵的行/列维度companion_init_shape = (poly_batched.shape[0], poly_batched.shape[-1] - 1, poly_batched.shape[-1] - 1)pre_batched_companion = torch.zeros(companion_init_shape, dtype=torch.float32)print("--- Workaround Output ---")print(polycompanion_vmap_workaround(poly_batched, pre_batched_companion))

这种方法虽然能够正确输出结果,但存在明显缺点:

函数签名改变:polycompanion 函数现在需要一个额外的 companion_template 参数,这破坏了其原始的、独立处理单个样本的语义。外部依赖:在调用 vmap 之前,必须手动计算并创建具有正确批处理维度的 pre_batched_companion 张量,增加了代码的复杂性和耦合性。

推荐解决方案:利用 clone 和 concatenate

为了在 vmap 上下文中优雅地创建和填充张量,我们可以避免在非批处理的 torch.zeros 张量上进行就地修改。相反,我们将伴随矩阵视为由两部分组成:一个包含单位矩阵的左侧部分,以及一个由多项式系数计算得出的右侧(最后一列)部分。然后,我们分别构建这两部分,并使用 torch.concatenate 将它们合并。

关键在于:

静态部分:对于伴随矩阵中相对固定的部分(如单位矩阵),我们可以先在一个非批处理的 torch.zeros 张量上构建。动态部分:对于依赖于批处理输入的部分(如最后一列),我们直接从批处理输入 polynomial 计算。合并:使用 torch.concatenate 将这两部分合并。concatenate 是一种张量操作,vmap 能够很好地处理其批处理行为。

以下是改进后的 polycompanion 函数:

def polycompanion_optimized(polynomial):    deg = polynomial.shape[-1] - 2    # 1. 创建一个基础的非批处理张量来填充单位矩阵部分    # 这是一个临时的、非批处理的张量    base_matrix = torch.zeros((deg + 1, deg + 1), dtype=torch.float32)    base_matrix[1:, :-1] = torch.eye(deg, dtype=torch.float32)    # 2. 提取 base_matrix 的左侧部分,并进行克隆    # clone() 创建了一个新的张量,虽然它仍然是非批处理的,    # 但在 vmap 上下文中,当它与批处理张量拼接时,vmap 会正确处理    left_part = base_matrix[:, :-1].clone()    # 3. 计算伴随矩阵的最后一列    # 这一部分完全从批处理输入 polynomial 派生,因此 vmap 会将其视为批处理张量    # polynomial[:-1] 是 (deg+1,) 形状    # polynomial[-1] 是标量    # 结果是一个 (deg+1,) 形状的张量    last_column_values = -1. * polynomial[:-1] / polynomial[-1]    # 4. 扩展最后一列的维度,使其可以与 left_part 进行拼接    # last_column_values 是 (deg+1,),我们需要将其变为 (deg+1, 1)    last_column_reshaped = last_column_values[:, None]     # 5. 使用 concatenate 组合左右两部分    # vmap 会识别 left_part 和 last_column_reshaped,并为它们在批次维度上执行拼接    final_companion = torch.concatenate([left_part, last_column_reshaped], dim=1)    return final_companionpolycompanion_vmap_optimized = torch.vmap(polycompanion_optimized)print("n--- Optimized Solution Output ---")print(polycompanion_vmap_optimized(poly_batched))

输出:

tensor([[[ 0.0000,  0.0000, -0.2500],         [ 1.0000,  0.0000, -0.5000],         [ 0.0000,  1.0000, -0.7500]],        [[ 0.0000,  0.0000, -0.2500],         [ 1.0000,  0.0000, -0.5000],         [ 0.0000,  1.0000, -0.7500]]])

这个解决方案成功地生成了批处理的伴随矩阵,同时保持了 polycompanion_optimized 函数的简洁性,使其能够独立处理单个样本,并且不需要外部预分配张量。

注意事项与最佳实践

函数式编程思维:在使用 torch.vmap 时,尽量采用函数式编程的思维,即函数主要通过返回新张量来完成操作,而不是通过就地修改输入张量。这有助于 vmap 更好地跟踪张量的依赖关系和批处理维度。避免在 vmap 内部进行就地修改:除非你确切知道自己在做什么,并且只对批处理输入进行就地修改,否则应避免在 vmap 内部对非批处理张量进行就地修改。clone() 的作用:在上述解决方案中,clone() 是关键。它创建了一个 base_matrix 切片的新副本。虽然 base_matrix 本身是非批处理的,但通过 clone() 得到的 left_part 可以被 concatenate 操作正确地与批处理的 last_column_reshaped 结合。维度匹配:当使用 torch.concatenate 或 torch.stack 时,确保所有参与拼接的张量在非拼接维度上形状一致。[:, None] 技巧常用于为张量添加一个维度,使其符合拼接要求。性能考量:虽然 concatenate 方案解决了功能问题,但频繁创建和拼接中间张量可能会带来一定的性能开销。对于极致性能敏感的场景,可能需要权衡 vmap 的便利性与手动批处理的优化潜力。然而,对于大多数情况,vmap 带来的代码简化和潜在加速(尤其是在支持的后端)是值得的。

总结

在 torch.vmap 中处理函数内部的张量创建是一个常见的挑战。通过理解 vmap 对批处理张量的期望,并采用 clone() 结合 torch.concatenate 的策略,我们能够优雅地构建出所需的批处理张量,而无需妥协函数的简洁性或引入复杂的外部依赖。这种方法体现了在 PyTorch 中进行高效张量操作的灵活性和强大功能,是掌握 torch.vmap 的一个重要技巧。

以上就是在 torch.vmap 中高效处理内部张量创建的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1377848.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Pandas DataFrame中基于条件创建新列的字符串处理技巧
上一篇 2025年12月14日 18:08:08
Tkinter Entry 控件在获取焦点时自动清除默认文本的教程
下一篇 2025年12月14日 18:08:20

相关推荐

  • Java Stream API处理嵌套对象字段求和:以购物车条目为例

    Java Stream API处理嵌套对象字段求和:以购物车条目为例Java Stream API处理嵌套对象字段求和:以购物车条目为例Java Stream API处理嵌套对象字段求和:以购物车条目为例Java Stream API处理嵌套对象字段求和:以购物车条目为例

    本文深入探讨如何利用Java Stream API高效地对复杂嵌套对象中的数值字段进行聚合求和。通过一个购物车条目的具体案例,演示了如何从多层级对象中提取并累加BigDecimal类型的费用数据,强调了mapToDouble、BigDecimal的精确计算以及在处理可能为空的字段时,结合注解进行nu…

    2026年9月27日 • 用户投稿
    000
  • 抖音带货橱窗怎么弄?抖音怎么开通橱窗

    抖音平台已成为电商盈利的关键渠道。抖音带货橱窗作为其核心功能,为众多电商从业者提供了高效的销售渠道。本文将详细介绍如何创建抖音带货橱窗,助您实现电商收益。 一、抖音带货橱窗的基础定义 抖音带货橱窗是商家通过平台开设的展示区,用于陈列商品信息并促成销售。橱窗涵盖服饰、美妆、家居、食品等多种商品类型,为…

    2026年9月27日
    000
  • MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法

    MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法

    答案:可通过桌面图标、访达、拖拽至废纸篓、菜单栏图标、快捷键或终端命令安全弹出外置设备。具体操作包括右键点击桌面图标选择推出、在访达侧边栏点击弹出按钮、拖动设备图标到废纸篓、从菜单栏状态图标选择弹出、使用Command+E快捷键,或在终端输入diskutil unmountDisk命令完成弹出,确保…

    2026年9月27日 • 用户投稿
    000
  • Stripe Webhook签名验证错误解析与中间件顺序优化

    Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化

    Stripe Webhook签名验证时出现”Payload must be provided as a string or a Buffer”错误,通常是由于Express应用中全局express.json()中间件过早解析了原始请求体。本文将深入解析此问题,并提供通过调整中…

    2026年9月27日 • 用户投稿
    000
  • OpenAI 推出全新 AI 功能 ChatGPT Pulse

    OpenAI 推出全新 AI 功能 ChatGPT PulseOpenAI 推出全新 AI 功能 ChatGPT PulseOpenAI 推出全新 AI 功能 ChatGPT PulseOpenAI 推出全新 AI 功能 ChatGPT Pulse

    openai 宣布上线全新功能 chatgpt pulse,标志着 chatgpt 正式从被动响应式对话工具进化为具备主动服务能力的个性化助手。该功能目前以预览版本的形式率先登陆移动端,仅对 pro 订阅用户(每月 200 美元)开放使用权限。 据官方介绍,Pulse 是 ChatGPT 全新打造的…

    2026年9月27日 • 用户投稿
    100
  • windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法

    windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法

    首先通过命令提示符输入wmic memphysical get maxcapacity获取主板最大支持内存,再结合CPU-Z等工具或官网规格确认具体参数,最后用任务管理器查看插槽使用情况以规划升级方案。 如果您计划升级电脑内存,但不确定主板或系统最大支持多大的内存容量,则需要准确查询硬件的限制。以下…

    2026年9月27日 • 用户投稿
    100
  • sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置

    sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置

    确保”auto_indent”: true已启用,使新行继承上一行缩进;2. 检查并正确设置文件语法类型,确保语言识别无误;3. 推荐配置”translate_tabs_to_spaces”: true和”tab_size”: …

    2026年9月27日 • 用户投稿
    200
  • JScrollPane滚动条自动更新行为的控制策略与实践

    JScrollPane滚动条自动更新行为的控制策略与实践JScrollPane滚动条自动更新行为的控制策略与实践JScrollPane滚动条自动更新行为的控制策略与实践JScrollPane滚动条自动更新行为的控制策略与实践

    本教程详细探讨如何有效控制JScrollPane的滚动条自动更新行为,特别是在内容重绘后避免意外滚动。文章重点介绍通过设置滚动条策略(如ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER)来禁用滚动条或其自动更新,并简要提及Viewport尺寸调整的替代方法…

    2026年9月27日 • 用户投稿
    000
  • 京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!

    京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!

    在电商迅猛发展的当下,京东拼购为大量商家开辟了一个充满潜力的销售渠道。然而,若想成功入驻该平台,商家必须清楚了解其入驻门槛及相关费用信息。这不仅有助于提前筹备相关材料,还能有效提升审核通过率,助力商家快速切入这一活跃市场,开启线上增长新篇章。 一、京东拼购入驻条件 (一)基本资质要求 1. 持有有效…

    2026年9月27日 • 用户投稿
    200
  • linux Kernel

    linux Kernellinux Kernellinux Kernellinux Kernel

    探索linux内核的奥秘,从基础到高级,逐步揭开其神秘面纱。无论你是初学者还是资深开发者,本文都将为你提供深入了解linux内核所需的知识和工具。 以上就是linux Kernel的详细内容,更多请关注创想鸟其它相关文章!

    2026年9月27日 • 用户投稿
    100
  • Codename One:实现安全的数字密码输入框

    Codename One:实现安全的数字密码输入框Codename One:实现安全的数字密码输入框Codename One:实现安全的数字密码输入框Codename One:实现安全的数字密码输入框

    本文详细介绍了在Codename One中创建既能接受纯数字输入又能进行密码遮罩的文本输入框的方法。通过使用位或运算符(|)组合TextArea.NUMERIC和TextArea.PASSWORD约束,可以有效地实现这一需求,避免了链式调用constraint()的常见误区,从而提升用户体验和输入安…

    2026年9月27日 • 用户投稿
    100
  • 苹果 A19 芯片内部特写:架构微调带来能效提升

    苹果 A19 芯片内部特写:架构微调带来能效提升苹果 A19 芯片内部特写:架构微调带来能效提升苹果 A19 芯片内部特写:架构微调带来能效提升苹果 A19 芯片内部特写:架构微调带来能效提升

    苹果最新一代的a19芯片在芯片制造工艺方面较a18有显著提升,近期一组显微照片首次揭示了iphone 17系列最新芯片的内部细节。 本次随iPhone 17发布亮相的A19及A19 Pro芯片,是苹果自研芯片设计的又一进步。尽管苹果方面针对性能提升作出多项官方承诺,但由ChipWise团队拍摄的So…

    2026年9月27日 • 用户投稿
    200
  • AZ录屏画笔使用技巧

    AZ录屏画笔使用技巧AZ录屏画笔使用技巧AZ录屏画笔使用技巧AZ录屏画笔使用技巧

    az屏幕录制是一款功能多样的录屏软件,除了提供常规的录屏操作外,还拥有许多实用的附加功能,比如在录制时可使用的画笔标注功能。 1、 打开手机中的AZ屏幕录制应用 2、 进入应用设置界面后向下滑动,找到“录制工具”相关选项 3、 开启画笔功能后,屏幕上将会出现画笔图标 笔魂AI 笔魂AI绘画-在线AI…

    2026年9月27日 • 用户投稿
    000
  • win8如何查看windows体验指数_Win8体验指数查看方法

    win8如何查看windows体验指数_Win8体验指数查看方法win8如何查看windows体验指数_Win8体验指数查看方法win8如何查看windows体验指数_Win8体验指数查看方法win8如何查看windows体验指数_Win8体验指数查看方法

    1、可通过控制面板或运行命令查看Windows体验指数。首先在控制面板中进入“系统和安全”→“操作中心”→“维护”→“查看性能信息”,即可查看总分及各硬件子分数;或使用“Win+R”输入“shell:games”打开游戏文件夹,右键空白处选择“属性”,直接查看Windows体验指数的基准分数和各项子…

    2026年9月27日 • 用户投稿
    100
  • 豆包AI如何实现智能排版 豆包AI文档自动格式化功能

    豆包AI提供的智能排版功能,能够显著提升文档处理效率。本文将详细介绍如何利用豆包AI的文档自动格式化能力,解决文档排版耗时的问题。我们将逐步解析使用该功能的过程,包括如何启用、输入内容以及完成格式化,以便用户能够轻松掌握并应用。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 …

    2026年9月27日
    100
  • VSCode如何实现代码片段云端同步 VSCode代码片段跨设备同步方案

    vscode实现代码片段云端同步的核心是将代码片段存储于云端并通过扩展或服务在多设备间同步;2. 可通过settings sync扩展结合github gist同步设置与代码片段;3. 可将代码片段文件夹置于dropbox、google drive等云存储服务中实现自动同步;4. 可使用git私有仓…

    2026年9月27日
    200
  • Java Swing GUI:构建交互式逻辑门(AND门示例)

    Java Swing GUI:构建交互式逻辑门(AND门示例)Java Swing GUI:构建交互式逻辑门(AND门示例)Java Swing GUI:构建交互式逻辑门(AND门示例)Java Swing GUI:构建交互式逻辑门(AND门示例)

    本文详细介绍了如何使用Java Swing构建一个简单的AND逻辑门GUI应用。通过结合JCheckBox作为输入和JLabel作为视觉输出,并利用ChangeListener监听组件状态变化,实现当两个复选框都被选中时显示“绿色”,否则显示“红色”的功能。教程涵盖了组件创建、事件监听以及将自定义面…

    2026年9月27日 • 用户投稿
    100
  • AI Overviews如何设置智能告警 AI Overviews异常检测阈值

    AI Overviews如何设置智能告警 AI Overviews异常检测阈值AI Overviews如何设置智能告警 AI Overviews异常检测阈值AI Overviews如何设置智能告警 AI Overviews异常检测阈值AI Overviews如何设置智能告警 AI Overviews异常检测阈值

    本文将详细指导您如何在AI Overviews中设置智能告警以及调整异常检测阈值,帮助您及时发现并响应潜在问题。我们将分步骤讲解具体操作过程,确保您能够顺利配置这些关键功能,从而实现更主动、更精准的系统监控。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R…

    2026年9月27日 • 用户投稿
    000
  • 曝华为Mate80系列新增Air机型 支持eSIM 采用微泵液

    曝华为Mate80系列新增Air机型 支持eSIM 采用微泵液曝华为Mate80系列新增Air机型 支持eSIM 采用微泵液曝华为Mate80系列新增Air机型 支持eSIM 采用微泵液曝华为Mate80系列新增Air机型 支持eSIM 采用微泵液

    9月24日,cnmo获悉,有数码博主透露了华为mate80 pro+的部分配置详情。据消息显示,该机型顶配版将配备6000mah大容量电池,搭配24gb运行内存与2tb机身存储。此外,华为mate80系列将新增一款air版本,采用创新的微泵液冷技术(无风扇设计),并支持esim功能。 华为Mate …

    2026年9月27日 • 用户投稿
    100
  • 360极速浏览器收藏夹栏怎么显示_360极速浏览器显示或隐藏书签栏的方法

    360极速浏览器收藏夹栏怎么显示_360极速浏览器显示或隐藏书签栏的方法360极速浏览器收藏夹栏怎么显示_360极速浏览器显示或隐藏书签栏的方法360极速浏览器收藏夹栏怎么显示_360极速浏览器显示或隐藏书签栏的方法360极速浏览器收藏夹栏怎么显示_360极速浏览器显示或隐藏书签栏的方法

    360极速浏览器书签栏未显示时,可通过快捷键Ctrl+Shift+B切换,或在菜单“工具”中点击“显示书签栏”,也可在“设置-外观”中开启默认显示。 如果您希望在浏览网页时快速访问常用网站,但发现360极速浏览器的收藏夹栏未显示,可能是书签栏被隐藏了。以下是恢复显示书签栏的操作方法。 本文运行环境:…

    2026年9月27日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信