首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用带自定义损失函数的tensorboard.plugins.hparams应用编程接口进行超参数调整

基础概念

tensorboard.plugins.hparams 是 TensorFlow 的一个插件,用于可视化超参数调整的过程和结果。它允许用户在 TensorBoard 中记录和比较不同超参数组合的性能。自定义损失函数则允许用户根据具体需求定义损失计算的方式。

相关优势

  1. 可视化:通过 TensorBoard 提供的界面,可以直观地看到不同超参数组合对模型性能的影响。
  2. 灵活性:支持自定义损失函数,使得超参数调整更加符合特定问题的需求。
  3. 高效性:可以并行地尝试多种超参数组合,加快实验速度。

类型

tensorboard.plugins.hparams 主要支持以下几种类型的超参数:

  • 数值型(如学习率、批量大小)
  • 分类型(如优化算法类型)
  • 文本型(如模型名称)

应用场景

适用于各种需要调整超参数的机器学习任务,如图像识别、自然语言处理、推荐系统等。

示例代码

以下是一个使用 tensorboard.plugins.hparams 进行超参数调整的简单示例,其中包含自定义损失函数:

代码语言:txt
复制
import tensorflow as tf
from tensorboard.plugins.hparams import api as hp

# 定义超参数搜索空间
HP_NUM_UNITS = hp.HParam('num_units', hp.Discrete([16, 32, 64]))
HP_LEARNING_RATE = hp.HParam('learning_rate', hp.RealInterval(0.001, 0.01))

# 自定义损失函数
def custom_loss(y_true, y_pred):
    return tf.reduce_mean(tf.square(y_true - y_pred)) + tf.reduce_sum(tf.abs(y_pred))

# 构建模型
model = tf.keras.Sequential([
    tf.keras.layers.Dense(hp.get('num_units'), activation='relu'),
    tf.keras.layers.Dense(1)
])

# 编译模型
model.compile(optimizer=tf.keras.optimizers.Adam(hp.get('learning_rate')),
              loss=custom_loss,
              metrics=['mse'])

# 训练模型并记录超参数
with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
    hp.hparams_config(
        hparams=[HP_NUM_UNITS, HP_LEARNING_RATE],
        metrics=[tf.metrics.MeanSquaredError()]
    )
    for num_units in HP_NUM_UNITS.domain.values:
        for learning_rate in (HP_LEARNING_RATE.domain.min_value,
                              HP_LEARNING_RATE.domain.max_value):
            model.set_weights(initial_weights)  # 重置模型权重
            model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate),
                          loss=custom_loss,
                          metrics=['mse'])
            model.fit(x_train, y_train, epochs=1, validation_data=(x_val, y_val))
            hp.hparams({HP_NUM_UNITS: num_units, HP_LEARNING_RATE: learning_rate})
            tf.summary.scalar('mse', metrics['mse'].result(), step=1)

可能遇到的问题及解决方法

  1. TensorBoard 无法启动:确保已正确安装 TensorBoard 和相关依赖,并检查日志以获取更多信息。
  2. 超参数未正确记录:检查代码中是否正确使用了 hp.hparamstf.summary.scalar 等 API。
  3. 自定义损失函数不生效:确保在编译模型时正确传递了自定义损失函数,并检查其定义是否正确。

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深度学习与Java 使用Deep Java Library(DJL)构建AI模型

尽管Python在深度学习中的应用非常广泛,Java作为一种强大的编程语言,也有其在AI领域的应用。...包括如何选择合适的损失函数、优化器和调整训练过程中的超参数。1. 选择损失函数损失函数(Loss Function)是模型训练中的关键因素,它衡量了模型的预测结果与真实结果之间的差距。...通过比较预测结果与真实标签,我们可以评估模型的性能。2. 调优与超参数优化超参数调优(Hyperparameter Tuning)是提高模型性能的重要步骤。...常见的超参数包括学习率、批量大小、网络结构的深度和宽度等。通过网格搜索(Grid Search)或随机搜索(Random Search)等方法,我们可以找到最优的超参数配置。...通过实践示例,读者可以了解DJL的基本使用方法,包括如何加载数据、选择优化器、损失函数以及如何进行超参数调优、早停等技术。此外,我们还探讨了模型的保存与部署,为实际生产环境中的应用提供了指导。

