[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-dreamquark-ai--tabnet":3,"tool-dreamquark-ai--tabnet":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":79,"owner_email":80,"owner_twitter":79,"owner_website":81,"owner_url":82,"languages":83,"stars":118,"forks":119,"last_commit_at":120,"license":121,"difficulty_score":122,"env_os":123,"env_gpu":124,"env_ram":125,"env_deps":126,"category_tags":134,"github_topics":135,"view_count":23,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":142,"updated_at":143,"faqs":144,"releases":173},2799,"dreamquark-ai\u002Ftabnet","tabnet","PyTorch implementation of TabNet paper : https:\u002F\u002Farxiv.org\u002Fpdf\u002F1908.07442.pdf","TabNet 是一个基于 PyTorch 实现的开源深度学习模型，专为处理表格数据而设计。它解决了传统机器学习方法在处理结构化数据时难以兼顾高精度与可解释性的痛点，能够高效应对二分类、多分类以及单任务或多任务回归等多种场景。\n\n这款工具非常适合数据科学家、AI 研究人员以及需要处理复杂表格数据的开发者使用。其最大的技术亮点在于引入了“注意力机制”，让模型在预测过程中能自动筛选出最关键的特征，不仅提升了预测准确率，还让用户清晰地看到哪些数据列对结果影响最大，从而实现了真正的“可解释性”。此外，TabNet 完美兼容 scikit-learn 的使用习惯，接口简洁直观，只需几行代码即可完成从训练到预测的全流程。最新版本更增强了对嵌入特征的感知能力，支持特征分组注意力，即使面对由文本转化而来的高维稀疏数据也能游刃有余。无论是学术研究还是工业级应用，TabNet 都能为你提供强大且透明的表格数据分析能力。","# README\n\n# TabNet : Attentive Interpretable Tabular Learning\n\nThis is a pyTorch implementation of Tabnet (Arik, S. O., & Pfister, T. (2019). TabNet: Attentive Interpretable Tabular Learning. arXiv preprint arXiv:1908.07442.) https:\u002F\u002Farxiv.org\u002Fpdf\u002F1908.07442.pdf. Please note that some different choices have been made overtime to improve the library which can differ from the orginal paper.\n\n\u003C!--- BADGES: START --->\n[![CircleCI](https:\u002F\u002Fcircleci.com\u002Fgh\u002Fdreamquark-ai\u002Ftabnet.svg?style=svg)](https:\u002F\u002Fcircleci.com\u002Fgh\u002Fdreamquark-ai\u002Ftabnet)\n\n[![PyPI version](https:\u002F\u002Fbadge.fury.io\u002Fpy\u002Fpytorch-tabnet.svg)](https:\u002F\u002Fbadge.fury.io\u002Fpy\u002Fpytorch-tabnet)\n\n![PyPI - Downloads](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fdm\u002Fpytorch-tabnet)\n\n[![PyPI - Python Version](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fpytorch-tabnet?logo=pypi&style=flat&color=blue)][#pypi-package]\n\n[![Conda - Platform](https:\u002F\u002Fimg.shields.io\u002Fconda\u002Fpn\u002Fconda-forge\u002Fpytorch-tabnet?logo=anaconda&style=flat)][#conda-forge-package]\n\n[![Conda (channel only)](https:\u002F\u002Fimg.shields.io\u002Fconda\u002Fvn\u002Fconda-forge\u002Fpytorch-tabnet?logo=anaconda&style=flat&color=orange)][#conda-forge-package]\n\n[![GitHub - License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fdreamquark-ai\u002Ftabnet?logo=github&style=flat&color=green)][#github-license]\n\n[#github-license]: https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fmain\u002FLICENSE\n[#pypi-package]: https:\u002F\u002Fpypi.org\u002Fproject\u002Fpytorch-tabnet\u002F\n[#conda-forge-package]: https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fpytorch-tabnet\n\u003C!--- BADGES: END --->\n\nAny questions ? Want to contribute ? To talk with us ? You can join us on [Slack](https:\u002F\u002Fjoin.slack.com\u002Ft\u002Fmltooling\u002Fshared_invite\u002Fzt-fxaj0qk7-SWy2_~EWyhj4x9SD6gbRvg)\n\n# Installation\n\n## Easy installation\n\nYou can install using `pip` or `conda` as follows.\n\n**with pip**\n\n```sh\npip install pytorch-tabnet\n```\n\n**with conda**\n\n```sh\nconda install -c conda-forge pytorch-tabnet\n```\n\n## Source code\n\nIf you wan to use it locally within a docker container:\n\n- `git clone git@github.com:dreamquark-ai\u002Ftabnet.git`\n\n- `cd tabnet` to get inside the repository\n\n-----------------\n\n#### CPU only\n\n- `make start` to build and get inside the container\n\n#### GPU\n\n- `make start-gpu` to build and get inside the GPU container\n\n-----------------\n\n- `poetry install` to install all the dependencies, including jupyter\n\n- `make notebook` inside the same terminal. You can then follow the link to a jupyter notebook with tabnet installed.\n\n# What is new ?\n\n- from version **> 4.0** attention is now embedding aware. This aims to maintain a good attention mechanism even with large number of embedding. It is also now possible to specify attention groups (using `grouped_features`). Attention is now done at the group level and not feature level. This is especially useful if a dataset has a lot of columns coming from on single source of data (exemple: a text column transformed using TD-IDF).\n\n# Contributing\n\nWhen contributing to the TabNet repository, please make sure to first discuss the change you wish to make via a new or already existing issue.\n\nOur commits follow the rules presented [here](https:\u002F\u002Fwww.conventionalcommits.org\u002Fen\u002Fv1.0.0\u002F).\n\n# What problems does pytorch-tabnet handle?\n\n- TabNetClassifier : binary classification and multi-class classification problems\n- TabNetRegressor : simple and multi-task regression problems\n- TabNetMultiTaskClassifier:  multi-task multi-classification problems\n\n# How to use it?\n\nTabNet is now scikit-compatible, training a TabNetClassifier or TabNetRegressor is really easy.\n\n```python\nfrom pytorch_tabnet.tab_model import TabNetClassifier, TabNetRegressor\n\nclf = TabNetClassifier()  #TabNetRegressor()\nclf.fit(\n  X_train, Y_train,\n  eval_set=[(X_valid, y_valid)]\n)\npreds = clf.predict(X_test)\n```\n\nor for TabNetMultiTaskClassifier :\n\n```python\nfrom pytorch_tabnet.multitask import TabNetMultiTaskClassifier\nclf = TabNetMultiTaskClassifier()\nclf.fit(\n  X_train, Y_train,\n  eval_set=[(X_valid, y_valid)]\n)\npreds = clf.predict(X_test)\n```\n\nThe targets on `y_train\u002Fy_valid` should contain a unique type (e.g. they must all be strings or integers).\n\n### Default eval_metric\n\nA few classic evaluation metrics are implemented (see further below for custom ones):\n- binary classification metrics : 'auc', 'accuracy', 'balanced_accuracy', 'logloss'\n- multiclass classification : 'accuracy', 'balanced_accuracy', 'logloss'\n- regression: 'mse', 'mae', 'rmse', 'rmsle'\n\n\nImportant Note : 'rmsle' will automatically clip negative predictions to 0, because the model can predict negative values.\nIn order to match the given scores, you need to use `np.clip(clf.predict(X_predict), a_min=0, a_max=None)` when doing predictions.\n\n\n### Custom evaluation metrics\n\nYou can create a metric for your specific need. Here is an example for gini score (note that you need to specifiy whether this metric should be maximized or not):\n\n```python\nfrom pytorch_tabnet.metrics import Metric\nfrom sklearn.metrics import roc_auc_score\n\nclass Gini(Metric):\n    def __init__(self):\n        self._name = \"gini\"\n        self._maximize = True\n\n    def __call__(self, y_true, y_score):\n        auc = roc_auc_score(y_true, y_score[:, 1])\n        return max(2*auc - 1, 0.)\n\nclf = TabNetClassifier()\nclf.fit(\n  X_train, Y_train,\n  eval_set=[(X_valid, y_valid)],\n  eval_metric=[Gini]\n)\n\n```\n\nA specific customization example notebook is available here : https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fdevelop\u002Fcustomizing_example.ipynb\n\n# Semi-supervised pre-training\n\nAdded later to TabNet's original paper, semi-supervised pre-training is now available via the class `TabNetPretrainer`:\n\n```python\n# TabNetPretrainer\nunsupervised_model = TabNetPretrainer(\n    optimizer_fn=torch.optim.Adam,\n    optimizer_params=dict(lr=2e-2),\n    mask_type='entmax' # \"sparsemax\"\n)\n\nunsupervised_model.fit(\n    X_train=X_train,\n    eval_set=[X_valid],\n    pretraining_ratio=0.8,\n)\n\nclf = TabNetClassifier(\n    optimizer_fn=torch.optim.Adam,\n    optimizer_params=dict(lr=2e-2),\n    scheduler_params={\"step_size\":10, # how to use learning rate scheduler\n                      \"gamma\":0.9},\n    scheduler_fn=torch.optim.lr_scheduler.StepLR,\n    mask_type='sparsemax' # This will be overwritten if using pretrain model\n)\n\nclf.fit(\n    X_train=X_train, y_train=y_train,\n    eval_set=[(X_train, y_train), (X_valid, y_valid)],\n    eval_name=['train', 'valid'],\n    eval_metric=['auc'],\n    from_unsupervised=unsupervised_model\n)\n```\n\nThe loss function has been normalized to be independent of `pretraining_ratio`, `batch_size` and the number of features in the problem.\nA self supervised loss greater than 1 means that your model is reconstructing worse than predicting the mean for each feature, a loss bellow 1 means that the model is doing better than predicting the mean.\n\nA complete example can be found within the notebook `pretraining_example.ipynb`.\n\n\u002F!\\ : current implementation is trying to reconstruct the original inputs, but Batch Normalization applies a random transformation that can't be deduced by a single line, making the reconstruction harder. Lowering the `batch_size` might make the pretraining easier.\n\n# Data augmentation on the fly\n\nIt is now possible to apply custom data augmentation pipeline during training.\nTemplates for ClassificationSMOTE and RegressionSMOTE have been added in `pytorch-tabnet\u002Faugmentations.py` and can be used as is.\n\n\n# Easy saving and loading\n\nIt's really easy to save and re-load a trained model, this makes TabNet production ready.\n```\n# save tabnet model\nsaving_path_name = \".\u002Ftabnet_model_test_1\"\nsaved_filepath = clf.save_model(saving_path_name)\n\n# define new model with basic parameters and load state dict weights\nloaded_clf = TabNetClassifier()\nloaded_clf.load_model(saved_filepath)\n```\n\n# Useful links\n\n- [explanatory video](https:\u002F\u002Fyoutu.be\u002FysBaZO8YmX8)\n- [binary classification examples](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fdevelop\u002Fcensus_example.ipynb)\n- [multi-class classification examples](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fdevelop\u002Fforest_example.ipynb)\n- [regression examples](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fdevelop\u002Fregression_example.ipynb)\n- [multi-task regression examples](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fdevelop\u002Fmulti_regression_example.ipynb)\n- [multi-task multi-class classification examples](https:\u002F\u002Fwww.kaggle.com\u002Foptimo\u002Ftabnetmultitaskclassifier)\n- [kaggle moa 1st place solution using tabnet](https:\u002F\u002Fwww.kaggle.com\u002Fc\u002Flish-moa\u002Fdiscussion\u002F201510)\n\n## Model parameters\n\n- `n_d` : int (default=8)\n\n    Width of the decision prediction layer. Bigger values gives more capacity to the model with the risk of overfitting.\n    Values typically range from 8 to 64.\n\n- `n_a`: int (default=8)\n\n    Width of the attention embedding for each mask.\n    According to the paper n_d=n_a is usually a good choice. (default=8)\n\n- `n_steps` : int (default=3)\n\n    Number of steps in the architecture (usually between 3 and 10)  \n\n- `gamma` : float  (default=1.3)\n\n    This is the coefficient for feature reusage in the masks.\n    A value close to 1 will make mask selection least correlated between layers.\n    Values range from 1.0 to 2.0.\n\n- `cat_idxs` : list of int (default=[] - Mandatory for embeddings) \n\n    List of categorical features indices.\n\n- `cat_dims` : list of int (default=[] - Mandatory for embeddings)\n\n    List of categorical features number of modalities (number of unique values for a categorical feature)\n    \u002F!\\ no new modalities can be predicted\n\n- `cat_emb_dim` : list of int (optional)\n\n    List of embeddings size for each categorical features. (default =1)\n\n- `n_independent` : int  (default=2)\n\n    Number of independent Gated Linear Units layers at each step.\n    Usual values range from 1 to 5.\n\n- `n_shared` : int (default=2)\n\n    Number of shared Gated Linear Units at each step\n    Usual values range from 1 to 5\n\n- `epsilon` : float  (default 1e-15)\n\n    Should be left untouched.\n\n- `seed` : int (default=0)\n\n    Random seed for reproducibility\n\n- `momentum` : float\n\n    Momentum for batch normalization, typically ranges from 0.01 to 0.4 (default=0.02)\n\n- `clip_value` : float (default None)\n\n    If a float is given this will clip the gradient at clip_value.\n    \n- `lambda_sparse` : float (default = 1e-3)\n\n    This is the extra sparsity loss coefficient as proposed in the original paper. The bigger this coefficient is, the sparser your model will be in terms of feature selection. Depending on the difficulty of your problem, reducing this value could help.\n\n- `optimizer_fn` : torch.optim (default=torch.optim.Adam)\n\n    Pytorch optimizer function\n\n- `optimizer_params`: dict (default=dict(lr=2e-2))\n\n    Parameters compatible with optimizer_fn used initialize the optimizer. Since we have Adam as our default optimizer, we use this to define the initial learning rate used for training. As mentionned in the original paper, a large initial learning rate of ```0.02 ```  with decay is a good option.\n\n- `scheduler_fn` : torch.optim.lr_scheduler (default=None)\n\n    Pytorch Scheduler to change learning rates during training.\n\n- `scheduler_params` : dict\n\n    Dictionnary of parameters to apply to the scheduler_fn. Ex : {\"gamma\": 0.95, \"step_size\": 10}\n\n- `model_name` : str (default = 'DreamQuarkTabNet')\n\n    Name of the model used for saving in disk, you can customize this to easily retrieve and reuse your trained models.\n\n- `verbose` : int (default=1)\n\n    Verbosity for notebooks plots, set to 1 to see every epoch, 0 to get None.\n\n- `device_name` : str (default='auto')\n    'cpu' for cpu training, 'gpu' for gpu training, 'auto' to automatically detect gpu.\n\n- `mask_type: str` (default='sparsemax')\n    Either \"sparsemax\" or \"entmax\" : this is the masking function to use for selecting features.\n\n- `grouped_features: list of list of ints` (default=None)\n    This allows the model to share it's attention accross feature inside a same group.\n    This can be especially useful when your preprocessing generates correlated or dependant features: like if you use a TF-IDF or a PCA on a text column.\n    Note that feature importance will be exactly the same between features on a same group.\n    Please also note that embeddings generated for a categorical variable are always inside a same group. \n\n- `n_shared_decoder` : int (default=1)\n\n    Number of shared GLU block in decoder, this is only useful for `TabNetPretrainer`.\n\n- `n_indep_decoder` : int (default=1)\n\n    Number of independent GLU block in decoder, this is only useful for `TabNetPretrainer`.\n\n## Fit parameters\n\n- `X_train` : np.array or scipy.sparse.csr_matrix\n\n    Training features\n\n- `y_train` : np.array\n\n    Training targets\n\n- `eval_set`: list of tuple  \n\n    List of eval tuple set (X, y).  \n    The last one is used for early stopping  \n\n- `eval_name`: list of str  \n              List of eval set names.  \n\n- `eval_metric` : list of str  \n              List of evaluation metrics.  \n              The last metric is used for early stopping.\n\n- `max_epochs` : int (default = 200)\n\n    Maximum number of epochs for trainng.\n    \n- `patience` : int (default = 10)\n\n    Number of consecutive epochs without improvement before performing early stopping.\n\n    If patience is set to 0, then no early stopping will be performed.\n\n    Note that if patience is enabled, then best weights from best epoch will automatically be loaded at the end of `fit`.\n\n- `weights` : int or dict (default=0)\n\n    \u002F!\\ Only for TabNetClassifier\n    Sampling parameter\n    0 : no sampling\n    1 : automated sampling with inverse class occurrences\n    dict : keys are classes, values are weights for each class\n\n- `loss_fn` : torch.loss or list of torch.loss\n\n    Loss function for training (default to mse for regression and cross entropy for classification)\n    When using TabNetMultiTaskClassifier you can set a list of same length as number of tasks,\n    each task will be assigned its own loss function\n\n- `batch_size` : int (default=1024)\n\n    Number of examples per batch. Large batch sizes are recommended.\n\n- `virtual_batch_size` : int (default=128)\n\n    Size of the mini batches used for \"Ghost Batch Normalization\".\n    \u002F!\\ `virtual_batch_size` should divide `batch_size`\n\n- `num_workers` : int (default=0)\n\n    Number or workers used in torch.utils.data.Dataloader\n\n- `drop_last` : bool (default=False)\n\n    Whether to drop last batch if not complete during training\n\n- `callbacks` : list of callback function  \n        List of custom callbacks\n\n- `pretraining_ratio` : float\n\n        \u002F!\\ TabNetPretrainer Only : Percentage of input features to mask during pretraining.\n\n        Should be between 0 and 1. The bigger the harder the reconstruction task is.\n\n- `warm_start` : bool (default=False)\n    In order to match scikit-learn API, this is set to False.\n    It allows to fit twice the same model and start from a warm start.\n\n- `compute_importance` : bool (default=True)\n\n    Whether to compute feature importance\n","# 说明文档\n\n# TabNet：专注且可解释的表格数据学习\n\n这是TabNet的PyTorch实现（Arik, S. O., & Pfister, T. (2019). TabNet: Attentive Interpretable Tabular Learning. arXiv预印本arXiv:1908.07442）。https:\u002F\u002Farxiv.org\u002Fpdf\u002F1908.07442.pdf。请注意，为了改进该库，我们在此过程中做出了一些不同的选择，这些选择可能与原始论文有所不同。\n\n\u003C!--- 徽章：开始 --->\n[![CircleCI](https:\u002F\u002Fcircleci.com\u002Fgh\u002Fdreamquark-ai\u002Ftabnet.svg?style=svg)](https:\u002F\u002Fcircleci.com\u002Fgh\u002Fdreamquark-ai\u002Ftabnet)\n\n[![PyPI版本](https:\u002F\u002Fbadge.fury.io\u002Fpy\u002Fpytorch-tabnet.svg)](https:\u002F\u002Fbadge.fury.io\u002Fpy\u002Fpytorch-tabnet)\n\n![PyPI - 下载量](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fdm\u002Fpytorch-tabnet)\n\n[![PyPI - Python版本](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fpytorch-tabnet?logo=pypi&style=flat&color=blue)][#pypi-package]\n\n[![Conda - 平台](https:\u002F\u002Fimg.shields.io\u002Fconda\u002Fpn\u002Fconda-forge\u002Fpytorch-tabnet?logo=anaconda&style=flat)][#conda-forge-package]\n\n[![Conda（仅频道）](https:\u002F\u002Fimg.shields.io\u002Fconda\u002Fvn\u002Fconda-forge\u002Fpytorch-tabnet?logo=anaconda&style=flat&color=orange)][#conda-forge-package]\n\n[![GitHub - 许可证](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fdreamquark-ai\u002Ftabnet?logo=github&style=flat&color=green)][#github-license]\n\n[#github-license]: https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fmain\u002FLICENSE\n[#pypi-package]: https:\u002F\u002Fpypi.org\u002Fproject\u002Fpytorch-tabnet\u002F\n[#conda-forge-package]: https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fpytorch-tabnet\n\u003C!--- 徽章：结束 --->\n\n有任何问题吗？想贡献代码吗？想和我们交流吗？您可以通过[Slack](https:\u002F\u002Fjoin.slack.com\u002Ft\u002Fmltooling\u002Fshared_invite\u002Fzt-fxaj0qk7-SWy2_~EWyhj4x9SD6gbRvg)加入我们。\n\n# 安装\n\n## 简单安装\n\n您可以使用`pip`或`conda`进行安装，如下所示。\n\n**使用pip**\n\n```sh\npip install pytorch-tabnet\n```\n\n**使用conda**\n\n```sh\nconda install -c conda-forge pytorch-tabnet\n```\n\n## 源代码\n\n如果您想在本地Docker容器中使用它：\n\n- `git clone git@github.com:dreamquark-ai\u002Ftabnet.git`\n\n- `cd tabnet`进入仓库目录\n\n-----------------\n\n#### 仅CPU\n\n- `make start`构建并进入容器\n\n#### GPU\n\n- `make start-gpu`构建并进入GPU容器\n\n-----------------\n\n- `poetry install`安装所有依赖项，包括Jupyter\n\n- 在同一终端中运行`make notebook`。然后您可以按照链接打开一个已安装TabNet的Jupyter笔记本。\n\n# 新功能？\n\n- 从版本**> 4.0**开始，注意力机制现在考虑了嵌入信息。这旨在即使在大量嵌入的情况下也能保持良好的注意力机制。此外，现在还可以指定注意力组（使用`grouped_features`）。注意力现在是在组级别而不是特征级别上进行的。如果数据集有许多来自单一数据源的列（例如：使用TF-IDF转换的文本列），这一点尤其有用。\n\n# 贡献\n\n在为TabNet仓库做出贡献时，请务必先通过新的或现有的问题讨论您希望进行的更改。\n\n我们的提交遵循[这里](https:\u002F\u002Fwww.conventionalcommits.org\u002Fen\u002Fv1.0.0\u002F)介绍的规则。\n\n# PyTorch TabNet能解决哪些问题？\n\n- TabNetClassifier：二分类和多分类问题\n- TabNetRegressor：简单回归和多任务回归问题\n- TabNetMultiTaskClassifier：多任务多分类问题\n\n# 如何使用？\n\nTabNet现在与scikit-learn兼容，训练TabNetClassifier或TabNetRegressor非常容易。\n\n```python\nfrom pytorch_tabnet.tab_model import TabNetClassifier, TabNetRegressor\n\nclf = TabNetClassifier()  #TabNetRegressor()\nclf.fit(\n  X_train, Y_train,\n  eval_set=[(X_valid, y_valid)]\n)\npreds = clf.predict(X_test)\n```\n\n或者对于TabNetMultiTaskClassifier：\n\n```python\nfrom pytorch_tabnet.multitask import TabNetMultiTaskClassifier\nclf = TabNetMultiTaskClassifier()\nclf.fit(\n  X_train, Y_train,\n  eval_set=[(X_valid, y_valid)]\n)\npreds = clf.predict(X_test)\n```\n\n`y_train\u002Fy_valid`中的目标应包含单一类型（例如，它们必须全部是字符串或整数）。\n\n### 默认评估指标\n\n实现了一些经典的评估指标（自定义指标见下文）：\n- 二分类指标：'auc'、'accuracy'、'balanced_accuracy'、'logloss'\n- 多分类：'accuracy'、'balanced_accuracy'、'logloss'\n- 回归：'mse'、'mae'、'rmse'、'rmsle'\n\n\n重要提示：由于模型可能会预测负值，'rmsle'会自动将负预测截断为0。为了匹配给定的分数，在进行预测时需要使用`np.clip(clf.predict(X_predict), a_min=0, a_max=None)`。\n\n\n### 自定义评估指标\n\n您可以根据自己的需求创建指标。以下是一个基尼系数的示例（请注意，您需要指定该指标是应该最大化还是最小化）：\n\n```python\nfrom pytorch_tabnet.metrics import Metric\nfrom sklearn.metrics import roc_auc_score\n\nclass Gini(Metric):\n    def __init__(self):\n        self._name = \"gini\"\n        self._maximize = True\n\n    def __call__(self, y_true, y_score):\n        auc = roc_auc_score(y_true, y_score[:, 1])\n        return max(2*auc - 1, 0.)\n\nclf = TabNetClassifier()\nclf.fit(\n  X_train, Y_train,\n  eval_set=[(X_valid, y_valid)],\n  eval_metric=[Gini]\n)\n\n```\n\n一个专门的自定义示例笔记本在这里：https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fdevelop\u002Fcustomizing_example.ipynb\n\n# 半监督预训练\n\n半监督预训练后来被添加到TabNet的原始论文中，现在可以通过`TabNetPretrainer`类实现：\n\n```python\n\n# TabNet预训练器\n无监督模型 = TabNetPretrainer(\n    优化器函数=torch.optim.Adam,\n    优化器参数=dict(lr=2e-2),\n    掩码类型='entmax' # \"sparsemax\"\n)\n\n无监督模型.fit(\n    X_train=X_train,\n    eval_set=[X_valid],\n    预训练比例=0.8,\n)\n\n分类器 = TabNetClassifier(\n    优化器函数=torch.optim.Adam,\n    优化器参数=dict(lr=2e-2),\n    调度器参数={\"step_size\":10, # 如何使用学习率调度器\n                  \"gamma\":0.9},\n    调度器函数=torch.optim.lr_scheduler.StepLR,\n    掩码类型='sparsemax' # 如果使用预训练模型，此设置将被覆盖\n)\n\n分类器.fit(\n    X_train=X_train, y_train=y_train,\n    eval_set=[(X_train, y_train), (X_valid, y_valid)],\n    eval_name=['train', 'valid'],\n    eval_metric=['auc'],\n    from_unsupervised=无监督模型\n)\n```\n\n损失函数已被归一化，使其与`pretraining_ratio`、`batch_size`以及问题中特征的数量无关。\n自监督损失大于1意味着模型的重建效果比单纯预测每个特征的均值还要差；而损失小于1则表示模型的表现优于仅预测均值。\n\n完整的示例可以在笔记本文件`pretraining_example.ipynb`中找到。\n\n\u002F!\\：当前实现试图重建原始输入，但批量归一化会应用一种无法通过单一线性变换推导出的随机变换，这使得重建变得更加困难。降低`batch_size`可能会使预训练更容易进行。\n\n# 实时数据增强\n\n现在可以在训练过程中应用自定义的数据增强流程。分类SMOTE和回归SMOTE的模板已添加到`pytorch-tabnet\u002Faugmentations.py`中，可以直接使用。\n\n\n# 简便的保存与加载\n\n保存和重新加载训练好的模型非常容易，这使得TabNet可以用于生产环境。\n```\n# 保存TabNet模型\nsaving_path_name = \".\u002Ftabnet_model_test_1\"\nsaved_filepath = clf.save_model(saving_path_name)\n\n# 定义一个具有基本参数的新模型，并加载状态字典权重\nloaded_clf = TabNetClassifier()\nloaded_clf.load_model(saved_filepath)\n```\n\n# 有用链接\n\n- [解释视频](https:\u002F\u002Fyoutu.be\u002FysBaZO8YmX8)\n- [二分类示例](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fdevelop\u002Fcensus_example.ipynb)\n- [多分类示例](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fdevelop\u002Fforest_example.ipynb)\n- [回归示例](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fdevelop\u002Fregression_example.ipynb)\n- [多任务回归示例](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fblob\u002Fdevelop\u002Fmulti_regression_example.ipynb)\n- [多任务多分类示例](https:\u002F\u002Fwww.kaggle.com\u002Foptimo\u002Ftabnetmultitaskclassifier)\n- [使用TabNet的Kaggle MOA竞赛第一名解决方案](https:\u002F\u002Fwww.kaggle.com\u002Fc\u002Flish-moa\u002Fdiscussion\u002F201510)\n\n## 模型参数\n\n- `n_d` : 整数（默认=8）\n\n    决策预测层的宽度。较大的值会增加模型的容量，但也存在过拟合的风险。通常取值范围为8到64。\n\n- `n_a`: 整数（默认=8）\n\n    每个掩码的注意力嵌入宽度。\n    根据论文，n_d=n_a通常是不错的选择。（默认=8）\n\n- `n_steps` : 整数（默认=3）\n\n    架构中的步骤数（通常在3到10之间）  \n\n- `gamma` : 浮点数 （默认=1.3）\n\n    这是掩码中特征重用的系数。\n    值接近1时，各层之间的掩码选择相关性最低。\n    取值范围为1.0到2.0。\n\n- `cat_idxs` : 整数列表（默认=[] - 嵌入必需） \n\n    分类特征索引列表。\n\n- `cat_dims` : 整数列表（默认=[] - 嵌入必需）\n\n    分类特征的类别数（即分类特征的唯一值数量）\n    \u002F!\\ 不能预测新的类别\n\n- `cat_emb_dim` : 整数列表（可选）\n\n    每个分类特征的嵌入维度。（默认=1）\n\n- `n_independent` : 整数 （默认=2）\n\n    每个步骤中独立门控线性单元层的数量。\n    通常取值范围为1到5。\n\n- `n_shared` : 整数（默认=2）\n\n    每个步骤中共享的门控线性单元层数\n    通常取值范围为1到5\n\n- `epsilon` : 浮点数 （默认 1e-15）\n\n    应保持不变。\n\n- `seed` : 整数（默认=0）\n\n    用于复现性的随机种子\n\n- `momentum` : 浮点数\n\n    批量归一化的动量，通常在0.01到0.4之间（默认=0.02）\n\n- `clip_value` : 浮点数（默认 None）\n\n    如果给出浮点数值，则会将梯度裁剪至该值。\n\n- `lambda_sparse` : 浮点数（默认 = 1e-3）\n\n    这是原始论文中提出的额外稀疏性损失系数。该系数越大，模型在特征选择方面的稀疏性就越强。根据问题的难度，适当降低此值可能会有所帮助。\n\n- `optimizer_fn` : torch.optim（默认=torch.optim.Adam）\n\n    PyTorch优化器函数\n\n- `optimizer_params`: 字典（默认=dict(lr=2e-2)）\n\n    与optimizer_fn兼容的参数，用于初始化优化器。由于我们默认使用Adam优化器，因此这里用来定义训练时的初始学习率。正如原始论文所提到的，采用较大初始学习率```0.02```并配合衰减是一个不错的选择。\n\n- `scheduler_fn` : torch.optim.lr_scheduler（默认=None）\n\n    PyTorch学习率调度器，用于在训练过程中调整学习率。\n\n- `scheduler_params` : 字典\n\n    应用于调度器函数的参数字典。例如：{\"gamma\": 0.95, \"step_size\": 10}\n\n- `model_name` : 字符串（默认 = 'DreamQuarkTabNet'）\n\n    用于在磁盘上保存模型时的名称，您可以自定义此名称以便于检索和重用训练好的模型。\n\n- `verbose` : 整数（默认=1）\n\n    用于笔记本绘图的详细程度，设置为1可查看每一轮迭代，设置为0则不显示任何内容。\n\n- `device_name` : 字符串（默认='auto'）\n    'cpu'表示在CPU上训练，'gpu'表示在GPU上训练，'auto'则自动检测GPU。\n\n- `mask_type: str`（默认='sparsemax'）\n    可以是“sparsemax”或“entmax”：这是用于特征选择的掩码函数。\n\n- `grouped_features: 列表的列表的整数`（默认=None）\n    这允许模型在同一组内的特征之间共享注意力。\n    当您的预处理生成了相关或依赖的特征时，这一点尤其有用：例如，您对文本列使用TF-IDF或PCA时。\n    请注意，在同一组内的特征之间，其重要性将是完全相同的。\n    此外，请注意，为分类变量生成的嵌入始终位于同一组内。\n\n- `n_shared_decoder` : 整数（默认=1）\n\n    解码器中共享GLU块的数量，这仅对`TabNetPretrainer`有用。\n\n- `n_indep_decoder` : 整数（默认=1）\n\n    解码器中独立GLU块的数量，这仅对`TabNetPretrainer`有用。\n\n## 拟合参数\n\n- `X_train` : np.array 或 scipy.sparse.csr_matrix\n\n    训练特征\n\n- `y_train` : np.array\n\n    训练目标\n\n- `eval_set`: 元组列表  \n\n    评估元组集合列表 (X, y)。  \n    最后一个用于早停  \n\n- `eval_name`: 字符串列表  \n    评估集名称列表。  \n\n- `eval_metric` : 字符串列表  \n    评估指标列表。  \n    最后一个指标用于早停。\n\n- `max_epochs` : int (默认 = 200)\n\n    训练的最大轮数。\n    \n- `patience` : int (默认 = 10)\n\n    在执行早停之前，连续无提升的轮数。\n\n    如果将耐心值设置为 0，则不会进行早停。\n\n    注意，如果启用了耐心机制，那么在 `fit` 结束时会自动加载最佳轮次的权重。\n\n- `weights` : int 或字典 (默认=0)\n\n    \u002F!\\ 仅适用于 TabNetClassifier\n    抽样参数\n    0 : 不抽样\n    1 : 根据类别出现频率自动抽样\n    字典 : 键为类别，值为每个类别的权重\n\n- `loss_fn` : torch.loss 或 torch.loss 列表\n\n    训练用损失函数（回归默认为均方误差，分类默认为交叉熵）。\n    使用 TabNetMultiTaskClassifier 时，可以设置一个与任务数量相同长度的列表，\n    每个任务将分配到其专属的损失函数。\n\n- `batch_size` : int (默认=1024)\n\n    每个批次的样本数。建议使用较大的批次大小。\n\n- `virtual_batch_size` : int (默认=128)\n\n    用于“Ghost Batch Normalization”的小批次大小。\n    \u002F!\\ `virtual_batch_size` 应能整除 `batch_size`\n\n- `num_workers` : int (默认=0)\n\n    torch.utils.data.Dataloader 中使用的工作者数量。\n\n- `drop_last` : bool (默认=False)\n\n    训练过程中，如果最后一个批次不完整，是否将其丢弃。\n\n- `callbacks` : 回调函数列表  \n    自定义回调函数列表。\n\n- `pretraining_ratio` : 浮点数\n\n    \u002F!\\ 仅限 TabNetPretrainer：预训练期间要掩码的输入特征百分比。\n    应介于 0 和 1 之间。数值越大，重建任务就越难。\n\n- `warm_start` : bool (默认=False)\n    为了兼容 scikit-learn 的 API，该参数被设置为 False。\n    它允许对同一个模型进行两次拟合，并从热启动开始。\n\n- `compute_importance` : bool (默认=True)\n\n    是否计算特征重要性","# TabNet 快速上手指南\n\nTabNet 是一个基于 PyTorch 的可解释表格数据深度学习模型，具备类似 Scikit-learn 的简洁接口，支持分类、回归及多任务学习。\n\n## 环境准备\n\n*   **操作系统**：Linux, macOS, Windows\n*   **Python 版本**：3.7+\n*   **核心依赖**：\n    *   PyTorch (需预先安装与硬件匹配的 CUDA 版本以启用 GPU 加速)\n    *   Scikit-learn\n    *   Pandas \u002F Numpy\n*   **硬件建议**：支持 CUDA 的 NVIDIA GPU 可显著提升训练速度（可选 CPU 模式）。\n\n## 安装步骤\n\n推荐使用 `pip` 进行安装。国内用户建议使用清华或阿里镜像源以加速下载。\n\n### 方式一：使用 pip 安装（推荐）\n\n```sh\n# 使用默认源\npip install pytorch-tabnet\n\n# 或使用国内镜像源（推荐中国开发者使用）\npip install pytorch-tabnet -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n### 方式二：使用 Conda 安装\n\n```sh\nconda install -c conda-forge pytorch-tabnet\n```\n\n### 源码安装（可选）\n\n如需使用最新开发版或进行二次开发：\n\n```sh\ngit clone git@github.com:dreamquark-ai\u002Ftabnet.git\ncd tabnet\npoetry install\n```\n\n## 基本使用\n\nTabNet 的设计遵循 Scikit-learn 风格，只需几行代码即可完成模型定义、训练和预测。\n\n### 1. 分类任务示例\n\n适用于二分类和多分类问题。\n\n```python\nfrom pytorch_tabnet.tab_model import TabNetClassifier\n\n# 初始化模型\nclf = TabNetClassifier(\n    n_d=8, \n    n_a=8, \n    n_steps=3,\n    gamma=1.3,\n    cat_idxs=[],       # 填入类别特征索引，例如 [0, 2]\n    cat_dims=[],       # 填入对应类别特征的维度（唯一值数量）\n    cat_emb_dim=1,\n    lambda_sparse=1e-3,\n    optimizer_fn=torch.optim.Adam,\n    optimizer_params=dict(lr=2e-2),\n    scheduler_params={\"step_size\":10, \"gamma\":0.9},\n    scheduler_fn=torch.optim.lr_scheduler.StepLR,\n    mask_type='sparsemax',\n    verbose=1,\n    device_name='auto'\n)\n\n# 训练模型\n# X_train, y_train: 训练集特征和标签 (Numpy array 或 Pandas DataFrame\u002FSeries)\n# eval_set: 验证集列表，用于早停和监控\nclf.fit(\n    X_train=X_train, \n    y_train=y_train,\n    eval_set=[(X_valid, y_valid)],\n    eval_metric=['auc'] # 可选：'accuracy', 'logloss', 'balanced_accuracy' 等\n)\n\n# 预测\npreds = clf.predict(X_test)\npredict_proba = clf.predict_proba(X_test)\n```\n\n### 2. 回归任务示例\n\n适用于单目标或多目标回归。\n\n```python\nfrom pytorch_tabnet.tab_model import TabNetRegressor\n\nreg = TabNetRegressor()\n\nreg.fit(\n    X_train=X_train, \n    y_train=y_train,\n    eval_set=[(X_valid, y_valid)],\n    eval_metric=['mse'] # 可选：'mae', 'rmse', 'rmsle'\n)\n\npreds = reg.predict(X_test)\n```\n\n### 3. 自定义评估指标\n\n您可以轻松添加自定义指标（如 Gini 系数）：\n\n```python\nfrom pytorch_tabnet.metrics import Metric\nfrom sklearn.metrics import roc_auc_score\n\nclass Gini(Metric):\n    def __init__(self):\n        self._name = \"gini\"\n        self._maximize = True\n\n    def __call__(self, y_true, y_score):\n        auc = roc_auc_score(y_true, y_score[:, 1])\n        return max(2*auc - 1, 0.)\n\nclf = TabNetClassifier()\nclf.fit(\n    X_train=X_train, \n    y_train=y_train,\n    eval_set=[(X_valid, y_valid)],\n    eval_metric=[Gini]\n)\n```\n\n### 4. 模型保存与加载\n\nTabNet 原生支持模型的持久化，便于生产部署。\n\n```python\n# 保存模型\nsaving_path_name = \".\u002Ftabnet_model_test_1\"\nsaved_filepath = clf.save_model(saving_path_name)\n\n# 加载模型\nloaded_clf = TabNetClassifier()\nloaded_clf.load_model(saved_filepath)\n\n# 使用加载的模型预测\npreds = loaded_clf.predict(X_test)\n```\n\n> **提示**：对于包含大量类别的特征（如文本经 TF-IDF 处理后），建议在初始化时设置 `grouped_features` 参数以提升注意力机制的效果。","某金融风控团队正在构建信用卡欺诈检测模型，需要处理包含数百个数值型和类别型特征的高维表格数据。\n\n### 没有 tabnet 时\n- 传统机器学习模型（如 XGBoost）难以自动捕捉特征间复杂的非线性交互关系，依赖人工进行繁琐的特征工程。\n- 深度学习模型（如 MLP）虽然拟合能力强，但如同“黑盒”，无法向监管方解释为何判定某笔交易为欺诈。\n- 面对稀疏的类别特征（如商户 ID），直接 One-Hot 编码导致维度爆炸，模型训练缓慢且容易过拟合。\n- 缺乏内置的注意力机制，无法直观识别哪些关键特征（如交易金额、地点）对预测结果起了决定性作用。\n\n### 使用 tabnet 后\n- TabNet 利用独特的串行注意力机制，自动筛选并组合关键特征，显著减少了人工特征工程的工作量。\n- 模型提供可视化的特征重要性掩码（Feature Mask），清晰展示每次决策的依据，完美满足合规性解释需求。\n- 原生支持嵌入层（Embedding）与注意力分组，高效处理高基数类别特征，在保持精度的同时大幅降低显存占用。\n- 通过逐层关注不同特征子集，TabNet 在欺诈样本极少的不平衡数据集中，依然能精准捕捉细微的异常模式。\n\nTabNet 成功将深度学习的高精度与决策树的可解释性合二为一，让金融风控模型既“算得准”又“说得清”。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdreamquark-ai_tabnet_8b5de738.png","dreamquark-ai","DreamQuark","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fdreamquark-ai_6bc0d16a.png","Sharpen decisions in Financial Services with explainable Deep Learning",null,"info@dreamquark.com","https:\u002F\u002Fwww.dreamquark.com\u002F","https:\u002F\u002Fgithub.com\u002Fdreamquark-ai",[84,88,92,96,100,104,107,111,114],{"name":85,"color":86,"percentage":87},"Python","#3572A5",60,{"name":89,"color":90,"percentage":91},"Jupyter Notebook","#DA5B0B",35.4,{"name":93,"color":94,"percentage":95},"Makefile","#427819",1.9,{"name":97,"color":98,"percentage":99},"Shell","#89e051",1.7,{"name":101,"color":102,"percentage":103},"Batchfile","#C1F12E",0.3,{"name":105,"color":106,"percentage":103},"CSS","#663399",{"name":108,"color":109,"percentage":110},"Dockerfile","#384d54",0.2,{"name":112,"color":113,"percentage":110},"HTML","#e34c26",{"name":115,"color":116,"percentage":117},"Smarty","#f0c040",0,2928,514,"2026-04-03T09:36:37","MIT",1,"Linux, macOS, Windows","非必需。支持 CPU 和 GPU 模式。若使用 GPU，需 NVIDIA 显卡及对应的 CUDA 环境（具体版本取决于本地 PyTorch 安装），README 未指定最低显存要求。","未说明",{"notes":127,"python":128,"dependencies":129},"该工具是 TabNet 的 PyTorch 实现，可通过 pip 或 conda 安装。支持半监督预训练和自定义数据增强。若使用 Docker 运行，提供了专门的 CPU 和 GPU 构建命令。模型支持保存和加载以便生产部署。对于 'rmsle' 评估指标，预测时需注意将负值裁剪为 0。","3.7+ (根据 PyPI badge 推断，具体取决于 torch 版本)",[130,131,132,133],"torch","scikit-learn","pandas","numpy",[51,13,54],[136,137,138,139,140,141,67],"pytorch","deep-neural-networks","machine-learning-library","tabular-data","research-paper","pytorch-tabnet","2026-03-27T02:49:30.150509","2026-04-06T07:13:23.356224",[145,150,155,160,164,169],{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},12939,"在 GPU 上运行时遇到 'CUDA error: device-side assert triggered' 错误怎么办？","这通常是由梯度爆炸引起的。尝试设置梯度裁剪限制，例如在参数中添加 `clip_value = 5`。此外，也可以尝试增加权重衰减（weight decay）来缓解此问题。","https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fissues\u002F240",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},12940,"如何正确保存和加载 TabNet 模型？","保存和加载 TabNet 模型遵循 PyTorch 的标准流程：\n1. 保存模型权重：`torch.save(clf_tabnet.network.state_dict(), PATH)`\n2. 加载时，首先用相同的参数重新定义模型实例：`clf_tabnet = TabNetClassifier(**your_params)`\n3. 然后加载权重：`clf_tabnet.network.load_state_dict(torch.load(PATH))`\n注意：不要直接 pickle 整个分类器对象，推荐只保存 state_dict。","https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fissues\u002F136",{"id":156,"question_zh":157,"answer_zh":158,"source_url":159},12941,"为什么在 GPU 上训练的模型无法在 CPU 上进行预测（报错 no CUDA-capable device）？","这是因为在初始化模型时显式指定了 `device_name='cuda'`，导致该设置被保存为加载参数。当在没有 GPU 的设备上加载时就会报错。\n解决方案：在定义 `TabNetClassifier` 时，将 `device_name` 设置为 `'auto'`（或不指定，默认为 auto），这样模型会自动检测可用设备，从而支持在 CPU 和 GPU 之间灵活切换加载和推理。","https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fissues\u002F197",{"id":161,"question_zh":162,"answer_zh":163,"source_url":154},12942,"文档中提到的某些参数（如 model_name, saving_path, mask_type）在代码中无法使用或报错，为什么？","这通常是因为您查看的是开发分支（develop branch）的文档，但安装的是主分支（master branch\u002Fpip）的稳定版本。开发分支包含尚未发布的新功能（如 `mask_type`），而旧版本可能已弃用某些参数（如 `model_name`, `saving_path`）。\n建议：如果您通过 pip 安装，请参考 GitHub 上 master 分支的 README 文档；如果需要新功能，请直接从源码安装开发版本。",{"id":165,"question_zh":166,"answer_zh":167,"source_url":168},12943,"TabNet 在森林覆盖类型（Forest Cover Type）数据集上的运行结果与论文不符，准确率很低，如何解决？","复现论文结果可能需要特定的超参数或原始代码实现。您可以参考论文作者在 OpenReview 上提供的原始实验代码和链接。此外，确保您的环境配置正确，不同 GPU 型号有时也会影响结果的复现性。建议对比官方提供的示例代码和超参数设置。","https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fissues\u002F70",{"id":170,"question_zh":171,"answer_zh":172,"source_url":149},12944,"在使用 TabNet 时遇到 'Invalid index in gather' 运行时错误，原因是什么？","该错误通常与数据中的异常值或梯度不稳定有关。虽然具体堆栈指向 `tau.gather`，但根本原因往往也是梯度爆炸。请尝试应用梯度裁剪（设置 `clip_value`）或调整学习率和权重衰减。同时检查输入数据是否包含非法值（尽管用户报告已处理 NaN\u002FInf，但仍需确认数据类型匹配，如 float64 转 float32）。",[174,179,184,189,194,199,204,209,214,219,224,229,234,239,244,249,254],{"id":175,"version":176,"summary_zh":177,"released_at":178},71628,"v4.1.0","# [4.1.0](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcompare\u002Fv3.1.1...v4.1.0) (2023-07-23)\r\n\r\n\r\n### 错误修复\r\n\r\n* 424 允许任何 np.intX 类型作为训练目标 ([63a8dba](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F63a8dba99e4853b9be5d3e6c14909a30685c7532))\r\n* 使用 numpy 计算无监督损失 ([49bd61b](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F49bd61be4e8faa98ef3b46b4f0115379407e8475))\r\n* 自定义损失使用原地操作 ([423f7c4](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F423f7c43647f8be53f28c9c6061031b7a2644d20))\r\n* 禁用 ANSI 转义序列 ([60ec6bf](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F60ec6bf7b27795da44e608d6848573bd0fd4ecd5))\r\n* 特征重要性不再依赖于数据加载器 ([5b19091](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F5b190916515793114ffa1a9ac4f3869222a14c11))\r\n* 将 README 中的 patience 参数改为 10 ([fd2c73a](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Ffd2c73a4300a745f540a2a789716ec4cabe90a7c))\r\n* 将标准差为 0 的特征替换为均值，若均值也为 0 则替换为 1 ([ddf02da](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fddf02dab9bdc41c6d7736f0be509950e907909a4))\r\n* 尝试禁用并行安装 ([c4963ad](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fc4963ad61e479997c912db816736d073106bcc20))\r\n* pandas 错误信息中的拼写错误 ([5ac5583](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F5ac55834b32693abc4b22028a74475ee0440c2a5))\r\n* 更新 GPU Dockerfile 中的 GPG 密钥 ([709fcb1](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F709fcb1ab31f8ac232594877a0d2b3922a02360b))\r\n* 提升资源限制 ([fc59ea6](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Ffc59ea61139228440d2063ead9db42f656d84ff7))\r\n* 使用带有贝塞尔校正的 numpy 标准差，并进行测试 ([3adaf4c](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F3adaf4c0858f5d9af8f0f2a2fdaa92360d12cb87))\r\n\r\n\r\n### 功能新增\r\n\r\n* 在 fit 方法中添加数据增强 ([6d0485f](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F6d0485f58bd1028cffd195d9e27eb97915b9cb2c))\r\n* 添加与 scikit-learn 兼容的 warm_start 参数 ([d725101](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fd725101a559c6be49a6f8e20c3e68b18b8eb7b01))\r\n* 增加 Conda 安装选项 ([ca14b76](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fca14b76fc771459745c49723733ff88ef1126d30)), 关闭了 [#346](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fissues\u002F346)\r\n* 为节省 CI 时间，在 GPU Dockerfile 中禁用测试 ([233f74e](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F233f74e41648dad62899ceba7481d58ecfbd87b7))\r\n* 启用注意力机制的特征分组功能 ([bcae5f4](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fbcae5f43b89fb2c53a0fe8be7c218a7b91afac96))\r\n* 通过放宽 poetry 的版本约束，支持 PyTorch 2.0 ([bbd7a4e](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fbbd7a4e96d5503ad23048ce39997462ed1a2eca0))\r\n* 预训练过程与论文一致 ([5adb804](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F5adb80482c8242dde7b7942529db94fa9ccbfe48))\r\n* 当 cat_dims 和 cat_idxs 不一致时抛出错误 ([8c3b795](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F8c3b7951642f62e7449bb95875b5265d4b89148e))","2023-07-23T13:34:05",{"id":180,"version":181,"summary_zh":182,"released_at":183},71629,"v4.0","## 变更内容\n* 修复了 README 中的 minor 拼写错误，并由 @discdiver 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F272 中提升了可读性和一致性\n* 新特性：当 cat_dims 和 cat_idxs 不一致时抛出错误，由 @eduardocarvp 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F289 中实现\n* 新特性：预训练与论文一致，由 @Optimox 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F302 中实现\n* 文档更新：在 README 中添加了 conventional commits 规范，由 @eduardocarvp 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F286 中完成\n* 开发中修复：更新 GPU Dockerfile 中的 GPG 密钥，由 @Optimox 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F339 中完成\n* 新特性 - 312：将 print 语句替换为警告，由 @Optimox 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F337 中实现\n* 修复：使用就地操作的自定义损失函数，由 @eduardocarvp 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F323 中完成\n* 新特性：为节省 CI 时间，在 GPU Dockerfile 中禁用测试，由 @Optimox 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F342 中实现\n* 新特性 \u002F 336：检查 pandas DataFrame 是否存在以及 drop_last 默认值是否为 True，由 @Optimox 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F338 中实现\n* 新特性：添加与 scikit-learn 兼容的 warm_start 功能，由 @Optimox 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F340 中实现\n* 增加了 Conda 安装说明，由 @sugatoray 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F347 中完成\n* Bugfix：修复预训练内存溢出问题，由 @eduardocarvp 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F348 中完成\n* 修复：特征重要性不再依赖于数据加载器，由 @Optimox 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F372 中完成\n* 新特性：在 fit 方法内部添加数据增强功能，由 @Optimox 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F363 中实现\n* 杂项：将 dockerfile_gpu 更新至最新版本，由 @Hartorn 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F409 中完成\n* 修复：将 README 中的 patience 参数调整为 10，由 @Optimox 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F396 中完成\n* 杂项：修复发布脚本，由 @Hartorn 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F412 中完成\n\n## 新贡献者\n* @discdiver 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F272 中完成了首次贡献\n* @sugatoray 在 https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fpull\u002F347 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcompare\u002Fv3.1.1...v4.0","2022-09-14T16:48:34",{"id":185,"version":186,"summary_zh":187,"released_at":188},71630,"v3.1.1","### 错误修复\n\n* 在预训练中添加 `preds_mapper` ([76f2c85](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F76f2c85))","2021-02-02T08:05:08",{"id":190,"version":191,"summary_zh":192,"released_at":193},71631,"v3.1.0","### 错误修复\n\n* `n_a` 未被使用 ([7ae20c9](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F7ae20c9))\n\n\n### 功能改进\n\n* 保存和加载 `preds_mapper` ([cab643b](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fcab643b))","2021-01-12T18:17:59",{"id":195,"version":196,"summary_zh":197,"released_at":198},71632,"v3.0.0","### 错误修复\n\n* 允许将字符串作为 `checknan` 的目标对象 ([855befc](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F855befc))\n* 当设备为 CPU 时禁用内存固定 ([bd0b96f](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fbd0b96f))\n* 修复了文档字符串中的问题 ([d216fbf](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fd216fbf))\n* 当模型保存在 GPU 上时，从 CPU 加载 ([451bd86](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F451bd86))\n\n\n### 功能改进\n\n* 添加新的默认指标 ([0fe5b72](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F0fe5b72))\n* 支持自监督预训练 ([d4af838](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fd4af838))\n* 基于掩码的损失函数 ([64052b0](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F64052b0))","2020-12-15T12:44:21",{"id":200,"version":201,"summary_zh":202,"released_at":203},71633,"v2.0.1","### 错误修复\n\n* 添加对 evalset 维度的检查 ([ba09980](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fba09980))\n* 仅在训练时才保留内存可用 ([28346c2](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F28346c2))\n* 指定设备 ([46a301f](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F46a301f))\n* 在 Py36 回退中使用 torch.load 的 map_location 参数 ([63cb8c4](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F63cb8c4))","2020-10-15T21:00:49",{"id":205,"version":206,"summary_zh":207,"released_at":208},71634,"v2.0.0","### 错误修复\n\n* 仅在 `env=CI` 时限制为 1000 行 ([c557349](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fc557349))\n* 向 `torch.load` 添加 `map_location` 参数 ([c2b560e](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fc2b560e))\n* 对于 Python 3.6，`load_model` 回退到使用 `BytesIO` ([55c09e5](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F55c09e5))\n\n\n### 功能特性\n\n* 添加 NaN 和无穷值检查 ([d871406](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fd871406))\n* 添加简易调度器 ([0ae114f](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F0ae114f))\n* 增加回调函数和指标 ([1e0daec](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F1e0daec))\n* 使用指标和回调函数重构模型 ([cc57d62](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fcc57d62))\n* 性能优化 ([5a01359](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F5a01359))\n* TabNet 多任务分类器 ([5764a43](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F5764a43))\n* 更新 README 和笔记本文件 ([9cb38d2](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F9cb38d2))","2020-10-13T12:10:14",{"id":210,"version":211,"summary_zh":212,"released_at":213},71635,"v1.2.0","### 错误修复\n\n* 优化调度器的详细输出级别 ([d6fbf90](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fd6fbf90))\n\n\n### 功能特性\n\n* 添加 entmax 作为参数 ([96c8a74](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F96c8a74))\n* 允许指定其他优化器参数 ([16d92d5](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F16d92d5))\n* 入门回归任务时允许使用样本权重 ([d40b02f](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fd40b02f))\n* 支持保存和加载 TabNet 模型 ([9d2d8ae](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F9d2d8ae))\n* 保存模型参数并实现便捷加载 ([6e22393](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F6e22393))","2020-07-01T16:27:43",{"id":215,"version":216,"summary_zh":217,"released_at":218},71636,"v1.1.0","### 错误修复\n\n* 允许零层（[e3b5a04](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fe3b5a04)）\n* 在嵌入生成器中按 `cat_idx` 排序（[9ab3ad5](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F9ab3ad5)）\n* 更新 `forest_example` 笔记本（[8092324](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F8092324)）\n\n\n### 功能改进\n\n* 添加多输出回归（[ffd7c28](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fffd7c28)）\n* 在 `fit` 参数中添加 `num_workers` 和 `drop_last`（[313d074](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F313d074)）\n* 从前向传播中移除掩码计算（[44d1a47](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F44d1a47)）\n* 提升 GBN 的速度并简化代码（[1642909](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F1642909)）","2020-06-02T15:46:05",{"id":220,"version":221,"summary_zh":222,"released_at":223},71637,"v1.0.6","\n\n\n","2020-04-20T08:13:01",{"id":225,"version":226,"summary_zh":227,"released_at":228},71638,"v1.0.5","### 错误修复\n\n* 移除绘图相关的死代码 ([f96795f](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Ff96795f))\n\n\n### 功能改进\n\n* 切换到稀疏矩阵技巧 ([98910bc](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F98910bc))","2020-03-13T15:18:46",{"id":230,"version":231,"summary_zh":232,"released_at":233},71639,"v1.0.4","\n\n### Bug Fixes\n\n* allow smaller different nshared and nindependent ([4b365a7](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F4b365a7))\n* sparsemax on train and predict epoch ([6f7c0e0](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F6f7c0e0))\n\n\n\n","2020-02-28T16:36:15",{"id":235,"version":236,"summary_zh":237,"released_at":238},71640,"v1.0.3","\n\n### Bug Fixes\n\n* map class predictions for XGB results ([3747e2f](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F3747e2f))\n\n\n### Features\n\n* fix shared layers with independent batchnorm ([5f0e43f](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F5f0e43f))\n\n\n\n","2020-02-07T16:54:40",{"id":240,"version":241,"summary_zh":242,"released_at":243},71641,"v1.0.2","\r\n\r\n### Bug Fixes\r\n\r\n* multiclass prediction mapper ([2317c5c](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F2317c5c))\r\n* remove deepcopy from shared blocks ([123932a](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F123932a))\r\n\r\n\r\n\r\n","2020-02-03T16:22:38",{"id":245,"version":246,"summary_zh":247,"released_at":248},71642,"v1.0.1","\n\n### Bug Fixes\n\n* **regression:** fix scheduler ([01e46b7](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F01e46b7))\n* fixing Dockerfile for poetry 1.0 ([6c5cdec](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F6c5cdec))\n* importance indexing fixed ([a8382c3](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fa8382c3))\n* local explain all batches ([91461fb](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F91461fb))\n* regression gpu integration an typos ([269b4c5](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F269b4c5))\n* resolve timer issue and warnings ([ecd2cd9](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fecd2cd9))\n\n\n### Features\n\n* improve verbosity ([8a2cd87](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F8a2cd87))\n\n\n\n","2020-01-20T15:28:19",{"id":250,"version":251,"summary_zh":252,"released_at":253},71643,"v1.0.0","\n\n### Bug Fixes\n\n* **deps:** update dependency numpy to v1.17.3 ([eff6555](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Feff6555))\n* **deps:** update dependency numpy to v1.17.4 ([a80cf29](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fa80cf29))\n* **deps:** update dependency torch to v1.3.1 ([18ec79b](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F18ec79b))\n* **deps:** update dependency tqdm to v4.37.0 ([f8f04e7](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Ff8f04e7))\n* **deps:** update dependency tqdm to v4.38.0 ([0bf45d2](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F0bf45d2))\n* functional balanced version ([fab7f16](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Ffab7f16))\n* remove torch warnings (index should be bool) ([f5817cf](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Ff5817cf))\n\n\n### Features\n\n* add gpu dockerfile and adapt makefile ([8d14406](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F8d14406))\n* update notebooks for new model format ([43e2693](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F43e2693))\n\n\n\n","2019-12-03T11:40:24",{"id":255,"version":256,"summary_zh":257,"released_at":258},71644,"v0.1.2","\n\n### Bug Fixes\n\n* add softmax to predict_proba ([bea966f](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fbea966f))\n* correct code linting ([ae3098c](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fae3098c))\n* float type when output_dim=1 ([7bb7dfd](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F7bb7dfd))\n\n\n### Features\n\n* add editorconfig file ([5e84b66](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002F5e84b66))\n* add flake8 ([b1be1f9](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fb1be1f9))\n* run flake8 in CI ([e72d416](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fe72d416))\n* start PyTorch TabNet Paper Implementation ([e7dc059](https:\u002F\u002Fgithub.com\u002Fdreamquark-ai\u002Ftabnet\u002Fcommit\u002Fe7dc059))\n\n\n\n","2019-11-06T08:48:16"]