【问题标题】:Explanation Needed for Autokeras's AutoModel and GraphAutoModelAutokeras 的 AutoModel 和 GraphAutoModel 需要说明
【发布时间】:2020-04-05 15:25:29
【问题描述】:

我了解 AutoKeras ImageClassifier 的作用 (https://autokeras.com/image_classifier/)

clf = ImageClassifier(verbose=True, augment=False)
clf.fit(x_train, y_train, time_limit=12 * 60 * 60)
clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
y = clf.evaluate(x_test, y_test)

但我无法理解 AutoModel 类 (https://autokeras.com/auto_model/) 的作用,或者它与 ImageClassifier 有何不同

autokeras.auto_model.AutoModel(
inputs,
outputs,
name="auto_model",
max_trials=100,
directory=None,
objective="val_loss",
tuner="greedy",
seed=None)

参数输入和输出的文档说

  • 输入:一个列表或一个HyperNode 实例。 AutoModel 的输入节点。
  • 输出:列表或HyperHead 实例。 AutoModel 的输出头。

什么是超节点实例

同样,GraphAutoModel 类是什么? (https://autokeras.com/graph_auto_model/)

autokeras.auto_model.GraphAutoModel(
inputs,
outputs,
name="graph_auto_model",
max_trials=100,
directory=None,
objective="val_loss",
tuner="greedy",
seed=None)

文档读取

由 HyperBlocks 图定义的 HyperModel。 GraphAutoModel 是 HyperModel 的子类。除了 HyperModel 属性之外,它还有一个调谐器来调整 HyperModel。用户可以像使用 Keras 模型一样使用它,因为它也有 fit() 和 predict() 方法。

什么是超块? 如果 Image Classifier 自动做 HyperParameter Tuning,那么 GraphAutoModel 有什么用?

链接到任何文档/资源以更好地理解 AutoModel 和 GraphAutoModel 赞赏。

【问题讨论】:

    标签: machine-learning keras deep-learning automl auto-keras


    【解决方案1】:

    最近在使用 autokeras,我可以分享我的小知识。

    1. Task API 在进行图像分类/回归、文本分类/回归等经典任务时,可以使用 autokeras 提供的最简单的 API,称为 Task APIImageClassifierImageRegressorTextClassifierTextRegressor , ... 在这种情况下,您有一个输入(图像或文本或表格数据,...)和一个输出(分类、回归)。

    2. Automodel 但是,当您遇到需要多输入/输出架构的任务时,您不能直接使用任务 API,这就是 AutomodelI/O API 发挥作用的地方。您可以查看in the documentation 提供的示例,其中您有两个输入(图像和结构化数据)和两个输出(分类和回归)

    3. GraphAutoModel GraphAutomodel 像 keras 函数式 API 一样工作。它组装不同的块(卷积、LSTM、GRU,...)并使用该块创建模型,然后根据您提供的架构,它会寻找最佳的超参数。例如,假设我想使用时间序列作为输入数据来执行二进制分类任务。 首先让我们生成一个玩具数据集:

    import numpy as np
    import autokeras as ak
    
    x = np.random.randn(100, 7, 3)
    y = np.random.choice([0, 1], size=100, p=[0.5, 0.5])
    

    这里x是100个样本的时间序列,每个样本是一个长度为7,特征维度为3的序列。对应的目标变量y是二进制(0, 1)。 使用 GraphAutomodel,我可以指定我想要的架构,使用所谓的HyperBlocks。有很多块:Conv、RNN、Dense、...check the full list here。 就我而言,我想使用 RNN 块来创建模型,因为我有时间序列数据:

    input_layer = ak.Input()
    rnn_layer = ak.RNNBlock(layer_type="lstm")(input_layer)
    dense_layer = ak.DenseBlock()(rnn_layer)
    output_layer = ak.ClassificationHead(num_classes=2)(dense_layer)
    
    automodel = ak.GraphAutoModel(input_layer, output_layer, max_trials=2, seed=123)
    automodel.fit(x, y, validation_split=0.2, epochs=2, batch_size=32)
    

    (如果您不熟悉上述模型定义方式,则应查看 keras 函数式 API 文档)。

    所以在这个例子中,我可以更灵活地创建我想使用的架构骨架:LSTM 块后跟一个 Dense 层,然后是一个分类层,但是我没有指定任何超参数,(lstm 的数量层数、密集层数、lstm 层大小、密集层大小、激活函数、dropout、batchnorm ......),Autokeras 将根据我提供的架构(骨架)自动调整超参数。

    【讨论】:

    • 感谢您的详细解释。这让我很清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多