36120

清华大学发布首个课程学习开源库CurML

随着课程学习的应用和场景日益丰富,特别需要对这一领域进行细致的梳理和归纳,从而推动研究者的深入探索、提升使用者的应用体验。...在给定数据集、模型和超参数后,模块将进行一定时间的训练,并输出训练后的模型参数和任务的测试结果。...同时,它预留了五个接口函数的位置,用于和第二个子模块 CL Algorithm 进行交互,也支持自定义的输入函数。...接口函数:model_prepare 这一函数与 data_prepare 很类似,区别在于传递的不是数据集信息而是模型训练的相关信息,例如模型架构、参数优化器、学习率调整器等等,很多课程学习算法通过调节这些要素指导机器学习...接口函数:loss_curriculum 这一函数用于对损失函数值进行重加权,间接调整不同数据对于模型的影响,这类算法在课程学习中较为常见,因为损失值的加权在本质上是一种对数据的软采样。

26820
  • 深度学习500问——Chapter12:网络搭建及训练(3)

    12.3.5 Caffe有哪些接口 Caffe深度学习框架支持多种编程接口,包括命令行、Python和Matlab,下面将介绍如何使用这些接口。 1....(5)blob 和 network 形状调整。    (6)网络参数编辑和调整。    (7)创建多个 solvers 进行训练。   ...于是在VGG、Inception网络中,利用2个3×3卷积核的组合比1个5×5卷积核的效果更佳,同时参数量(3×3×2+1=19应用在各种模型中...更多关于MAE和MSE的性能,可以参考L1vs.L2 Loss Function 2.分类损失: 交叉熵损失函数。 是目前神经网络中最常用的分类目标损失函数。...合页损失函数 合页损失函数广泛在支持向量机中使用,有时也会在损失函数中使用。缺点:合页损失函数是对错误越大的样本施以更严重的惩罚,但是这样会导致损失函数对噪声敏感。

    7210

    惊了!无缝衔接Fortran大气模式和Keras深度学习模型!

    在这种情况下,FKB可以对Keras实现的次网格云和辐射物理的一百多个候选模型进行超参数搜索,然后迁移应用到Fortran中以评估拟合存在缺陷的模型与行星尺度流体动力学耦合时的性能。...同样的,可以将Fortran构建的神经网络模型迁移到Python中进行分析、扩展和优化,比如使用Python相关工具进行超参数搜索。...自定义损失函数 在Keras、TF、Pytorch中自定义损失函数是非常常用的功能。FKB中也提供了自定义损失函数的功能,但是FKB并没有提供自动微分的功能。...因此,还需要利用和导数相关的输入进行训练。 通过利用此功能,用户可以利用各种损失函数最小化特定的量化任务。一旦构建后,就可以包括在已有的框架中,并在在线训练期间使用。 集合 集合包含了不同的模型。...FKB库使用户可以直接在Fortran中访问Keras API的许多功能,包括创建自定义图层和丢失函数以满足他们的需求的能力,而且具有非常好的易用性,通过在全球大气的多尺度物理模型应用中也证明了这一点。

    3K30

    自定义损失函数Gradient Boosting

    您仍然会得到好处,因为超参数将使用所需的自定义损耗进行调优。 在LightGBM中实现自定义损失函数 让我们看看实际情况,并在模拟数据上做一些实验。首先,我们假设高估比低估更糟糕。...我们使用Friedman 1合成数据集,进行了8,000次训练观察,2,000次验证观察和5,000次测试观察。 验证集用于找到优化验证损失的最佳超参数集。...LightGBM使用MSE→LightGBM调整提前停止轮次,并使用自定义MSE进行早期停止调整 这两个模型的得分非常接近,没有实质性差异。 这是因为验证损失仅用于决定何时停止提升。...LightGBM使用自定义MSE→LightGBM通过定制丢失进行调整,并使用MSE进行早期停止调整 仅在不改变验证损失的情况下定制训练损失会损害模型性能。...注意,使用LightGBM(即使有默认的超参数),与随机森林模型相比,预测性能得到了改善。带有自定义验证损失的最终模型似乎在直方图的右侧做出了更多的预测,即实际值大于预测值。

    7.8K30

    【NLP】Pytorch构建神经网络

    PyTorch提供了一些方便的方法来初始化参数,例如使用torch.nn.init模块中的函数进行参数初始化。定义损失函数:选择适当的损失函数来衡量模型的预测结果与实际标签之间的差异。...常见的损失函数包括均方误差(MSE)、交叉熵损失函数等。你可以使用torch.nn模块中提供的损失函数,或者根据需要自定义损失函数。定义优化器:选择合适的优化算法来更新模型的参数以最小化损失函数。...将输入数据传递给模型,并计算模型的输出。b. 将模型输出与实际标签进行比较,计算损失函数的值。c. 根据损失函数的值,使用反向传播算法计算梯度。d. 使用优化器更新模型的参数。...你可以根据需要调整模型的结构、超参数或训练策略,以获得更好的性能。模型应用:在模型训练和调试完成后,你可以使用模型对新的未知数据进行预测或推断。...这是一个基本的神经网络构建流程,具体的实现细节和步骤可能因任务而异。在实践中,你可能还需要进行超参数调优、使用正则化方法来防止过拟合,以及使用其他技术来改进模型的性能。

    46710

    这里有一份详细的教程

    不要跳至学习速率调整或使模型设计改变太快,小梯度可能仅仅由编程 Bug 引起,如输入数据未正确缩放或权重全部初始化为零。 如果消除了其他可能的原因,则在梯度爆炸时应用梯度截断(特别是对于 NLP)。...在训练过程中,我们使用训练数据集来构建具有不同超参数的模型。我们使用验证数据集来运行这些模型,并选择精确度最高的模型。但是保险起见,我们使用 10 % 的测试数据进行最后的错乱检查。...注意,每个正则化因子都可能是完全不同的数量级,我们可以反复调整这些参数。 ? 多个损失函数 在第一次实现中,避免使用多个数据损失函数。每个损失函数的权重可能有不同的数量级,也需要一些精力去调整。...超参数调整 在模型设计稳定后,我们也可以进一步调整模型。最经常调整的超参数是: mini-batch 尺寸; 学习率; 正则化因子; 特定层的超参数(如 dropout)。...我们没有把学习率降低 10%,而是降低 3%(精细调整中或许更小)。 ? 调参不是线性过程。超参数是有关联的,我们将反复调整超参数。学习率和正则化因子高度相关,有时需要一起调。

    66680

    这里有一份详细的教程

    在训练过程中,我们使用训练数据集来构建具有不同超参数的模型。我们使用验证数据集来运行这些模型,并选择精确度最高的模型。但是保险起见,我们使用 10 % 的测试数据进行最后的错乱检查。...初始化超参数 许多超参数与模型优化更为相关。关掉超参数或者使用缺省值。使用 Adam 优化器,它速度快、高效且缺省学习率也很好。前期的问题主要来自于 bug,而不是模型设计和精调问题。...注意,每个正则化因子都可能是完全不同的数量级,我们可以反复调整这些参数。 9. 多个损失函数 在第一次实现中,避免使用多个数据损失函数。...每个损失函数的权重可能有不同的数量级,也需要一些精力去调整。如果我们只有一个损失函数,就可以只在意学习率了。 10....超参数调整 在模型设计稳定后,我们也可以进一步调整模型。最经常调整的超参数是: mini-batch 尺寸; 学习率; 正则化因子; 特定层的超参数(如 dropout)。

    56940

    经验之谈 | 如何从零开始构建深度学习项目?

    不要跳至学习速率调整或使模型设计改变太快,小梯度可能仅仅由编程 Bug 引起,如输入数据未正确缩放或权重全部初始化为零。 如果消除了其他可能的原因,则在梯度爆炸时应用梯度截断(特别是对于 NLP)。...在训练过程中,我们使用训练数据集来构建具有不同超参数的模型。我们使用验证数据集来运行这些模型,并选择精确度最高的模型。但是保险起见,我们使用 10 % 的测试数据进行最后的错乱检查。...注意,每个正则化因子都可能是完全不同的数量级,我们可以反复调整这些参数。 多个损失函数 在第一次实现中,避免使用多个数据损失函数。每个损失函数的权重可能有不同的数量级,也需要一些精力去调整。...超参数调整 在模型设计稳定后,我们也可以进一步调整模型。最经常调整的超参数是: mini-batch 尺寸; 学习率; 正则化因子; 特定层的超参数(如 dropout)。...我们没有把学习率降低 10%,而是降低 3%(精细调整中或许更小)。 调参不是线性过程。超参数是有关联的,我们将反复调整超参数。学习率和正则化因子高度相关,有时需要一起调。

    65810

    手把手教你从零搭建深度学习项目(可下载PDF版)

    在训练过程中,我们使用训练数据集来构建具有不同超参数的模型。我们使用验证数据集来运行这些模型,并选择精确度最高的模型。但是保险起见,我们使用 10 % 的测试数据进行最后的错乱检查。...初始化超参数 许多超参数与模型优化更为相关。关掉超参数或者使用缺省值。使用 Adam 优化器,它速度快、高效且缺省学习率也很好。前期的问题主要来自于 bug,而不是模型设计和精调问题。...注意,每个正则化因子都可能是完全不同的数量级,我们可以反复调整这些参数。 9. 多个损失函数 在第一次实现中,避免使用多个数据损失函数。...超参数调整 在模型设计稳定后,我们也可以进一步调整模型。最经常调整的超参数是: mini-batch 尺寸; 学习率; 正则化因子; 特定层的超参数(如 dropout)。...我们没有把学习率降低 10%,而是降低 3%(精细调整中或许更小)。 调参不是线性过程。超参数是有关联的,我们将反复调整超参数。学习率和正则化因子高度相关,有时需要一起调。

    1.1K40

    这里有一份详细的教程

    不要跳至学习速率调整或使模型设计改变太快,小梯度可能仅仅由编程 Bug 引起,如输入数据未正确缩放或权重全部初始化为零。 如果消除了其他可能的原因,则在梯度爆炸时应用梯度截断(特别是对于 NLP)。...在训练过程中,我们使用训练数据集来构建具有不同超参数的模型。我们使用验证数据集来运行这些模型,并选择精确度最高的模型。但是保险起见,我们使用 10 % 的测试数据进行最后的错乱检查。...注意,每个正则化因子都可能是完全不同的数量级,我们可以反复调整这些参数。 ? 多个损失函数 在第一次实现中,避免使用多个数据损失函数。每个损失函数的权重可能有不同的数量级,也需要一些精力去调整。...超参数调整 在模型设计稳定后,我们也可以进一步调整模型。最经常调整的超参数是: mini-batch 尺寸; 学习率; 正则化因子; 特定层的超参数(如 dropout)。...我们没有把学习率降低 10%,而是降低 3%(精细调整中或许更小)。 ? 调参不是线性过程。超参数是有关联的,我们将反复调整超参数。学习率和正则化因子高度相关,有时需要一起调。

    90780

    使用TensorBoard进行超参数优化

    在本文中,我们将介绍超参数优化,然后使用TensorBoard显示超参数优化的结果。 深度神经网络的超参数是什么?...手动搜索 网格搜索:对指定超参数的所有可能组合进行穷举搜索,从而得到笛卡尔积。 随机搜索:超参数是随机选择的,不是每一个超参数的组合都被尝试。...随着超参数数量的增加,随机搜索是一个更好的选择,因为它可以更快地得到超参数的良好组合。 贝叶斯优化:整合关于超参数的先验数据,包括模型的准确性或损失。先验信息有助于确定模型超参数选择的更好近似。...为了在TensorBoard中可视化模型的超参数并进行调优,我们将使用网格搜索技术,其中我们将使用一些超参数,如不同的节点数量,不同的优化器,或学习率等看看模型的准确性和损失。...为什么使用TensorBoard进行超参数优化? 一幅图片胜过千言万语,这也适用于复杂的深度学习模型。深度学习模型被认为是一个黑盒子,你发送一些输入数据,模型做一些复杂的计算,输出结果。

    1.6K20

    手把手教你从零搭建深度学习项目(附链接)

    在训练过程中,我们使用训练数据集来构建具有不同超参数的模型。我们使用验证数据集来运行这些模型,并选择精确度最高的模型。但是保险起见,我们使用 10 % 的测试数据进行最后的错乱检查。...初始化超参数 许多超参数与模型优化更为相关。关掉超参数或者使用缺省值。使用 Adam 优化器,它速度快、高效且缺省学习率也很好。前期的问题主要来自于 bug,而不是模型设计和精调问题。...注意,每个正则化因子都可能是完全不同的数量级,我们可以反复调整这些参数。 9. 多个损失函数 在第一次实现中,避免使用多个数据损失函数。...每个损失函数的权重可能有不同的数量级,也需要一些精力去调整。如果我们只有一个损失函数,就可以只在意学习率了。 10....超参数调整 在模型设计稳定后,我们也可以进一步调整模型。最经常调整的超参数是: mini-batch 尺寸; 学习率; 正则化因子; 特定层的超参数(如 dropout)。

    91830

    手把手教你从零到一搭建深度学习项目

    在训练过程中,我们使用训练数据集来构建具有不同超参数的模型。我们使用验证数据集来运行这些模型,并选择精确度最高的模型。但是保险起见,我们使用 10 % 的测试数据进行最后的错乱检查。...初始化超参数 许多超参数与模型优化更为相关。关掉超参数或者使用缺省值。使用 Adam 优化器,它速度快、高效且缺省学习率也很好。前期的问题主要来自于 bug,而不是模型设计和精调问题。...注意,每个正则化因子都可能是完全不同的数量级,我们可以反复调整这些参数。 9. 多个损失函数 在第一次实现中,避免使用多个数据损失函数。...每个损失函数的权重可能有不同的数量级,也需要一些精力去调整。如果我们只有一个损失函数,就可以只在意学习率了。 10....超参数调整 在模型设计稳定后,我们也可以进一步调整模型。最经常调整的超参数是: mini-batch 尺寸; 学习率; 正则化因子; 特定层的超参数(如 dropout)。

    81430

    人工智能-机器学习简易原理

    例如,在图像分类任务中,数据可能是带标签的图像数据集。 数据清洗 去除噪声和不完整的数据。 数据转换 将数据转换成适合模型训练的格式,例如将文本转换为数字向量,或者对数值数据进行标准化。...训练模型 模型训练的目的是根据已有的训练数据找到最合适的模型参数。这个过程通常通过优化算法(如梯度下降法)来实现。 损失函数(Loss Function)衡量模型预测值与实际值之间的差异。...训练过程中,通过最小化损失函数,更新模型的参数。 优化算法常用的优化算法有梯度下降、随机梯度下降(SGD)、Adam等。这些算法通过计算损失函数的梯度,逐步调整模型的参数。 4....模型调优 如果模型的表现不理想,可以通过调整超参数、增加训练数据、使用不同的算法等方法来优化模型。 超参数调优调整模型的超参数(如决策树的深度、神经网络的层数、学习率等)来提升模型性能。...损失函数和优化算法:损失函数衡量模型预测值与真实值之间的差异,优化算法则用来最小化损失函数,调整模型的参数。

    10520

    Texar-PyTorch:在PyTorch中集成TensorFlow的最佳特性

    Texar-PyTorch 功能 通过结合 TF 中的最佳特性与 PyTorch 的直观编程模型,Texar-Pytorch 为构建 ML 应用提供全面支持: 最先进的模型构建模块—搭建 ML 模型就和搭积木一样...有时,你无法选择使用哪个底层框架,而学习新的工具包就和自己编写一样费时。现在,使用 Texar,你可以在这两个框架中使用几乎相同的接口,只需对代码进行最小限度的更改。...图 1:Texar 为数据处理、模型架构、损失函数、训练、评估以及一系列先进的预训练 ML/NLP 模型 (例如,BERT, GPT-2 等) 提供了全套的模块。...你是否希望 API 灵活适应你的非传统算法,例如,在对抗学习中交替优化多个损失函数?Texar 训练器(Executor)是你的不二选择。...答:只需在`valid_metrics`中添加一个新的度量即可: ? 问:如果我们想要进行超参数调优并多次训练模型,该怎么办? 答:只需为你想要测试的每一组超参数创建 Executor。

    78010

    Texar-PyTorch:在PyTorch中集成TensorFlow的最佳特性

    Texar-PyTorch 功能 通过结合 TF 中的最佳特性与 PyTorch 的直观编程模型,Texar-Pytorch 为构建 ML 应用提供全面支持: 最先进的模型构建模块—搭建 ML 模型就和搭积木一样...有时,你无法选择使用哪个底层框架,而学习新的工具包就和自己编写一样费时。现在,使用 Texar,你可以在这两个框架中使用几乎相同的接口,只需对代码进行最小限度的更改。...图 1:Texar 为数据处理、模型架构、损失函数、训练、评估以及一系列先进的预训练 ML/NLP 模型 (例如,BERT, GPT-2 等) 提供了全套的模块。...你是否希望 API 灵活适应你的非传统算法,例如,在对抗学习中交替优化多个损失函数?Texar 训练器(Executor)是你的不二选择。...答:只需在`valid_metrics`中添加一个新的度量即可: ? 问:如果我们想要进行超参数调优并多次训练模型,该怎么办? 答:只需为你想要测试的每一组超参数创建 Executor。

    70430

    Texar-PyTorch:在PyTorch中集成TensorFlow的最佳特性

    Texar-PyTorch 功能 通过结合 TF 中的最佳特性与 PyTorch 的直观编程模型,Texar-Pytorch 为构建 ML 应用提供全面支持: 最先进的模型构建模块—搭建 ML 模型就和搭积木一样...有时,你无法选择使用哪个底层框架,而学习新的工具包就和自己编写一样费时。现在,使用 Texar,你可以在这两个框架中使用几乎相同的接口,只需对代码进行最小限度的更改。...图 1:Texar 为数据处理、模型架构、损失函数、训练、评估以及一系列先进的预训练 ML/NLP 模型 (例如,BERT, GPT-2 等) 提供了全套的模块。...你是否希望 API 灵活适应你的非传统算法,例如,在对抗学习中交替优化多个损失函数?Texar 训练器(Executor)是你的不二选择。...答:只需在`valid_metrics`中添加一个新的度量即可: ? 问:如果我们想要进行超参数调优并多次训练模型,该怎么办? 答:只需为你想要测试的每一组超参数创建 Executor。

    68130

    AI 开源 Texar-PyTorch:卡内基梅隆大学的研究者开源的通用机器学习框架

    Texar-PyTorch 功能 通过结合 TF 中的最佳特性与 PyTorch 的直观编程模型,Texar-Pytorch 为构建 ML 应用提供全面支持: 最先进的模型构建模块—搭建 ML 模型就和搭积木一样...有时,你无法选择使用哪个底层框架,而学习新的工具包就和自己编写一样费时。现在,使用 Texar,你可以在这两个框架中使用几乎相同的接口,只需对代码进行最小限度的更改。...图 1:Texar 为数据处理、模型架构、损失函数、训练、评估以及一系列先进的预训练 ML/NLP 模型 (例如,BERT, GPT-2 等) 提供了全套的模块。...你是否希望 API 灵活适应你的非传统算法,例如,在对抗学习中交替优化多个损失函数?Texar 训练器(Executor)是你的不二选择。...答:只需在`valid_metrics`中添加一个新的度量即可: 问:如果我们想要进行超参数调优并多次训练模型,该怎么办? 答:只需为你想要测试的每一组超参数创建 Executor。

    82020

    Texar-PyTorch:在PyTorch中集成TensorFlow的最佳特性

    Texar-PyTorch 功能 通过结合 TF 中的最佳特性与 PyTorch 的直观编程模型,Texar-Pytorch 为构建 ML 应用提供全面支持: 最先进的模型构建模块—搭建 ML 模型就和搭积木一样...有时,你无法选择使用哪个底层框架,而学习新的工具包就和自己编写一样费时。现在,使用 Texar,你可以在这两个框架中使用几乎相同的接口,只需对代码进行最小限度的更改。...图 1:Texar 为数据处理、模型架构、损失函数、训练、评估以及一系列先进的预训练 ML/NLP 模型 (例如,BERT, GPT-2 等) 提供了全套的模块。...你是否希望 API 灵活适应你的非传统算法,例如,在对抗学习中交替优化多个损失函数?Texar 训练器(Executor)是你的不二选择。...答:只需在`valid_metrics`中添加一个新的度量即可: ? 问:如果我们想要进行超参数调优并多次训练模型,该怎么办? 答:只需为你想要测试的每一组超参数创建 Executor。

    46430
    领券