AutoKeras 1.0 教程总览:六大数据任务、多模态建模与自定义搜索空间完整指南

发布时间:2026/9/25 2:33:42
AutoKeras 1.0 教程总览:六大数据任务、多模态建模与自定义搜索空间完整指南 AutoML机器学习深度学习人工智能【免费下载链接】autokerasAutoML library for deep learning项目地址https://gitcode.com/gh_mirrors/au/autokeras点击查看免费下载AutoKeras 1.0 以极简接口 自动搜索为核心设计理念用户只需几行代码即可完成图像、文本、结构化数据上的分类与回归任务同时通过AutoModel与积木式 Block 提供对搜索空间的高层定制能力。本文是仓库中 docs/templates/tutorial/overview.md 的深度展开将带你掌握六种开箱即用的任务 API、多任务多模态建模方法、节点Node与块Block体系以及最佳模型导出方案并结合源码说明其底层实现。教程体系与文档入口本教程总览是整个 AutoKeras 1.0 官方教程的入口页面它按任务 API → 多模态 → 自定义模型 → 模型导出四个层次组织内容。教程对应的可运行示例源码位于 docs/py/每个文件都包含完整的pip install autokeras安装说明、数据准备、训练、验证与评估代码可直接作为练习脚本。官方推荐使用 Torch 后端运行示例export KERAS_BACKENDtorch pip install autokerasAutoKeras 的 API 设计高度对齐 Keras 习惯所有任务类都提供fit()、predict()、evaluate()三个核心方法使用体验与keras.Model一致。从 autokeras/auto_model.py 中AutoModel的文档字符串可以看到其设计目标AutoModel combines a HyperModel and a Tuner to tune the HyperModel. The user can use it in a similar way to a Keras model since it also hasfit()andpredict()methods.六种内置任务极简接口覆盖主要数据形态AutoKeras 1.0 内置了六种任务覆盖两大数据形态图像、文本与结构化表格数据每种形态都有分类与回归两个方向任务类适用数据源码实现默认 tunerImageClassifier图像分类autokeras/tasks/image.pyImageClassifierTunerImageRegressor图像回归autokeras/tasks/image.pygreedy.GreedyTextClassifier文本分类autokeras/tasks/text.pyTextClassifierTunerTextRegressor文本回归autokeras/tasks/text.pygreedy.GreedyStructuredDataClassifier表格数据分类autokeras/tasks/structured_data.pyStructuredDataClassifierTunerStructuredDataRegressor表格数据回归autokeras/tasks/structured_data.pyStructuredDataRegressorTuner以图像分类为例的完整流程docs/py/image_classification.py 给出了从数据准备到评估的完整示例。第一步加载并切片 MNIST 数据from keras.datasets import mnist import autokeras as ak (x_train, y_train), (x_test, y_test) mnist.load_data() x_train x_train[:100] y_train y_train[:100] x_test x_test[:100] y_test y_test[:100]第二步初始化分类器并训练、预测、评估。示例中特意将max_trials设为 1、epochs设为 10 以快速演示对更复杂的数据集建议增大max_trialsepochs也可以留空以使用自适应训练策略# Initialize the image classifier. clf ak.ImageClassifier(overwriteTrue, max_trials1) # Feed the image classifier with training data. clf.fit(x_train, y_train, epochs1) # Predict with the best model. predicted_y clf.predict(x_test) print(predicted_y) # Evaluate the best model with testing data. print(clf.evaluate(x_test, y_test))验证数据validation_split 与 validation_dataAutoKeras 默认取训练数据最后 20% 作为验证集。两种自定义方式在教程中都有示例# 方式一通过 validation_split 指定切分比例 clf.fit(x_train, y_train, validation_split0.15, epochs1) # 方式二提供自定义验证集 validation_data split 50000 x_val, y_val x_train[split:], y_train[split:] x_train, y_train x_train[:split], y_train[:split] clf.fit(x_train, y_train, validation_data(x_val, y_val), epochs1)从 autokeras/auto_model.py 的实现可以看出其行为validation_data一旦提供就会覆盖validation_splitvalidation_split被置 0两者都为空时会抛出ValueError强制要求验证信息。需要注意validation_split不支持x为tf.data.Dataset等数据集对象的情况此时必须使用validation_data。此外搜索结束后最佳模型会用完整训练集含验证集切分部分重新训练一次。任务类公共参数从 autokeras/tasks/image.py 等任务类的__init__可以看到所有任务共享一组统一的搜索控制参数max_trials最多尝试的 Keras 模型数量默认 100搜索可能提前结束directory搜索输出的存储目录默认None时在当前目录创建以模型名命名的文件夹project_name项目名如ImageClassifier默认image_classifierobjective优化目标默认val_lossStructuredDataClassifier默认val_accuracytuner搜索算法可传greedy、bayesian、hyperband、random字符串或AutoTuner子类默认使用任务特定 tuneroverwriteFalse时若存在同名项目则加载继续True则覆盖重搜seed随机种子max_model_size模型参数量上限标量个数超限模型会被拒绝。每个任务还有形态相关的参数ImageClassifier支持num_classes与multi_labelStructuredDataClassifier额外支持column_names与column_types。以结构化数据为例column_types的取值只能是categorical或numerical源码中 BaseStructuredDataPipeline.check() 会对非法值直接抛出ValueError若指定了column_types而列名不在数据中check_in_fit() 会在fit时抛出column_names and column_types are mismatched的错误。当column_types未指定时AutoKeras 会根据数据自动推断——列的不同取值数少于样本数 5% 时判为类别列见 autokeras/nodes.py。输入数据要求各任务对输入数据形态有明确约定见各任务类fit()的 docstring 与 autokeras/nodes.py图像numpy 数组shape 为(samples, width, height)或(samples, width, height, channels)ImageInput在构建时若检测到 3 维输入会自动补一个通道维ExpandLastDim文本一维 numpy 数组每个元素是一个完整句子的字符串结构化数据二维 numpy 数组可含数值或字符串类别值。多任务与多模态用 AutoModel 连接多个输入与输出当数据具有多种模态如图像 数值属性或需要同时预测多个目标如分类标签 回归分数时任务类就不够用了。此时应使用AutoModel高层 API教程中对应的完整示例见 docs/py/multi.py。多模态与多任务的含义多模态数据每个样本包含多种形态的信息例如一张照片既有图像本身又有拍摄时间、地点等数值属性多任务用相同输入特征同时预测多个目标例如既对图像内容做分类又输出 0~1 之间的质量回归值。这类网络的拓扑是多个输入节点 → 共享/分支特征 → 多个输出头AutoModel正是为描述这种结构而设计。用 AutoModel 直接声明多输入多输出先准备多模态数据与多任务标签import numpy as np import autokeras as ak num_instances 10 image_data np.random.rand(num_instances, 32, 32, 3).astype(np.float32) numerical_data np.random.rand(num_instances, 20).astype(np.float32) regression_target np.random.rand(num_instances, 1).astype(np.float32) classification_target np.random.randint(5, sizenum_instances)然后初始化模型。这里的inputs与outputs都接受列表从而同时指定图像与数值两个输入分支以及回归头与分类头两个输出model ak.AutoModel( inputs[ak.ImageInput(), ak.Input()], outputs[ ak.RegressionHead(metrics[mae]), ak.ClassificationHead( losscategorical_crossentropy, metrics[accuracy] ), ], overwriteTrue, max_trials2, ) model.fit( [image_data, numerical_data], [regression_target, classification_target], epochs1, batch_size3, )验证数据的使用方式与单任务完全一致支持validation_split与validation_data两种形式model.fit([image_data, numerical_data], [regression_target, classification_target], validation_split0.15, epochs1, batch_size3) # 自定义验证集 split 5 model.fit( [image_data[:split], numerical_data[:split]], [regression_target[:split], classification_target[:split]], validation_data( [image_val, numerical_val], [regression_val, classification_val], ), epochs1, batch_size3, )底层机制AutoModel 的两种构造路径从 autokeras/auto_model.py 的_build_graph()可以看到AutoModel存在两种构造路径Input/Output API当outputs全部是Head时AutoModel 自动装配——先为每个输入节点调用get_block()生成中间节点多个中间节点用Merge合并再接上输出头见_assemble()autokeras/auto_model.py。上面的多模态示例走的就是这条路Functional API当outputs全部是Node用户已手动连接了 Block 图时直接构建Graph。任务类本质上是AutoModel的封装例如ImageClassifier继承自SupervisedImagePipeline其构造时自动把blocks.ClassificationHead作为输出、nodes.ImageInput作为输入autokeras/tasks/image.py。此外 autokeras/auto_model.py 维护了TUNER_CLASSES字典将字符串bayesian、random、hyperband、greedy映射到对应的 tuner 类。自定义模型节点Nodes与积木块Blocks对于已经清楚自己模型高层结构的进阶用户可以使用积木式组件手动构建搜索空间。原文档强调用这些积木块你只需指定模型的高层架构AutoKeras 会自动搜索最优的详细配置必要时还可以继承基类实现自己的 Block。完整示例见 docs/py/customized.py。预定义输入节点Nodes节点说明源码Input通用张量输入节点autokeras/nodes.pyImageInput图像输入自动处理通道维autokeras/nodes.pyTextInput文本输入每个元素是一个完整句子autokeras/nodes.pyStructuredDataInput结构化数据输入支持column_names/column_typesautokeras/nodes.py节点不仅描述输入数据还负责适配器Adapter与分析器Analyser的绑定。例如StructuredDataInput的get_hyper_preprocessors()会返回一个CategoricalToNumerical预处理器将类别列编码为数值autokeras/nodes.pyTextInput则挂载了CastToString与TextTokenizer两步预处理。预定义块Blocks原文档列出的 Block 可分为三类仓库中的实现分布在 autokeras/blocks/ 下预处理类PreprocessorNormalization——特征归一化autokeras/blocks/preprocessing.pyImageAugmentation——图像增强autokeras/blocks/preprocessing.py。特征提取类BlockConvBlock——卷积块autokeras/blocks/basic.pyDenseBlock——全连接块autokeras/blocks/basic.pyEmbedding——词嵌入层autokeras/blocks/basic.pyResNetBlockautokeras/blocks/basic.py与XceptionBlockautokeras/blocks/basic.py——经典预训练结构RNNBlock——循环网络块autokeras/blocks/basic.pySpatialReduction与TemporalReduction——空间/时序降维autokeras/blocks/reduction.pyMerge——多分支合并autokeras/blocks/reduction.pyImageBlock、TextBlock、StructuredDataBlock——分别面向图像、文本、结构化数据的上层封装块autokeras/blocks/wrapper.py。输出头HeadClassificationHead——分类头二分类/多标签用 sigmoid 二元交叉熵多分类用 softmax 分类交叉熵默认 metric 为 accuracyautokeras/blocks/heads.pyRegressionHead——回归头默认 MSE 损失与 MSE metricautokeras/blocks/heads.py。其中ImageBlock的文档字符串说明它是一个由block_type超参数控制、在 ResNetBlock / XceptionBlock / ConvBlock 之间选择的块autokeras/blocks/wrapper.py。其build()实现显示normalize、augment未指定时会用hp.Boolean自动调优block_type未指定时在resnet、xception、vanilla、efficient四个候选中用hp.Choice搜索autokeras/blocks/wrapper.py。TextBlock的默认流水线则是Embedding → ConvBlock → SpatialReduction → DenseBlock。用 Functional API 搭建自定义搜索空间从 docs/py/image_classification.py 的 Customized Search Space 章节可以看到两层定制粒度。第一层用高层封装块限定整体方向input_node ak.ImageInput() output_node ak.ImageBlock( # Only search ResNet architectures. block_typeresnet, # Normalize the dataset. normalizeTrue, # Do not do data augmentation. augmentFalse, )(input_node) output_node ak.ClassificationHead()(output_node) clf ak.AutoModel( inputsinput_node, outputsoutput_node, overwriteTrue, max_trials1 ) clf.fit(x_train, y_train, epochs1)第二层用更细粒度的块进一步精确限定搜索空间input_node ak.ImageInput() output_node ak.Normalization()(input_node) output_node ak.ImageAugmentation(horizontal_flipFalse)(output_node) output_node ak.ResNetBlock(versionv2)(output_node) output_node ak.ClassificationHead()(output_node) clf ak.AutoModel( inputsinput_node, outputsoutput_node, overwriteTrue, max_trials1 ) clf.fit(x_train, y_train, epochs1)其使用方式与 Keras 函数式 API 相同output_node ak.some_block(input_node)本质上是在构建一张图——边是 Block节点是 Block 的中间输出。组合任意数量的多输入多输出时含Merge分支合并可参考 docs/py/multi.py 的 Customized Search Space 章节那里给出了Normalization → ImageAugmentation → (ConvBlock | ResNetBlock V2) → Merge → 再接 DenseBlock → 双输出头的完整图结构示例。拓扑上有明确约束Preprocessor→Block→Head的层级顺序必须遵守Normalization、ImageAugmentation属于 PreprocessorClassificationHead属于 Head其余是 Block。当输出全部是Node时AutoModel 直接以Graph形式构建Graph内部会做拓扑排序、环检测抛The network has a cycle.与输入缺失校验autokeras/graph.py。继承 Block 实现自己的搜索空间教程还演示了自定义 Block 的完整流程继承 Block 基类重写其build()方法即可。build()的写法与 KerasTuner 一致——通过hp对象声明可搜索的超参数import keras import numpy as np import tree import autokeras as ak class SingleDenseLayerBlock(ak.Block): def build(self, hp, inputsNone): # Get the input_node from inputs. input_node tree.flatten(inputs)[0] layer keras.layers.Dense( hp.Int(num_units, min_value32, max_value512, step32) ) output_node layer(input_node) return output_node # Build the AutoModel input_node ak.Input() output_node SingleDenseLayerBlock()(input_node) output_node ak.RegressionHead()(output_node) auto_model ak.AutoModel(input_node, output_node, overwriteTrue, max_trials1)这样定义的num_units就会成为搜索空间中的一个超参数AutoKeras 会在 32~512、步长 32 的范围内为它寻优。上述代码可直接用随机数据运行验证num_instances 100 x_train np.random.rand(num_instances, 20).astype(np.float32) y_train np.random.rand(num_instances, 1).astype(np.float32) auto_model.fit(x_train, y_train, epochs1) print(auto_model.evaluate(np.random.rand(num_instances, 20).astype(np.float32), np.random.rand(num_instances, 1).astype(np.float32)))导出最佳模型export_model 与 Keras 文件互操作搜索结束后可以用export_model()将 AutoModel 找到的最佳模型导出为标准 Keras 模型。所有任务类和AutoModel都具备该方法autokeras/auto_model.py其内部实现是return self.tuner.get_best_model()。完整示例见 docs/py/export.pyimport numpy as np from keras.datasets import mnist from keras.models import load_model import autokeras as ak (x_train, y_train), (x_test, y_test) mnist.load_data() clf ak.ImageClassifier(overwriteTrue, max_trials1) clf.fit(x_train, y_train, epochs1) # Export as a Keras Model. model clf.export_model() print(type(model)) # class keras.engine.training.Model model.save(model_autokeras.keras)加载时需要传入 AutoKeras 注册的自定义对象loaded_model load_model( model_autokeras.keras, custom_objectsak.CUSTOM_OBJECTS ) predicted_y loaded_model.predict(np.expand_dims(x_test, -1)) print(predicted_y)由于搜索得到的最佳模型中包含 AutoKeras 注册的各类自定义层与块autokeras.keras_layers、autokeras.blocks等重新加载时必须通过ak.CUSTOM_OBJECTS提供反序列化所需的映射否则load_model会因找不到自定义类而失败。从总览出发的下一步路径本教程总览是 AutoKeras 1.0 文档的导航中枢。按原文档结构读者可以依据数据形态选择对应教程深入图像分类与图像回归、文本分类与文本回归、结构化数据分类与结构化数据回归的可运行示例分别位于 docs/py/image_classification.py、docs/py/image_regression.py、docs/py/text_classification.py、docs/py/text_regression.py、docs/py/structured_data_classification.py、docs/py/structured_data_regression.py多模态与多任务场景参考 docs/py/multi.py自定义搜索空间与自定义 Block 参考 docs/py/customized.py模型导出参考 docs/py/export.py。每篇教程均围绕本总览介绍的概念展开形成总览 → 分任务实战 → 深度定制的完整学习链条。赞分享AutoML机器学习深度学习人工智能【免费下载链接】autokerasAutoML library for deep learning项目地址https://gitcode.com/gh_mirrors/au/autokeras点击查看免费下载相关推荐AutoKeras高级功能探索自定义模型与多模态学习AutoKeras高级功能探索自定义模型与多模态学习 本文深入探讨了AutoKeras框架的高级功能重点介绍了AutoModel基类的灵活使用、自定义神经网AutoML机器学习深度学习人工智能Magenta.js核心组件深度解析从MusicVAE到SketchRNN的完整实现Magenta.js核心组件深度解析从MusicVAE到SketchRNN的完整实现 Magenta.js是一个基于TensorFlow.js的开源项目专注jeffding/german-gpt2-openmind与DBMDZ BERT对比谁是德语NLP任务的最佳选择jeffding/german gpt2 openmind与DBMDZ BERT对比谁是德语NLP任务的最佳选择 jeffding/german gpt2上一篇开源图像信号处理器openISP从RAW到高质量图像的终极指南下一篇Clipper2快速上手多边形裁剪与偏移的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询