我了解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的输出头。
  


什么是HyperNode实例?

同样,什么是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()方法。


什么是HyperBlocks?
如果Image Classifier自动执行HyperParameter Tuning,则GraphAutoModel的用途是什么?

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

最佳答案

最近与autokeras合作过,我可以分享我的一点知识。


Task API
当执行经典的任务(例如图像分类/回归,文本分类/回归...)时,您可以使用自动keras提供的最简单的API,称为Task APIImageClassifierImageRegressorTextClassifierTextRegressor ,...在这种情况下,您只有一个输入(图像,文本或表格数据,...)和一个输出(分类,回归)。
Automodel
但是,当您遇到例如需要多个输入/输出体系结构的任务时,则不能直接使用Task API,这就是AutomodelI/O API一起起作用的地方。您可以查看提供的示例in the documentation,其中有两个输入(图像和结构化数据)和两个输出(分类和回归)
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指定所需的体系结构。有很多块:转换,RNN,密集,... 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块,然后是密集层,然后是分类层,但是我没有指定任何超参数,(lstm层数,密层,lstm层的大小,密层的大小,激活函数,退出,batchnorm等),Autokeras会根据我提供的架构(骨架)自动进行超参数调整。

关于machine-learning - Autokeras Auto Model和GraphAutoModel所需的说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59301161/

10-12 13:44