[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"tool-Kotlin--kotlindl":3,"similar-Kotlin--kotlindl":139},{"id":4,"github_repo":5,"name":6,"description_en":7,"description_zh":8,"ai_summary_zh":9,"readme_en":10,"readme_zh":11,"quickstart_zh":12,"use_case_zh":13,"hero_image_url":14,"owner_login":15,"owner_name":15,"owner_avatar_url":16,"owner_bio":17,"owner_company":18,"owner_location":18,"owner_email":18,"owner_twitter":19,"owner_website":20,"owner_url":21,"languages":22,"stars":30,"forks":31,"last_commit_at":32,"license":33,"difficulty_score":34,"env_os":35,"env_gpu":36,"env_ram":37,"env_deps":38,"category_tags":48,"github_topics":50,"view_count":34,"oss_zip_url":18,"oss_zip_packed_at":18,"status":54,"created_at":55,"updated_at":56,"faqs":57,"releases":88},7995,"Kotlin\u002Fkotlindl","kotlindl","High-level Deep Learning Framework written in Kotlin and inspired by Keras","KotlinDL 是一款专为 Kotlin 开发者打造的高级深度学习框架，其设计理念深受流行的 Keras 启发。它旨在降低 JVM 和 Android 生态中构建人工智能应用的门槛，让开发者能够使用熟悉的 Kotlin 语法，轻松完成从模型训练、迁移学习到推理部署的全流程工作。\n\n传统上，在 Java 或 Kotlin 环境中进行深度学习开发往往需要调用复杂的底层 API 或依赖 Python 环境，这增加了工程集成的难度。KotlinDL 通过封装 TensorFlow Java 和 ONNX Runtime 底层能力，提供了简洁流畅的链式调用接口。开发者只需几行代码即可定义如 LeNet 这样的经典卷积神经网络，并快速完成编译、训练与评估，极大地简化了生产环境中的模型落地过程。\n\n此外，KotlinDL 支持直接导入现有的 Keras 和 ONNX 模型进行推理，方便复用社区丰富的预训练资源。它不仅适合希望将 AI 功能集成到移动端或服务端的 Android 及后端工程师，也适用于偏好类型安全语言的研究人员。借助其对 GPU 加速的支持以及与 Jupyter Notebook 的","KotlinDL 是一款专为 Kotlin 开发者打造的高级深度学习框架，其设计理念深受流行的 Keras 启发。它旨在降低 JVM 和 Android 生态中构建人工智能应用的门槛，让开发者能够使用熟悉的 Kotlin 语法，轻松完成从模型训练、迁移学习到推理部署的全流程工作。\n\n传统上，在 Java 或 Kotlin 环境中进行深度学习开发往往需要调用复杂的底层 API 或依赖 Python 环境，这增加了工程集成的难度。KotlinDL 通过封装 TensorFlow Java 和 ONNX Runtime 底层能力，提供了简洁流畅的链式调用接口。开发者只需几行代码即可定义如 LeNet 这样的经典卷积神经网络，并快速完成编译、训练与评估，极大地简化了生产环境中的模型落地过程。\n\n此外，KotlinDL 支持直接导入现有的 Keras 和 ONNX 模型进行推理，方便复用社区丰富的预训练资源。它不仅适合希望将 AI 功能集成到移动端或服务端的 Android 及后端工程师，也适用于偏好类型安全语言的研究人员。借助其对 GPU 加速的支持以及与 Jupyter Notebook 的良好兼容，KotlinDL 让深度学习在 Kotlin 生态中变得更加直观、高效且易于维护。","# KotlinDL: High-level Deep Learning API in Kotlin [![official JetBrains project](http:\u002F\u002Fjb.gg\u002Fbadges\u002Fincubator.svg)](https:\u002F\u002Fconfluence.jetbrains.com\u002Fdisplay\u002FALL\u002FJetBrains+on+GitHub)\n\n[![Kotlin](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fkotlin-1.8.21-blue.svg?logo=kotlin)](http:\u002F\u002Fkotlinlang.org)\n[![Slack channel](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fchat-slack-green.svg?logo=slack)](https:\u002F\u002Fkotlinlang.slack.com\u002Fmessages\u002Fkotlindl\u002F)\n\nKotlinDL is a high-level Deep Learning API written in Kotlin and inspired by [Keras](https:\u002F\u002Fkeras.io). \nUnder the hood, it uses TensorFlow Java API and ONNX Runtime API for Java. KotlinDL offers simple APIs for training deep learning models from scratch, \nimporting existing Keras and ONNX models for inference, and leveraging transfer learning for tailoring existing pre-trained models to your tasks. \n\nThis project aims to make Deep Learning easier for JVM and Android developers and simplify deploying deep learning models in production environments.\n\nHere's an example of what a classic convolutional neural network LeNet would look like in KotlinDL:\n\n```kotlin\nprivate const val EPOCHS = 3\nprivate const val TRAINING_BATCH_SIZE = 1000\nprivate const val NUM_CHANNELS = 1L\nprivate const val IMAGE_SIZE = 28L\nprivate const val SEED = 12L\nprivate const val TEST_BATCH_SIZE = 1000\n\nprivate val lenet5Classic = Sequential.of(\n    Input(\n        IMAGE_SIZE,\n        IMAGE_SIZE,\n        NUM_CHANNELS\n    ),\n    Conv2D(\n        filters = 6,\n        kernelSize = intArrayOf(5, 5),\n        strides = intArrayOf(1, 1, 1, 1),\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Zeros(),\n        padding = ConvPadding.SAME\n    ),\n    AvgPool2D(\n        poolSize = intArrayOf(1, 2, 2, 1),\n        strides = intArrayOf(1, 2, 2, 1),\n        padding = ConvPadding.VALID\n    ),\n    Conv2D(\n        filters = 16,\n        kernelSize = intArrayOf(5, 5),\n        strides = intArrayOf(1, 1, 1, 1),\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Zeros(),\n        padding = ConvPadding.SAME\n    ),\n    AvgPool2D(\n        poolSize = intArrayOf(1, 2, 2, 1),\n        strides = intArrayOf(1, 2, 2, 1),\n        padding = ConvPadding.VALID\n    ),\n    Flatten(), \u002F\u002F 3136\n    Dense(\n        outputSize = 120,\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Constant(0.1f)\n    ),\n    Dense(\n        outputSize = 84,\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Constant(0.1f)\n    ),\n    Dense(\n        outputSize = 10,\n        activation = Activations.Linear,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Constant(0.1f)\n    )\n)\n\n\nfun main() {\n    val (train, test) = mnist()\n    \n    lenet5Classic.use {\n        it.compile(\n            optimizer = Adam(clipGradient = ClipGradientByValue(0.1f)),\n            loss = Losses.SOFT_MAX_CROSS_ENTROPY_WITH_LOGITS,\n            metric = Metrics.ACCURACY\n        )\n    \n        it.logSummary()\n    \n        it.fit(dataset = train, epochs = EPOCHS, batchSize = TRAINING_BATCH_SIZE)\n    \n        val accuracy = it.evaluate(dataset = test, batchSize = TEST_BATCH_SIZE).metrics[Metrics.ACCURACY]\n    \n        println(\"Accuracy: $accuracy\")\n    }\n}\n```\n\n## Table of Contents\n\n- [Library Structure](#library-structure)\n- [How to configure KotlinDL in your project](#how-to-configure-kotlindl-in-your-project)\n  - [Working with KotlinDL in Android projects](#working-with-kotlindl-in-android-projects)\n  - [Working with KotlinDL in Jupyter Notebook](#working-with-kotlindl-in-jupyter-notebook)\n- [KotlinDL, ONNX Runtime, Android, and JDK versions](#kotlindl-onnx-runtime-android-and-jdk-versions)\n- [Documentation](#documentation)\n- [Examples and tutorials](#examples-and-tutorials)\n- [Running KotlinDL on GPU](#running-kotlindl-on-gpu)\n- [Logging](#logging)\n- [Fat Jar issue](#fat-jar-issue)\n- [Limitations](#limitations)\n- [Contributing](#contributing)\n- [Reporting issues\u002FSupport](#reporting-issuessupport)\n- [Code of Conduct](#code-of-conduct)\n- [License](#license)\n\n## Library Structure\n\nKotlinDL consists of several modules:\n* `kotlin-deeplearning-api` api interfaces and classes\n* `kotlin-deeplearning-impl` implementation classes and utilities\n* `kotlin-deeplearning-onnx` inference with ONNX Runtime\n* `kotlin-deeplearning-tensorflow` learning and inference with TensorFlow\n* `kotlin-deeplearning-visualization` visualization utilities\n* `kotlin-deeplearning-dataset` dataset classes\n\nModules `kotlin-deeplearning-tensorflow` and `kotlin-deeplearning-dataset` are only available for desktop JVM, while other artifacts could also be used on Android.\n\n## How to configure KotlinDL in your project\n\nTo use KotlinDL in your project, ensure that `mavenCentral` is added to the repositories list:\n```groovy\nrepositories {\n    mavenCentral()\n}\n```\nThen add the necessary dependencies to your `build.gradle` file. \n\nTo start with creating simple neural networks or downloading pre-trained models, just add the following dependency:\n```groovy\n\u002F\u002F build.gradle\ndependencies {\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:[KOTLIN-DL-VERSION]'\n}\n```\n```kotlin\n\u002F\u002F build.gradle.kts\ndependencies {\n    implementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:[KOTLIN-DL-VERSION]\")\n}\n```\n\nUse `kotlin-deeplearning-onnx` module for inference with ONNX Runtime:\n```groovy\n\u002F\u002F build.gradle\ndependencies {\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]'\n}\n```\n```kotlin\n\u002F\u002F build.gradle.kts\ndependencies {\n  implementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]\")\n}\n```\n\nTo use the full power of KotlinDL in your project for JVM, add the following dependencies to your `build.gradle` file:\n```groovy\n\u002F\u002F build.gradle\ndependencies {\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:[KOTLIN-DL-VERSION]'\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]'\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-visualization:[KOTLIN-DL-VERSION]'\n}\n```\n```kotlin\n\u002F\u002F build.gradle.kts\ndependencies {\n  implementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:[KOTLIN-DL-VERSION]\")\n  implementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]\")\n  implementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-visualization:[KOTLIN-DL-VERSION]\")\n}\n```\n\nThe latest stable KotlinDL version is `0.5.2`, latest unstable version is `0.6.0-alpha-1`.\n\nFor more details, as well as for `pom.xml` and `build.gradle.kts` examples, please refer to\nthe [Quick Start Guide](docs\u002Fquick_start_guide.md).\n\n### Working with KotlinDL in Jupyter Notebook\n\nYou can work with KotlinDL interactively in Jupyter Notebook with the Kotlin kernel. To do so, add the required dependencies in your notebook: \n\n```kotlin\n@file:DependsOn(\"org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:[KOTLIN-DL-VERSION]\")\n```\nFor more details on installing Jupyter Notebook and adding the Kotlin kernel, check out the [Quick Start Guide](docs\u002Fquick_start_guide.md).\n\n### Working with KotlinDL in Android projects\n\nKotlinDL supports an inference of ONNX models on the Android platform.\nTo use KotlinDL in your Android project, add the following dependency to your build.gradle file:\n```groovy\n\u002F\u002F build.gradle\nimplementation 'org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]'\n```\n```kotlin\n\u002F\u002F build.gradle.kts\nimplementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]\")\n```\nFor more details, please refer to the [Quick Start Guide](docs\u002Fquick_start_guide.md#working-with-kotlin-dl-in-android-studio).\n\n## KotlinDL, ONNX Runtime, Android, and JDK versions\n\nThis table shows the mapping between KotlinDL, TensorFlow, ONNX Runtime, Compile SDK for Android and minimum supported Java versions.\n\n| KotlinDL Version | Minimum Java Version | ONNX Runtime Version | TensorFlow Version | Android: Compile SDK Version |\n|------------------|----------------------|----------------------|--------------------|------------------------------|\n| 0.1.*            | 8                    |                      | 1.15               |                              |\n| 0.2.0            | 8                    |                      | 1.15               |                              |\n| 0.3.0            | 8                    | 1.8.1                | 1.15               |                              |\n| 0.4.0            | 8                    | 1.11.0               | 1.15               |                              |\n| 0.5.0-0.5.1      | 11                   | 1.12.1               | 1.15               | 31                           |\n| 0.5.2            | 11                   | 1.14.0               | 1.15               | 31                           |\n| 0.6.*            | 11                   | 1.16.0               | 1.15               | 31                           |\n\n## Documentation\n\n* Presentations and videos:\n  * [Deep Learning with KotlinDL](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=jCFZc97_XQU) (Zinoviev Alexey at Huawei Developer Group HDG UK 2021, [slides](https:\u002F\u002Fwww.youtube.com\u002Fredirect?event=video_description&redir_token=QUFFLUhqa1RPX3h0a2FrZ2pUby1kSURzYWVpM0tHNFRrUXxBQ3Jtc0tucjZMRE1JbWNuN1BrbGFMc0FOeERPVEtMR0FDLUo4bi1lcC1BcmFkMkd0WFJOS3ZVMFQ3YlctUXFHU1lVdjVZMHUzYmlETjRCZ3lLclBpZGNWcXJXcmdVLTQ5Ujd2N0hNUHlMZXRTZE1wYktHSUZuSQ&q=https%3A%2F%2Fspeakerdeck.com%2Fzaleslaw%2Fdeep-learning-with-kotlindl))\n  * [Introduction to Deep Learning with KotlinDL](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ruUz8uMZUVw) (Zinoviev Alexey at Kotlin Budapest User Group 2021, [slides](https:\u002F\u002Fspeakerdeck.com\u002Fzaleslaw\u002Fdeep-learning-introduction-with-kotlindl))\n* [Change log for KotlinDL](CHANGELOG.md)\n* [Full KotlinDL API reference](https:\u002F\u002Fkotlin.github.io\u002Fkotlindl\u002F)\n\n## Examples and tutorials\nYou do not need prior experience with Deep Learning to use KotlinDL.\n\nWe are working on including extensive documentation to help you get started. \nAt this point, please feel free to check out the following tutorials we have prepared:\n- [Quick Start Guide](docs\u002Fquick_start_guide.md) \n- [Creating your first neural network](docs\u002Fcreate_your_first_nn.md)\n- [Importing a Keras model](docs\u002Fimporting_keras_model.md) \n- [Transfer learning](docs\u002Ftransfer_learning.md)\n- [Transfer learning with Functional API](docs\u002Ftransfer_learning_functional.md)\n- [Running inference with ONNX models on JVM](docs\u002Finference_onnx_model.md#desktop-jvm)\n- [Running inference with ONNX models on Android](docs\u002Finference_onnx_model.md#android)\n\nFor more inspiration, take a look at the [code examples](examples) in this repository and [Sample Android App](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl-app-sample).\n\n## Running KotlinDL on GPU\n\nTo enable the training and inference on a GPU, please read this [TensorFlow GPU Support page](https:\u002F\u002Fwww.tensorflow.org\u002Finstall\u002Fgpu)\nand install the CUDA framework to allow calculations on a GPU device.\n\nNote that only NVIDIA devices are supported.\n\nYou will also need to add the following dependencies in your project if you wish to leverage a GPU: \n```groovy\n\u002F\u002F build.gradle\nimplementation 'org.tensorflow:libtensorflow:1.15.0'\nimplementation 'org.tensorflow:libtensorflow_jni_gpu:1.15.0'\n```\n```kotlin\n\u002F\u002F build.gradle.kts\nimplementation (\"org.tensorflow:libtensorflow:1.15.0\")\nimplementation (\"org.tensorflow:libtensorflow_jni_gpu:1.15.0\")\n```\n\nOn Windows, the following distributions are required:\n- CUDA cuda_10.0.130_411.31_win10\n- [cudnn-7.6.3](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcompute\u002Fmachine-learning\u002Fcudnn\u002Fsecure\u002F7.6.3.30\u002FProduction\u002F10.0_20190822\u002Fcudnn-10.0-windows10-x64-v7.6.3.30.zip)\n- [C++ redistributable parts](https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fdownload\u002Fdetails.aspx?id=48145) \n\nFor inference of ONNX models on a CUDA device, you will also need to add the following dependencies to your project:\n```groovy\n\u002F\u002F build.gradle\napi 'com.microsoft.onnxruntime:onnxruntime_gpu:1.16.0'\n```\n```kotlin\n\u002F\u002F build.gradle.kts\napi(\"com.microsoft.onnxruntime:onnxruntime_gpu:1.16.0\")\n```\n\nTo find more info about ONNXRuntime and CUDA version compatibility, please refer to the [ONNXRuntime CUDA Execution Provider page](https:\u002F\u002Fonnxruntime.ai\u002Fdocs\u002Fexecution-providers\u002FCUDA-ExecutionProvider.html).\n\n## Logging\n\nBy default, the API module uses the [kotlin-logging](https:\u002F\u002Fgithub.com\u002FMicroUtils\u002Fkotlin-logging) library to organize the logging process separately from the specific logger implementation.\n\nYou could use any widely known JVM logging library with a [Simple Logging Facade for Java (SLF4J)](http:\u002F\u002Fwww.slf4j.org\u002F) implementation such as Logback or Log4j\u002FLog4j2.\n\nYou will also need to add the following dependencies and configuration file ``log4j2.xml`` to the ``src\u002Fresource`` folder in your project if you wish to use log4j2:\n\n```groovy\n\u002F\u002F build.gradle\nimplementation 'org.apache.logging.log4j:log4j-api:2.17.2'\nimplementation 'org.apache.logging.log4j:log4j-core:2.17.2'\nimplementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2'\n```\n```kotlin\n\u002F\u002F build.gradle.kts\nimplementation(\"org.apache.logging.log4j:log4j-api:2.17.2\")\nimplementation(\"org.apache.logging.log4j:log4j-core:2.17.2\")\nimplementation(\"org.apache.logging.log4j:log4j-slf4j-impl:2.17.2\")\n```\n\n```xml\n\u003CConfiguration status=\"WARN\">\n    \u003CAppenders>\n        \u003CConsole name=\"STDOUT\" target=\"SYSTEM_OUT\">\n            \u003CPatternLayout pattern=\"%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n\"\u002F>\n        \u003C\u002FConsole>\n    \u003C\u002FAppenders>\n\n    \u003CLoggers>\n        \u003CRoot level=\"debug\">\n            \u003CAppenderRef ref=\"STDOUT\" level=\"DEBUG\"\u002F>\n        \u003C\u002FRoot>\n        \u003CLogger name=\"io.jhdf\" level=\"off\" additivity=\"true\">\n            \u003Cappender-ref ref=\"STDOUT\" \u002F>\n        \u003C\u002FLogger>\n    \u003C\u002FLoggers>\n\u003C\u002FConfiguration>\n\n```\n\nIf you wish to use Logback, include the following dependency and configuration file ``logback.xml`` to ``src\u002Fresource`` folder in your project\n\n```groovy\n\u002F\u002F build.gradle\nimplementation 'ch.qos.logback:logback-classic:1.4.5'\n```\n```kotlin\n\u002F\u002F build.gradle.kts\nimplementation(\"ch.qos.logback:logback-classic:1.4.5\")\n```\n\n```xml\n\u003Cconfiguration>\n    \u003Cappender name=\"STDOUT\" class=\"ch.qos.logback.core.ConsoleAppender\">\n        \u003Cencoder>\n            \u003Cpattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n\u003C\u002Fpattern>\n        \u003C\u002Fencoder>\n    \u003C\u002Fappender>\n\n    \u003Croot level=\"info\">\n        \u003Cappender-ref ref=\"STDOUT\"\u002F>\n    \u003C\u002Froot>\n\u003C\u002Fconfiguration>\n```\nThese configuration files can be found in the `examples` module.\n\n## Fat Jar issue\n\nThere is a known Stack Overflow [question](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F47477069\u002Fissue-running-tensorflow-with-java\u002F52003343) \nand TensorFlow [issue](https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Ftensorflow\u002Fissues\u002F30488) with Fat Jar creation and execution on Amazon EC2 instances.\n\n```\njava.lang.UnsatisfiedLinkError: \u002Ftmp\u002Ftensorflow_native_libraries-1562914806051-0\u002Flibtensorflow_jni.so: libtensorflow_framework.so.1: cannot open shared object file: No such file or directory\n```\n\nDespite the fact that the [bug](https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Ftensorflow\u002Fissues\u002F30488) describing this problem was closed in the release of TensorFlow 1.14, \nit was not fully fixed and required an additional line in the build script.\n\nOne simple [solution](https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Ftensorflow\u002Fissues\u002F30635#issuecomment-615513958) is to add a TensorFlow version specification to the Jar's Manifest. \nBelow is an example of a Gradle build task for Fat Jar creation.\n\n```groovy\n\u002F\u002F build.gradle\n\ntask fatJar(type: Jar) {\n    manifest {\n        attributes 'Implementation-Version': '1.15'\n    }\n    classifier = 'all'\n    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }\n    with jar\n}\n```\n\n```kotlin\n\u002F\u002F build.gradle.kts\n\nplugins {\n    kotlin(\"jvm\") version \"1.5.31\"\n    id(\"com.github.johnrengelman.shadow\") version \"7.0.0\"\n}\n\ntasks{\n    shadowJar {\n        manifest {\n            attributes(Pair(\"Main-Class\", \"MainKt\"))\n            attributes(Pair(\"Implementation-Version\", \"1.15\"))\n        }\n    }\n}\n```\n\n## Limitations\n\nCurrently, only a limited set of deep learning architectures are supported. Here's the list of available layers:\n\n* Core layers:\n  - `Input`, `Dense`, `Flatten`, `Reshape`, `Dropout`, `BatchNorm`.\n* Convolutional layers:\n  - `Conv1D`, `Conv2D`, `Conv3D`;\n  - `Conv1DTranspose`, `Conv2DTranspose`, `Conv3DTranspose`;\n  - `DepthwiseConv2D`;\n  - `SeparableConv2D`.\n* Pooling layers:\n  - `MaxPool1D`, `MaxPool2D`, `MaxPooling3D`;\n  - `AvgPool1D`, `AvgPool2D`, `AvgPool3D`;\n  - `GlobalMaxPool1D`, `GlobalMaxPool2D`, `GlobalMaxPool3D`;\n  - `GlobalAvgPool1D`, `GlobalAvgPool2D`, `GlobalAvgPool3D`.\n* Merge layers:\n  - `Add`, `Subtract`, `Multiply`;\n  - `Average`, `Maximum`, `Minimum`;\n  - `Dot`;\n  - `Concatenate`.\n* Activation layers:\n  - `ELU`, `LeakyReLU`, `PReLU`, `ReLU`, `Softmax`, `ThresholdedReLU`;\n  - `ActivationLayer`.\n* Cropping layers:\n  - `Cropping1D`, `Cropping2D`, `Cropping3D`.\n* Upsampling layers:\n  - `UpSampling1D`, `UpSampling2D`, `UpSampling3D`.\n* Zero padding layers:\n  - `ZeroPadding1D`, `ZeroPadding2D`, `ZeroPadding3D`.\n* Other layers:\n  - `Permute`, `RepeatVector`.\n\nTensorFlow 1.15 Java API is currently used for layer implementation, but this project will be switching to TensorFlow 2.+ in the nearest future. \nThis, however, does not affect the high-level API. Inference with TensorFlow models is currently supported only on desktops. \n\n## Contributing\n\nRead the [Contributing Guidelines](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md).\n\n## Reporting issues\u002FSupport\n\nPlease use [GitHub issues](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues) for filing feature requests and bug reports. \nYou are also welcome to join the [#kotlindl channel](https:\u002F\u002Fkotlinlang.slack.com\u002Fmessages\u002Fkotlindl\u002F) in Kotlin Slack.\n\n## Code of Conduct\nThis project and the corresponding community are governed by the [JetBrains Open Source and Community Code of Conduct](https:\u002F\u002Fconfluence.jetbrains.com\u002Fdisplay\u002FALL\u002FJetBrains+Open+Source+and+Community+Code+of+Conduct). Please make sure you read it. \n\n## License\nKotlinDL is licensed under the [Apache 2.0 License](LICENSE).\n","# KotlinDL：Kotlin 高级深度学习 API [![官方 JetBrains 项目](http:\u002F\u002Fjb.gg\u002Fbadges\u002Fincubator.svg)](https:\u002F\u002Fconfluence.jetbrains.com\u002Fdisplay\u002FALL\u002FJetBrains+on+GitHub)\n\n[![Kotlin](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fkotlin-1.8.21-blue.svg?logo=kotlin)](http:\u002F\u002Fkotlinlang.org)\n[![Slack 频道](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fchat-slack-green.svg?logo=slack)](https:\u002F\u002Fkotlinlang.slack.com\u002Fmessages\u002Fkotlindl\u002F)\n\nKotlinDL 是一个用 Kotlin 编写的高级深度学习 API，其灵感来源于 [Keras](https:\u002F\u002Fkeras.io)。在底层，它使用 TensorFlow Java API 和 ONNX Runtime 的 Java API。KotlinDL 提供了简洁的 API，可用于从头开始训练深度学习模型、导入现有的 Keras 和 ONNX 模型进行推理，以及利用迁移学习将现有的预训练模型调整到您的任务中。\n\n该项目旨在让 JVM 和 Android 开发者更轻松地进行深度学习，并简化深度学习模型在生产环境中的部署。\n\n以下是在 KotlinDL 中经典卷积神经网络 LeNet 的示例：\n\n```kotlin\nprivate const val EPOCHS = 3\nprivate const val TRAINING_BATCH_SIZE = 1000\nprivate const val NUM_CHANNELS = 1L\nprivate const val IMAGE_SIZE = 28L\nprivate const val SEED = 12L\nprivate const val TEST_BATCH_SIZE = 1000\n\nprivate val lenet5Classic = Sequential.of(\n    Input(\n        IMAGE_SIZE,\n        IMAGE_SIZE,\n        NUM_CHANNELS\n    ),\n    Conv2D(\n        filters = 6,\n        kernelSize = intArrayOf(5, 5),\n        strides = intArrayOf(1, 1, 1, 1),\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Zeros(),\n        padding = ConvPadding.SAME\n    ),\n    AvgPool2D(\n        poolSize = intArrayOf(1, 2, 2, 1),\n        strides = intArrayOf(1, 2, 2, 1),\n        padding = ConvPadding.VALID\n    ),\n    Conv2D(\n        filters = 16,\n        kernelSize = intArrayOf(5, 5),\n        strides = intArrayOf(1, 1, 1, 1),\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Zeros(),\n        padding = ConvPadding.SAME\n    ),\n    AvgPool2D(\n        poolSize = intArrayOf(1, 2, 2, 1),\n        strides = intArrayOf(1, 2, 2, 1),\n        padding = ConvPadding.VALID\n    ),\n    Flatten(), \u002F\u002F 3136\n    Dense(\n        outputSize = 120,\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Constant(0.1f)\n    ),\n    Dense(\n        outputSize = 84,\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Constant(0.1f)\n    ),\n    Dense(\n        outputSize = 10,\n        activation = Activations.Linear,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Constant(0.1f)\n    )\n)\n\n\nfun main() {\n    val (train, test) = mnist()\n    \n    lenet5Classic.use {\n        it.compile(\n            optimizer = Adam(clipGradient = ClipGradientByValue(0.1f)),\n            loss = Losses.SOFT_MAX_CROSS_ENTROPY_WITH_LOGITS,\n            metric = Metrics.ACCURACY\n        )\n    \n        it.logSummary()\n    \n        it.fit(dataset = train, epochs = EPOCHS, batchSize = TRAINING_BATCH_SIZE)\n    \n        val accuracy = it.evaluate(dataset = test, batchSize = TEST_BATCH_SIZE).metrics[Metrics.ACCURACY]\n    \n        println(\"Accuracy: $accuracy\")\n    }\n}\n```\n\n## 目录\n\n- [库结构](#library-structure)\n- [如何在您的项目中配置 KotlinDL](#how-to-configure-kotlindl-in-your-project)\n  - [在 Android 项目中使用 KotlinDL](#working-with-kotlindl-in-android-projects)\n  - [在 Jupyter Notebook 中使用 KotlinDL](#working-with-kotlindl-in-jupyter-notebook)\n- [KotlinDL、ONNX Runtime、Android 和 JDK 版本](#kotlindl-onnx-runtime-android-and-jdk-versions)\n- [文档](#documentation)\n- [示例和教程](#examples-and-tutorials)\n- [在 GPU 上运行 KotlinDL](#running-kotlindl-on-gpu)\n- [日志记录](#logging)\n- [Fat Jar 问题](#fat-jar-issue)\n- [限制](#limitations)\n- [贡献](#contributing)\n- [报告问题\u002F支持](#reporting-issuessupport)\n- [行为准则](#code-of-conduct)\n- [许可证](#license)\n\n## 库结构\n\nKotlinDL 由多个模块组成：\n* `kotlin-deeplearning-api` API 接口和类\n* `kotlin-deeplearning-impl` 实现类和工具\n* `kotlin-deeplearning-onnx` 使用 ONNX Runtime 进行推理\n* `kotlin-deeplearning-tensorflow` 使用 TensorFlow 进行学习和推理\n* `kotlin-deeplearning-visualization` 可视化工具\n* `kotlin-deeplearning-dataset` 数据集类\n\n其中，`kotlin-deeplearning-tensorflow` 和 `kotlin-deeplearning-dataset` 模块仅适用于桌面 JVM，而其他工件也可以在 Android 上使用。\n\n## 如何在您的项目中配置 KotlinDL\n\n要在您的项目中使用 KotlinDL，请确保已将 `mavenCentral` 添加到仓库列表中：\n```groovy\nrepositories {\n    mavenCentral()\n}\n```\n然后将必要的依赖项添加到您的 `build.gradle` 文件中。\n\n要开始创建简单的神经网络或下载预训练模型，只需添加以下依赖项：\n```groovy\n\u002F\u002F build.gradle\ndependencies {\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:[KOTLIN-DL-VERSION]'\n}\n```\n```kotlin\n\u002F\u002F build.gradle.kts\ndependencies {\n    implementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:[KOTLIN-DL-VERSION]\")\n}\n```\n\n要使用 ONNX Runtime 进行推理，请使用 `kotlin-deeplearning-onnx` 模块：\n```groovy\n\u002F\u002F build.gradle\ndependencies {\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]'\n}\n```\n```kotlin\n\u002F\u002F build.gradle.kts\ndependencies {\n  implementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]\")\n}\n```\n\n要在您的项目中充分利用 KotlinDL 的功能，请将以下依赖项添加到您的 `build.gradle` 文件中：\n```groovy\n\u002F\u002F build.gradle\ndependencies {\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:[KOTLIN-DL-VERSION]'\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]'\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-visualization:[KOTLIN-DL-VERSION]'\n}\n```\n```kotlin\n\u002F\u002F build.gradle.kts\ndependencies {\n  implementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:[KOTLIN-DL-VERSION]\")\n  implementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]\")\n  implementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-visualization:[KOTLIN-DL-VERSION]\")\n}\n```\n\n最新的稳定版 KotlinDL 是 `0.5.2`，最新的不稳定版是 `0.6.0-alpha-1`。\n\n有关更多详细信息以及 `pom.xml` 和 `build.gradle.kts` 示例，请参阅\n[快速入门指南](docs\u002Fquick_start_guide.md)。\n\n### 在 Jupyter Notebook 中使用 KotlinDL\n\n您可以在 Jupyter Notebook 中通过 Kotlin 内核以交互方式使用 KotlinDL。为此，请在笔记本中添加所需的依赖项：\n\n```kotlin\n@file:DependsOn(\"org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:[KOTLIN-DL-VERSION]\")\n```\n\n有关安装 Jupyter Notebook 和添加 Kotlin 内核的更多详细信息，请参阅 [快速入门指南](docs\u002Fquick_start_guide.md)。\n\n### 在 Android 项目中使用 KotlinDL\n\nKotlinDL 支持在 Android 平台上对 ONNX 模型进行推理。要在您的 Android 项目中使用 KotlinDL，请将以下依赖项添加到 `build.gradle` 文件中：\n\n```groovy\n\u002F\u002F build.gradle\nimplementation 'org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]'\n```\n\n```kotlin\n\u002F\u002F build.gradle.kts\nimplementation (\"org.jetbrains.kotlinx:kotlin-deeplearning-onnx:[KOTLIN-DL-VERSION]\")\n```\n\n有关更多详细信息，请参阅 [快速入门指南](docs\u002Fquick_start_guide.md#working-with-kotlin-dl-in-android-studio)。\n\n## KotlinDL、ONNX Runtime、Android 和 JDK 版本对应关系\n\n下表展示了 KotlinDL、TensorFlow、ONNX Runtime、Android 编译 SDK 以及最低支持的 Java 版本之间的对应关系。\n\n| KotlinDL 版本 | 最低 Java 版本 | ONNX Runtime 版本 | TensorFlow 版本 | Android：编译 SDK 版本 |\n|---------------|----------------|-------------------|-----------------|--------------------------|\n| 0.1.*         | 8              |                   | 1.15            |                          |\n| 0.2.0         | 8              |                   | 1.15            |                          |\n| 0.3.0         | 8              | 1.8.1             | 1.15            |                          |\n| 0.4.0         | 8              | 1.11.0            | 1.15            |                          |\n| 0.5.0–0.5.1   | 11             | 1.12.1            | 1.15            | 31                       |\n| 0.5.2         | 11             | 1.14.0            | 1.15            | 31                       |\n| 0.6.*         | 11             | 1.16.0            | 1.15            | 31                       |\n\n## 文档\n\n* 演示文稿和视频：\n  * [使用 KotlinDL 进行深度学习](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=jCFZc97_XQU)（Zinoviev Alexey 在华为开发者社区 HDG UK 2021 上的演讲，[幻灯片](https:\u002F\u002Fwww.youtube.com\u002Fredirect?event=video_description&redir_token=QUFFLUhqa1RPX3h0a2FrZ2pUby1kSURzYWVpM0tHNFRrUXxBQ3Jtc0tucjZMRE1JbWNuN1BrbGFMc0FOeERPVEtMR0FDLUo4bi1lcC1BcmFkMkd0WFJOS3ZVMFQ3YlctUXFHU1lVdjVZMHUzYmlETjBCZ3lLclBpZGNWcXJXcmdVLTQ5Ujd2N0hNUHlMZXRTZE1wYktHSUZuSQ&q=https%3A%2F%2Fspeakerdeck.com%2Fzaleslaw%2Fdeep-learning-with-kotlindl))\n  * [KotlinDL 深度学习简介](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ruUz8uMZUVw)（Zinoviev Alexey 在 Kotlin 布达佩斯用户组 2021 上的演讲，[幻灯片](https:\u002F\u002Fspeakerdeck.com\u002Fzaleslaw\u002Fdeep-learning-introduction-with-kotlindl)）\n* [KotlinDL 变更日志](CHANGELOG.md)\n* [完整的 KotlinDL API 参考文档](https:\u002F\u002Fkotlin.github.io\u002Fkotlindl\u002F)\n\n## 示例与教程\n\n使用 KotlinDL 不需要具备深度学习的先验经验。\n\n我们正在努力编写详尽的文档来帮助您快速上手。目前，您可以参考我们准备的以下教程：\n- [快速入门指南](docs\u002Fquick_start_guide.md)\n- [创建您的第一个神经网络](docs\u002Fcreate_your_first_nn.md)\n- [导入 Keras 模型](docs\u002Fimporting_keras_model.md)\n- [迁移学习](docs\u002Ftransfer_learning.md)\n- [使用函数式 API 进行迁移学习](docs\u002Ftransfer_learning_functional.md)\n- [在 JVM 上使用 ONNX 模型进行推理](docs\u002Finference_onnx_model.md#desktop-jvm)\n- [在 Android 上使用 ONNX 模型进行推理](docs\u002Finference_onnx_model.md#android)\n\n如需更多灵感，请查看此仓库中的 [代码示例](examples) 以及 [示例 Android 应用](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl-app-sample)。\n\n## 在 GPU 上运行 KotlinDL\n\n要启用 GPU 上的训练和推理，请阅读 [TensorFlow GPU 支持页面](https:\u002F\u002Fwww.tensorflow.org\u002Finstall\u002Fgpu)，并安装 CUDA 框架以支持 GPU 设备上的计算。\n\n请注意，仅支持 NVIDIA 显卡。\n\n如果您希望利用 GPU，还需要在项目中添加以下依赖项：\n\n```groovy\n\u002F\u002F build.gradle\nimplementation 'org.tensorflow:libtensorflow:1.15.0'\nimplementation 'org.tensorflow:libtensorflow_jni_gpu:1.15.0'\n```\n\n```kotlin\n\u002F\u002F build.gradle.kts\nimplementation (\"org.tensorflow:libtensorflow:1.15.0\")\nimplementation (\"org.tensorflow:libtensorflow_jni_gpu:1.15.0\")\n```\n\n在 Windows 系统上，还需要安装以下组件：\n- CUDA cuda_10.0.130_411.31_win10\n- [cuDNN 7.6.3](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcompute\u002Fmachine-learning\u002Fcudnn\u002Fsecure\u002F7.6.3.30\u002FProduction\u002F10.0_20190822\u002Fcudnn-10.0-windows10-x64-v7.6.3.30.zip)\n- [C++ Redistributable](https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fdownload\u002Fdetails.aspx?id=48145)\n\n对于在 CUDA 设备上对 ONNX 模型进行推理，您还需要在项目中添加以下依赖项：\n\n```groovy\n\u002F\u002F build.gradle\napi 'com.microsoft.onnxruntime:onnxruntime_gpu:1.16.0'\n```\n\n```kotlin\n\u002F\u002F build.gradle.kts\napi(\"com.microsoft.onnxruntime:onnxruntime_gpu:1.16.0\")\n```\n\n有关 ONNXRuntime 和 CUDA 版本兼容性的更多信息，请参阅 [ONNXRuntime CUDA 执行提供程序页面](https:\u002F\u002Fonnxruntime.ai\u002Fdocs\u002Fexecution-providers\u002FCUDA-ExecutionProvider.html)。\n\n## 日志记录\n\n默认情况下，API 模块使用 [kotlin-logging](https:\u002F\u002Fgithub.com\u002FMicroUtils\u002Fkotlin-logging) 库来将日志记录流程与具体的日志记录器实现分离。\n\n你可以使用任何具有 [Simple Logging Facade for Java (SLF4J)](http:\u002F\u002Fwww.slf4j.org\u002F) 实现的广泛使用的 JVM 日志库，例如 Logback 或 Log4j\u002FLog4j2。\n\n如果你希望使用 Log4j2，还需要在项目的 `src\u002Fresource` 文件夹中添加以下依赖项和配置文件 `log4j2.xml`：\n\n```groovy\n\u002F\u002F build.gradle\nimplementation 'org.apache.logging.log4j:log4j-api:2.17.2'\nimplementation 'org.apache.logging.log4j:log4j-core:2.17.2'\nimplementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2'\n```\n```kotlin\n\u002F\u002F build.gradle.kts\nimplementation(\"org.apache.logging.log4j:log4j-api:2.17.2\")\nimplementation(\"org.apache.logging.log4j:log4j-core:2.17.2\")\nimplementation(\"org.apache.logging.log4j:log4j-slf4j-impl:2.17.2\")\n```\n\n```xml\n\u003CConfiguration status=\"WARN\">\n    \u003CAppenders>\n        \u003CConsole name=\"STDOUT\" target=\"SYSTEM_OUT\">\n            \u003CPatternLayout pattern=\"%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n\"\u002F>\n        \u003C\u002FConsole>\n    \u003C\u002FAppenders>\n\n    \u003CLoggers>\n        \u003CRoot level=\"debug\">\n            \u003CAppenderRef ref=\"STDOUT\" level=\"DEBUG\"\u002F>\n        \u003C\u002FRoot>\n        \u003CLogger name=\"io.jhdf\" level=\"off\" additivity=\"true\">\n            \u003Cappender-ref ref=\"STDOUT\" \u002F>\n        \u003C\u002FLogger>\n    \u003C\u002FLoggers>\n\u003C\u002FConfiguration>\n\n```\n\n如果你想使用 Logback，则需要在项目的 `src\u002Fresource` 文件夹中包含以下依赖项和配置文件 `logback.xml`：\n\n```groovy\n\u002F\u002F build.gradle\nimplementation 'ch.qos.logback:logback-classic:1.4.5'\n```\n```kotlin\n\u002F\u002F build.gradle.kts\nimplementation(\"ch.qos.logback:logback-classic:1.4.5\")\n```\n\n```xml\n\u003Cconfiguration>\n    \u003Cappender name=\"STDOUT\" class=\"ch.qos.logback.core.ConsoleAppender\">\n        \u003Cencoder>\n            \u003Cpattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n\u003C\u002Fpattern>\n        \u003C\u002Fencoder>\n    \u003C\u002Fappender>\n\n    \u003Croot level=\"info\">\n        \u003Cappender-ref ref=\"STDOUT\"\u002F>\n    \u003C\u002Froot>\n\u003C\u002Fconfiguration>\n```\n\n这些配置文件可以在 `examples` 模块中找到。\n\n## Fat Jar 问题\n\nStack Overflow 上有一个已知的问题 [question](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F47477069\u002Fissue-running-tensorflow-with-java\u002F52003343) 和 TensorFlow 的一个 [issue](https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Ftensorflow\u002Fissues\u002F30488)，涉及在 Amazon EC2 实例上创建和运行 Fat Jar 时出现的问题。\n\n```\njava.lang.UnsatisfiedLinkError: \u002Ftmp\u002Ftensorflow_native_libraries-1562914806051-0\u002Flibtensorflow_jni.so: libtensorflow_framework.so.1: cannot open shared object file: No such file or directory\n```\n\n尽管描述此问题的 [bug](https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Ftensorflow\u002Fissues\u002F30488) 在 TensorFlow 1.14 版本中已被关闭，但该问题并未完全修复，仍需在构建脚本中添加一行代码。\n\n一个简单的 [solution](https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Ftensorflow\u002Fissues\u002F30635#issuecomment-615513958) 是在 Jar 的 Manifest 中添加 TensorFlow 版本信息。以下是用于创建 Fat Jar 的 Gradle 构建任务示例。\n\n```groovy\n\u002F\u002F build.gradle\n\ntask fatJar(type: Jar) {\n    manifest {\n        attributes 'Implementation-Version': '1.15'\n    }\n    classifier = 'all'\n    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }\n    with jar\n}\n```\n\n```kotlin\n\u002F\u002F build.gradle.kts\n\nplugins {\n    kotlin(\"jvm\") version \"1.5.31\"\n    id(\"com.github.johnrengelman.shadow\") version \"7.0.0\"\n}\n\ntasks{\n    shadowJar {\n        manifest {\n            attributes(Pair(\"Main-Class\", \"MainKt\"))\n            attributes(Pair(\"Implementation-Version\", \"1.15\"))\n        }\n    }\n}\n```\n\n## 限制\n\n目前仅支持有限的一组深度学习架构。以下是可用层的列表：\n\n* 核心层：\n  - `Input`、`Dense`、`Flatten`、`Reshape`、`Dropout`、`BatchNorm`。\n* 卷积层：\n  - `Conv1D`、`Conv2D`、`Conv3D`；\n  - `Conv1DTranspose`、`Conv2DTranspose`、`Conv3DTranspose`；\n  - `DepthwiseConv2D`；\n  - `SeparableConv2D`。\n* 池化层：\n  - `MaxPool1D`、`MaxPool2D`、`MaxPooling3D`；\n  - `AvgPool1D`、`AvgPool2D`、`AvgPool3D`；\n  - `GlobalMaxPool1D`、`GlobalMaxPool2D`、`GlobalMaxPool3D`；\n  - `GlobalAvgPool1D`、`GlobalAvgPool2D`、`GlobalAvgPool3D`。\n* 合并层：\n  - `Add`、`Subtract`、`Multiply`；\n  - `Average`、`Maximum`、`Minimum`；\n  - `Dot`；\n  - `Concatenate`。\n* 激活层：\n  - `ELU`、`LeakyReLU`、`PReLU`、`ReLU`、`Softmax`、`ThresholdedReLU`；\n  - `ActivationLayer`。\n* 裁剪层：\n  - `Cropping1D`、`Cropping2D`、`Cropping3D`。\n* 上采样层：\n  - `UpSampling1D`、`UpSampling2D`、`UpSampling3D`。\n* 零填充层：\n  - `ZeroPadding1D`、`ZeroPadding2D`、`ZeroPadding3D`。\n* 其他层：\n  - `Permute`、`RepeatVector`。\n\n目前，层的实现使用的是 TensorFlow 1.15 Java API，但该项目将在不久的将来切换到 TensorFlow 2.x 及以上版本。不过，这并不影响高层 API。目前，TensorFlow 模型的推理仅支持在桌面端运行。\n\n## 贡献\n\n请阅读 [贡献指南](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md)。\n\n## 报告问题\u002F支持\n\n请使用 [GitHub issues](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues) 提交功能请求和错误报告。你也可以加入 Kotlin Slack 中的 [#kotlindl 频道](https:\u002F\u002Fkotlinlang.slack.com\u002Fmessages\u002Fkotlindl\u002F)。\n\n## 行为准则\n本项目及其相关社区受 [JetBrains 开源与社区行为准则](https:\u002F\u002Fconfluence.jetbrains.com\u002Fdisplay\u002FALL\u002FJetBrains+Open+Source+and+Community+Code+of+Conduct) 约束，请务必阅读。\n\n## 许可证\nKotlinDL 采用 [Apache 2.0 许可证](LICENSE) 许可。","# KotlinDL 快速上手指南\n\nKotlinDL 是一个用 Kotlin 编写的高级深度学习 API，灵感来源于 Keras。它底层基于 TensorFlow Java API 和 ONNX Runtime，旨在让 JVM 和 Android 开发者能够轻松地从零训练模型、导入现有模型进行推理或使用迁移学习。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **JDK 版本**：推荐使用 **JDK 11** 或更高版本（KotlinDL 0.5.0+ 要求最低 JDK 11）。\n*   **构建工具**：Gradle (推荐) 或 Maven。\n*   **操作系统**：Windows, macOS, Linux (桌面端); Android (仅支持 ONNX 推理)。\n*   **GPU 支持 (可选)**：如需使用 GPU 加速训练，需安装 NVIDIA CUDA 框架 (仅支持 NVIDIA 显卡)。\n    *   Windows 用户需额外安装：CUDA 10.0+, cuDNN 7.6.3+, Visual C++ Redistributable。\n\n## 安装步骤\n\n### 1. 配置仓库\n确保在 `build.gradle` 或 `build.gradle.kts` 中添加 `mavenCentral()` 仓库。国内开发者若遇到下载慢的问题，可配置阿里云镜像：\n\n```groovy\nrepositories {\n    \u002F\u002F 阿里云镜像 (推荐国内开发者使用)\n    maven { url 'https:\u002F\u002Fmaven.aliyun.com\u002Frepository\u002Fcentral' }\n    mavenCentral()\n}\n```\n\n### 2. 添加依赖\n根据您的使用场景，在 `dependencies` 块中添加相应的依赖。请将 `[KOTLIN-DL-VERSION]` 替换为最新版本（当前稳定版为 `0.5.2`）。\n\n#### 场景 A：从零构建神经网络 (基于 TensorFlow)\n适用于桌面端 JVM 项目，用于训练和推理。\n\n```groovy\n\u002F\u002F build.gradle\ndependencies {\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:0.5.2'\n}\n```\n\n```kotlin\n\u002F\u002F build.gradle.kts\ndependencies {\n    implementation(\"org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:0.5.2\")\n}\n```\n\n#### 场景 B：ONNX 模型推理 (支持 Android)\n适用于加载现有的 Keras\u002FONNX 模型进行推理，支持桌面端和 Android。\n\n```groovy\n\u002F\u002F build.gradle\ndependencies {\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-onnx:0.5.2'\n}\n```\n\n#### 场景 C：完整功能 (桌面端)\n包含 TensorFlow 训练、ONNX 推理及可视化工具。\n\n```groovy\n\u002F\u002F build.gradle\ndependencies {\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:0.5.2'\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-onnx:0.5.2'\n    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-visualization:0.5.2'\n}\n```\n\n> **注意**：`kotlin-deeplearning-tensorflow` 模块仅支持桌面端 JVM，不可用于 Android。\n\n## 基本使用\n\n以下示例展示了如何使用 KotlinDL 构建经典的 LeNet-5 卷积神经网络，并在 MNIST 数据集上进行训练和评估。\n\n```kotlin\nimport org.jetbrains.kotlinx.dl.api.core.*\nimport org.jetbrains.kotlinx.dl.api.core.initializer.*\nimport org.jetbrains.kotlinx.dl.api.core.layer.*\nimport org.jetbrains.kotlinx.dl.api.core.loss.Losses\nimport org.jetbrains.kotlinx.dl.api.core.metric.Metrics\nimport org.jetbrains.kotlinx.dl.api.core.optimizer.Adam\nimport org.jetbrains.kotlinx.dl.api.core.optimizer.ClipGradientByValue\nimport org.jetbrains.kotlinx.dl.dataset.mnist\n\nprivate const val EPOCHS = 3\nprivate const val TRAINING_BATCH_SIZE = 1000\nprivate const val NUM_CHANNELS = 1L\nprivate const val IMAGE_SIZE = 28L\nprivate const val SEED = 12L\nprivate const val TEST_BATCH_SIZE = 1000\n\n\u002F\u002F 定义模型结构\nprivate val lenet5Classic = Sequential.of(\n    Input(IMAGE_SIZE, IMAGE_SIZE, NUM_CHANNELS),\n    Conv2D(\n        filters = 6,\n        kernelSize = intArrayOf(5, 5),\n        strides = intArrayOf(1, 1, 1, 1),\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Zeros(),\n        padding = ConvPadding.SAME\n    ),\n    AvgPool2D(\n        poolSize = intArrayOf(1, 2, 2, 1),\n        strides = intArrayOf(1, 2, 2, 1),\n        padding = ConvPadding.VALID\n    ),\n    Conv2D(\n        filters = 16,\n        kernelSize = intArrayOf(5, 5),\n        strides = intArrayOf(1, 1, 1, 1),\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Zeros(),\n        padding = ConvPadding.SAME\n    ),\n    AvgPool2D(\n        poolSize = intArrayOf(1, 2, 2, 1),\n        strides = intArrayOf(1, 2, 2, 1),\n        padding = ConvPadding.VALID\n    ),\n    Flatten(),\n    Dense(\n        outputSize = 120,\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Constant(0.1f)\n    ),\n    Dense(\n        outputSize = 84,\n        activation = Activations.Tanh,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Constant(0.1f)\n    ),\n    Dense(\n        outputSize = 10,\n        activation = Activations.Linear,\n        kernelInitializer = GlorotNormal(SEED),\n        biasInitializer = Constant(0.1f)\n    )\n)\n\nfun main() {\n    \u002F\u002F 加载 MNIST 数据集\n    val (train, test) = mnist()\n    \n    lenet5Classic.use {\n        \u002F\u002F 编译模型：设置优化器、损失函数和评估指标\n        it.compile(\n            optimizer = Adam(clipGradient = ClipGradientByValue(0.1f)),\n            loss = Losses.SOFT_MAX_CROSS_ENTROPY_WITH_LOGITS,\n            metric = Metrics.ACCURACY\n        )\n    \n        it.logSummary() \u002F\u002F 打印模型摘要\n    \n        \u002F\u002F 训练模型\n        it.fit(dataset = train, epochs = EPOCHS, batchSize = TRAINING_BATCH_SIZE)\n    \n        \u002F\u002F 评估模型\n        val accuracy = it.evaluate(dataset = test, batchSize = TEST_BATCH_SIZE).metrics[Metrics.ACCURACY]\n    \n        println(\"Accuracy: $accuracy\")\n    }\n}\n```\n\n### Jupyter Notebook 用户\n如果您使用带有 Kotlin Kernel 的 Jupyter Notebook，可以直接在单元格中使用 `@file:DependsOn` 注解加载库：\n\n```kotlin\n@file:DependsOn(\"org.jetbrains.kotlinx:kotlin-deeplearning-tensorflow:0.5.2\")\n\u002F\u002F 接下来即可运行上述模型代码\n```","某安卓开发团队需要在移动端集成一个手写数字识别功能，但团队成员主要熟悉 Kotlin 语言，缺乏 Python 深度学习背景。\n\n### 没有 kotlindl 时\n- **语言割裂严重**：必须使用 Python 训练模型再转换为 TensorFlow Lite，导致 JVM 开发者需跨语言协作，沟通成本极高。\n- **环境配置繁琐**：需在服务器搭建复杂的 Python 依赖环境（如 CUDA、特定版 TensorFlow），维护难度大且容易出错。\n- **调试困难**：无法在 Android Studio 中直接断点调试模型构建过程，出现维度错误或参数问题时难以定位根源。\n- **部署流程冗长**：从模型训练到嵌入安卓应用需经过多次格式转换和中间件处理，迭代周期长达数天。\n\n### 使用 kotlindl 后\n- **纯 Kotlin 开发**：直接使用 Kotlin 代码定义如 LeNet 般的卷积神经网络，无需切换语言，团队可独立闭环完成开发。\n- **原生集成体验**：依托 TensorFlow Java API 和 ONNX Runtime，直接在现有 Gradle 项目中引入依赖，免去外部环境配置。\n- **IDE 友好调试**：利用 IntelliJ IDEA 或 Android Studio 的类型检查和断点功能，实时验证模型结构与数据流向。\n- **高效端侧部署**：支持直接在 JVM\u002FAndroid 环境中训练或加载预训练模型，将“训练 - 验证 - 部署”流程缩短至几小时内。\n\nkotlindl 让 JVM 和安卓开发者能用熟悉的语言无缝构建与部署深度学习模型，彻底打破了算法工程化的语言壁垒。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKotlin_kotlindl_2976eafe.png","Kotlin","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FKotlin_d338c525.png","Kotlin Tools and Libraries",null,"kotlin","https:\u002F\u002Fkotlinlang.org","https:\u002F\u002Fgithub.com\u002FKotlin",[23,26],{"name":15,"color":24,"percentage":25},"#A97BFF",96.9,{"name":27,"color":28,"percentage":29},"Jupyter Notebook","#DA5B0B",3.1,1570,112,"2026-04-10T10:38:49","Apache-2.0",2,"Windows, Linux, macOS","非必需。若需启用 GPU 训练\u002F推理，必须使用 NVIDIA 显卡。文中明确提及 Windows 下需 CUDA 10.0 和 cuDNN 7.6.3（对应 TensorFlow 1.15），ONNX Runtime GPU 支持需额外配置。显存大小未说明。","未说明",{"notes":39,"python":40,"dependencies":41},"1. 该工具是基于 Kotlin 的深度学习 API，运行在 JVM 或 Android 上，不需要 Python 环境。\n2. 不同版本的 KotlinDL 对 JDK 版本要求不同：0.1.x-0.4.x 需要 JDK 8，0.5.0 及以上需要 JDK 11。\n3. Android 项目仅支持使用 ONNX 模块进行模型推理，不支持训练。\n4. 若在 Windows 上使用 GPU，需手动安装 CUDA 10.0、cuDNN 7.6.3 以及 C++ 运行库。\n5. 最新稳定版为 0.5.2，需通过 Maven Central 获取依赖。","不需要 (基于 JVM\u002FKotlin)",[42,43,44,45,46,47],"Kotlin >= 1.8.21","JDK >= 11 (版本 0.5.0+)","TensorFlow Java API 1.15","ONNX Runtime API (版本随 KotlinDL 版本变化，如 1.14.0-1.16.0)","libtensorflow:1.15.0 (GPU 模式必需)","libtensorflow_jni_gpu:1.15.0 (GPU 模式必需)",[49],"开发框架",[51,52,53,19],"gpu","tensorflow","deeplearning","ready","2026-03-27T02:49:30.150509","2026-04-16T10:48:52.687630",[58,63,68,73,78,83],{"id":59,"question_zh":60,"answer_zh":61,"source_url":62},35794,"在 Gradle 项目中添加 KotlinDL 依赖时出现 \"Could not resolve org.jetbrains.kotlinx:kotlin-deeplearning-api\" 错误，如何解决？","该问题通常是由于 JDK 版本不兼容导致的。KotlinDL 需要 JDK 11 或更高版本。\n解决方案：\n1. 将项目 SDK 更改为 JDK 11（在 IntelliJ 中：File -> Project Structure -> Project -> Project SDK）。\n2. 修改 build.gradle 文件中的 JVM 目标版本以匹配：\n   compileKotlin {\n       kotlinOptions.jvmTarget = \"11\"\n   }\n   compileTestKotlin {\n       kotlinOptions.jvmTarget = \"11\"\n   }\n注意：目前不支持 JDK 8。","https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F284",{"id":64,"question_zh":65,"answer_zh":66,"source_url":67},35795,"训练 LeNetMnistWithCustomCallbacks 示例时 Loss 值返回 NaN 且准确率极低，怎么办？","这是一个已修复的问题。请确保将项目中的 KotlinDL 版本更新到 0.0.10 或更高版本。\n维护者确认：在 0.0.10 版本中，LeNetMnistWithCustomCallbacks 和 VGGMnist 示例可以正常运行且不再抛出异常，Loss 函数也能返回正确的数值。","https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F8",{"id":69,"question_zh":70,"answer_zh":71,"source_url":72},35796,"如何在 Jupyter Notebook 中正确查看模型的 summary（摘要）信息？","早期版本中，模型摘要仅打印到 stdio，导致在 Jupyter Notebook 中不可见。该问题已在 0.3.0-alpha-4 版本及之后的 PR #216 中修复。\n现在的 `TrainableModel::summary` API 返回一个 `ModelSummary` 数据类对象，而不是原始的字符串列表。该类实现了友好的 `toString()` 方法，可以直接打印或在 Notebook 中显示格式化的模型摘要信息。请升级库版本以使用此功能。","https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F135",{"id":74,"question_zh":75,"answer_zh":76,"source_url":77},35797,"如何为开源项目贡献代码？是否有代码风格指南？","项目正在完善贡献指南，但目前可以通过以下方式遵守代码风格：\n1. 项目根目录下的 `gradle.properties` 文件中已设置 `kotlin.code.style=official`。\n2. 在 IntelliJ IDEA 中，对修改的文件按下 `Ctrl+Alt+L` (Windows\u002FLinux) 或 `Cmd+Option+L` (Mac) 进行格式化。\n3. 手动删除多余的空行（保留单空行即可）。\n提交 Pull Request 前，建议在描述中使用特定关键词（如 \"Fixes #issue_number\"）来关联对应的 Issue。","https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F78",{"id":79,"question_zh":80,"answer_zh":81,"source_url":82},35798,"cat-vs-dogs 数据集下载路径错误导致加载失败，如何处理？","这是一个已知的路径配置错误，临时数据被错误地加载到了 `datasets\u002Fcatdogs\u002Fdata.zip` 而不是 `datasets\u002Fdogs-vs-cats\u002Fdata.zip`。\n该问题已被标记为 bug 并处于修复流程中。如果您遇到此问题，建议检查本地缓存目录，或者等待维护者合并修复补丁（涉及重构 `embeddedDatasets.kt` 中的路径常量）。对于新用户，可以参考社区提供的 PR 链接了解修复进度。","https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F161",{"id":84,"question_zh":85,"answer_zh":86,"source_url":87},35799,"模型的 summary 方法是否支持显示模型名称？","是的，后续版本已增加了对模型名称的支持。早期的 summary 方法（针对 Sequential 和 Functional 模型）不显示模型名称。\n维护者建议逐步改进：先确保基础功能正常，再集成模型名称显示。目前的实现已经能够正确处理模型名称案例，并在 Functional 和 Sequential 模型中均得到支持。如果您的版本未显示名称，请尝试升级到最新版本。","https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F120",[89,94,99,104,109,114,119,124,129,134],{"id":90,"version":91,"summary_zh":92,"released_at":93},280997,"v0.5.2","升级 ONNX 版本使我们能够在 M1\u002FM2 Mac 机器上运行 ONNX 模型。\n\n## 变更内容\n* @zaleslaw 在 https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F551 中将 ONNX Runtime 版本从 0.12 升级到 0.14。\n* @zaleslaw 在 https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F547 中将 Kotlin 版本从 1.7.20 升级到 1.8.21。\n* @juliabeliaeva 在 https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F533 中将 DataBatch 构造函数设为 public，以便实现自定义数据集。\n* @juliabeliaeva 在 https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F534 中在保存模型时创建所有必要的父目录。\n* @juliabeliaeva 在 https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F542 中修复了图像形状中的维度顺序。\n* @juliabeliaeva 在 https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F554 中修复了转置形状测试。\n* @zaleslaw 在 https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F552 中将修复 #531 的代码移植到 0.5.2 错误修复版本。\n* @zaleslaw 在 https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F553 中将属性设为 public (#538)。\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fcompare\u002Fv0.5.1...v0.5.2","2023-05-22T12:56:43",{"id":95,"version":96,"summary_zh":97,"released_at":98},280998,"v0.6.0-alpha-1","API 变更：\n* 修改了 `InferenceModel` 接口：\n  * 添加了表示推理结果的类型参数。[#515](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F515)\n  * 将分类函数替换为适用于单个和多个输入的通用预测方法。\n    为分类任务新增了扩展函数 `org.jetbrains.kotlinx.dl.impl.inference.imagerecognition.PredictionKt.predictLabel` 和\n    `org.jetbrains.kotlinx.dl.impl.inference.imagerecognition.PredictionKt.predictProbabilities`。[#515](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F515)\n  * 引入了 `InferenceModel#resultConverter`，用于处理推理结果。[#515](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F515)\n  * 移除了 `reshape` 方法，转而使用接收包含输入形状信息的 `FloatData` 作为输入的预测方法。[#513](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F513)\n  * 从 `copy` 函数中移除了参数。[#503](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F503)\n* 将 `SavedModel#predict` 替换为 `org.jetbrains.kotlinx.dl.dataset.InferenceModelExtensionsKt.predict` 扩展函数。[#515](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F515)\n* 向 `org.jetbrains.kotlinx.dl.dataset.InferenceModelExtensionsKt.predict` 和\n  `org.jetbrains.kotlinx.dl.dataset.InferenceModelExtensionsKt.evaluate` 扩展函数添加了 `predictionFunction` 参数。[#515](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F515)\n* 在数据集类中增加了形状信息。[#513](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F513)\n  * 将 `Dataset.getX` 函数的返回类型改为 `FloatData`。\n  * 向 `DataBatch` 和 `OnHeapDataset` 构造函数中添加了 `TensorShape` 参数。\n  * 移除了 `OnHeapDataset.Companion#createTrainAndTestDatasets`、\n  `OnHeapDataset.Companion#create(String, String, int, Function1\u003CString,float[][]>, Function2\u003CString,Integer,float[]>)`、\n  `OnHeapDataset.Companion#create(Function0\u003Cfloat[][]>, Function0\u003Cfloat[]>)` 等函数。\n* 去掉了顶部层的模型被拆分到独立的模型类型 `TFModels.CVnoTop` 和 `ONNXModels.CVnoTop` 中。[#511](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F511)\n* 修改了高层模型类，使其不再实现 `InferenceModel` 接口。[#509](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F509)\n* 将 `SavingFormat` 转换为类，并向 `SavingFormat.JsonConfigCustomVariables` 添加了 `isKerasFullyCompatible` 参数。[#501](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F501)\n* 为 `OnnxInferenceModel` 添加了基本的多输入支持。[#417](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F417)\n\n感谢以下贡献者：\n* Julia Beliaeva (@juliabeliaeva)\n* Onuralp Sezer (@onuralpszr)","2023-01-16T16:12:47",{"id":100,"version":101,"summary_zh":102,"released_at":103},280999,"v0.5.1","错误修复：\n* 修复了 SSDObjectDetectionModel 和 MultiPoseDetectionModel 中的预处理，并从 Fan2d106 和 UltraFace 模型中移除了显式形状定义。[#496](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F496)\n* 在 Resize 操作中，如果输出与输入尺寸相同，则跳过图像副本的创建。[#502](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F502)\n* 修复了 SGD 的次要构造函数忽略 clipGradient 参数的问题。[#504](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F504)\n* 修复了内存泄漏问题，确保已使用的 TensorFlow 张量会被正确关闭。[#507](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F507)\n* 修复了 HardShrink 激活函数。[#505](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F505)\n* 修复了 Android 平台上下载模型时出现的问题。[#516](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F516)\n* 对文档进行了少量修正。\n\n感谢以下贡献者：\n* Julia Beliaeva (@juliabeliaeva)\n* Nikita Ermolenko (@ermolenkodev)","2023-01-14T21:45:33",{"id":105,"version":106,"summary_zh":107,"released_at":108},281000,"v0.5.0","特性：\n* 增加了 Android 推理支持\n  * 为“impl”、“onnx”和“visualization”模块构建了 Android 工件 [#422](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F422)\n  * 向模型库中添加了 Android 特有的模型\n    * 分类 [#438](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F438)：\n      * `EfficientNet4Lite`\n      * `MobilenetV1` \n    * 目标检测：\n      * `SSDMobileNetV1` [#440](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F440)\n      * `EfficientDetLite0` [#443](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F443)\n    * 姿态检测 [#442](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F442)：\n      * `MoveNetSinglePoseLighting`\n      * `MoveNetSinglePoseThunder`\n    * 人脸检测 [#461](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F461)：\n      * `UltraFace320`\n      * `UltraFace640`\n    * 人脸对齐 [#441](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F441)：\n      * `Fan2d106` \n  * 实现了可在 Android `Bitmap` 上运行的预处理操作 [#416](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F416) \n    [#478](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F478)：\n    * `Resize`\n    * `Rotate`\n    * `Crop`\n    * `ConvertToFloatArray`\n  * 添加了将 `ImageProxy` 转换为 `Bitmap` 的工具函数 [#458](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F458)\n  * 添加了 `NNAPI` 执行提供者 [#420](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F420)\n  * 增加了从 `ByteArray` 表示创建 `OnnxInferenceModel` 的 API [#415](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F415)\n  * 引入了一个在构建前下载模型中心模型的 Gradle 任务 [#444](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F444)\n  * 添加了在 Android `Canvas` 上绘制检测结果的工具函数 [#450](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F450)\n* 实现了新的预处理 API [#425](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F425)\n  * 引入了 `Operation` 接口，用于表示针对任意输入和输出的预处理操作\n  * 添加了 `PreprocessingPipeline` 类，以类型安全的方式组合多个操作\n  * 使用新 API 重新实现了旧的操作\n  * 增加了诸如 `pipeline` 用于启动新的预处理流水线、`call` 用于调用其他地方定义的操作、`onResult` 用于访问中间预处理结果等便捷函数\n  * 将 `ModelType#preprocessInput` 函数转换为 `Operation` [#429](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F429)\n  * 将针对 ImageNet 训练模型的常用预处理函数转换为 `Operation` [#429](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fpull\u002F429)\n* 增加了 ONNX 的新特性\n  * 增加了执行提供者的支持（`CPU`、`CUDA`、`NNAPI`）以及使用这些提供者进行推理的便捷扩展 [#386](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F386)\n  * 引入了 `OnnxInferenceModel#predictRaw` 函数，允许自定义处理 `OrtSession.Result`，并提供了提取常见数据类型的扩展函数 [#465](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotli","2022-12-26T05:23:34",{"id":110,"version":111,"summary_zh":112,"released_at":113},281001,"v0.4.0","特性：\n* 将 PoseNet 模型系列添加到 ONNX 模型中心。[#269](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F269)\n  * MoveNetSinglePoseLighting\n  * MoveNetMultiPoseLighting\n  * MoveNetSinglePoseThunder\n* 将 EfficientDet 模型系列添加到 ONNX 模型中心。[#304](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F304)\n  * EfficientDetD0\n  * EfficientDetD1\n  * EfficientDetD2\n  * EfficientDetD3\n  * EfficientDetD4\n  * EfficientDetD5\n  * EfficientDetD6\n* 将 SSD-Mobilenet-v1 模型添加到 ONNX 模型中心。[#296](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F296)\n* 将 EfficientNet 模型系列添加到 ONNX 模型中心。[#264](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F264)\n  * EfficientNetB0（含 noTop 模型）\n  * EfficientNetB1（含 noTop 模型）\n  * EfficientNetB2（含 noTop 模型）\n  * EfficientNetB3（含 noTop 模型）\n  * EfficientNetB4（含 noTop 模型）\n  * EfficientNetB5（含 noTop 模型）\n  * EfficientNetB6（含 noTop 模型）\n  * EfficientNetB7（含 noTop 模型）\n* 将 noTop 模型添加到 TensorFlow 模型中心。[#281](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F281)\n  * VGG'16\n  * VGG'19\n  * ResNet50\n  * ResNet101\n  * ResNet152\n  * ResNet50V2\n  * ResNet101V2\n  * ResNet152V2\n  * MobileNet\n  * MobileNetV2\n  * NasNetMobile\n  * NasNetLarge\n  * DenseNet121\n  * DenseNet169\n  * DenseNet201\n  * Xception\n  * Inception\n* 添加了新的 `Dot` 层以及 `Conv1DTranspose`、`Conv2DTranspose`、`Conv3DTranspose` 层。\n  [#144](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F144) [#124](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F124)\n* 添加了新的激活函数：`SparsemaxActivation` 和 `SoftShrinkActivation`。\n  [#171](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F171) [#170](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F170)\n* 添加了新的图像预处理工具：`Padding`、`CenterCrop`、`Convert`、`Grayscale`，以及张量预处理工具 `Normalizing`。\n  [#203](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F203) [#201](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F201)\n  [#202](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F202) [#204](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F204)\n\n示例与教程：\n* 添加了使用 TensorFlow 模型进行图像预处理 DSL 的示例。[#292](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Fissues\u002F292)。\n* 添加了基于 [EfficientDet2](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Ftree\u002Fmaster\u002Fexamples\u002Fsrc\u002Fmain\u002Fkotlin\u002Fexamples\u002Fonnx\u002Fobjectdetection\u002Fefficientdet) 的目标检测示例。\n* 添加了基于 [SSD-Mobilenet-v1](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Ftree\u002Fmaster\u002Fexamples\u002Fsrc\u002Fmain\u002Fkotlin\u002Fexamples\u002Fonnx\u002Fobjectdetection\u002Fssdmobile) 的目标检测示例。\n* 添加了基于 [不同模型](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Ftree\u002Fmaster\u002Fexamples\u002Fsrc\u002Fmain\u002Fkotlin\u002Fexamples\u002Fonnx\u002Fposedetection) 的姿态检测示例。\n* 添加了基于 [EfficientNet 模型家族](https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlindl\u002Ftree\u002Fmaster\u002Fexamples\u002Fsrc\u002Fmain\u002Fkotlin\u002Fexamples\u002Fonnx\u002Fcv\u002Fefficicentnet) 不同模型的图像识别示例。\n* 添加了示例 for ","2022-06-09T14:03:14",{"id":115,"version":116,"summary_zh":117,"released_at":118},281002,"v0.3.0","功能特性：\n* 实现了 [面向函数式和序列化模型的复制功能](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F40)\n* 实现了 [基于 TensorFlow 的推理模型的复制功能](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F178)\n* 实现了 [实验性的 ONNX 集成](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F184)：\n   * 新增了 'onnx' 模块\n   * 添加了实现通用 InferenceModel 接口的 ONNXModel 类\n   * ONNX 模型可用作 TensorFlow 模型的预处理阶段\n   * 可对不含顶层的 ONNX 模型进行微调，通过使用基于 TensorFlow 的层来训练顶层\n* 在 Model Hub 中新增了 SSD 和 YOLOv4 目标检测模型\n* 在 Model Hub 中新增了 Fan2D106 人脸对齐模型\n* 新增了具有简易 API 的 SSDObjectDetectionModel，用于目标检测，包含预处理和后处理功能\n* 在 Model Hub 中添加了几款 ONNX 格式的模型：\n   * ResNet18\n   * ResNet34\n   * ResNet50\n   * ResNet101\n   * ResNet152\n   * ResNet18V2\n   * ResNet34V2\n   * ResNet50V2\n   * ResNet101V2\n   * ResNet152V2\n   * EfficientNetV4\n* 在 Model Zoo（或 Model Hub）中新增了 [基于 TensorFlow 的新模型](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F101)：\n   * NasNetMobile\n   * NasNetLarge\n   * DenseNet121\n   * DenseNet169\n   * DenseNet201\n   * Xception\n* 在 ModelZoo 中新增了 [基于 TensorFlow 的 ResNet18 和 ResNet34 模型](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F175)\n* 为层添加了 [L1 和 L2 正则化](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F83)\n* 添加了 [单位初始化器](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F50)\n* 添加了 [正交初始化器](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F51)\n* 添加了 [Softmax 激活层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F52)\n* 添加了 [LeakyReLU 激活层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F53)\n* 添加了 [PReLU 激活层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F54)\n* 添加了 [ELU 激活层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F55)\n* 添加了 [ThresholdedReLU 激活层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F56)\n* 添加了 [Conv1D 层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F59)\n* 添加了 [MaxPooling1D 层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F60)\n* 添加了 [AveragePooling1D 层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F61)\n* 添加了 [GlobalMaxPooling1D 层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F62)\n* 添加了 [GlobalAveragePooling1D 层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F63)\n* 添加了 [Conv3D 层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F79)\n* 添加了 [MaxPooling3D 层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F80)\n* 添加了 [AveragePooling3D 层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F81)\n* 添加了 [GlobalAveragePooling3D 层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F82)\n* 添加了 [GlobalMaxPool2D 层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F116)","2021-09-24T15:51:03",{"id":120,"version":121,"summary_zh":122,"released_at":123},281003,"v0.2.0","功能特性：\n* 新增[对函数式 API 的支持](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F23)\n* 为推理新增[批归一化层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F34)\n* 新增[全局平均池化2D层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F38)\n* 新增[7 种合并层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F37) \n（加法、平均、拼接、最大值、最小值、乘法、减法）\n* 新增[激活层](https:\u002F\u002Fgithub.com\u002FJetBrains\u002FKotlinDL\u002Fissues\u002F35)\n* 新增 ReLU 层\n* 新增深度可分离卷积2D层\n* 新增分隔卷积2D层\n* 新增重塑层\n* 新增 2D 裁剪层\n* 新增零填充2D层\n* 添加 NoGradients 接口，用于标识在 TensorFlow 中因缺少梯度而无法在训练过程中更新权重的层\n* 新增模型库，包含以下模型：\n    * VGG'16\n    * VGG'19\n    * ResNet50\n    * ResNet101\n    * ResNet152\n    * ResNet50V2\n    * ResNet101V2\n    * ResNet152V2\n    * MobileNet\n    * MobileNetV2\n* 为模型库中每种支持的模型添加了 ImageNet 相关预处理：既可在 ModelZoo 对象中使用，也可作为图像预处理 DSL 中的 `sharpen` 阶段\n* 为模型库中的模型（除 MobileNet 外）添加了基于函数式 API 设计的模型描述，位于 _org.jetbrains.kotlinx.dl.api.core.model_ 包中\n* 新增 Dataset 类的两种实现：OnFlyImageDataset 和 OnHeapDataset\n* 在 DAG 模型表示中为各层节点添加了拓扑排序功能\n* 为两种 Dataset 实现均增加了 `shuffle` 函数支持\n* 新增符合 Kotlin 语言习惯的图像预处理 DSL，包含以下操作：\n    * 加载\n    * 裁剪\n    * 缩放\n    * 旋转\n    * 归一化\n    * 锐化\n    * 保存\n* 实现了根据图像文件夹名称动态生成标签的功能\n* 为函数式 API 实现了 `summary` 方法\n* 新增嵌入式数据集支持（MNIST、FashionMNIST、Cifar'10、猫狗数据集）\n\nBug 修复：\n* 修复了示例中 BGR 和 RGB 预处理的 Bug\n* 修复了卷积层中遗漏的 `useBias` 字段\n\n内部改进：\n* 重构：Sequential 和 Functional 模型现在均继承 GraphTrainableModel 类\n* 完成 Klaxon 从 5.0.1 到 5.5 的迁移\n* 移除了在发送至 `Tensor.create(...)` 之前无用的标签和数据转换\n\n基础设施：\n* 将模型库模型的权重及 JSON 配置上传至 S3 存储\n* 为示例添加了 TeamCity 构建任务\n* 将嵌入式数据集上传至 S3 存储\n* 移除对 `jcenter` 的依赖\n* 将构件迁移到 Maven Central Repository\n* 更改了 groupId 和 artifactId\n* 通过清理资源并将模型和数据集迁移到 S3 存储，将下载的 `api` 构件大小从 65 MB 减少至 650 KB\n\n文档：\n* 更新了所有教程\n* 更新了 Readme.md\n\n示例：\n* 重命名了所有示例包\n* 重新组织了各包中的示例\n* 增加了 t 相关示例","2021-05-14T15:48:59",{"id":125,"version":126,"summary_zh":127,"released_at":128},281004,"v0.1.1","# 0.1.1 (2021年1月2日)\n特性：\n* 在 #28 中添加了对 `predictSoftly` 的批处理支持\n* 将公共 API 中的 `getXXX` 函数转换为属性（层和模型类）\n* 从公共 API 中移除了 `verbose` 标志\n* 日志记录基于配置进行。\n\n错误修复：\n* 修复了 #25 [`Sequential.predictSoftly` 调用异常缓慢的问题]\n* 修复了 #24 [模型加载后 `reshapeFunction` 未初始化的问题]\n* 修复了 #22 [与 Log4J 结合使用时出现的异常]\n* 为 Gradle Wrapper 脚本添加了“可执行”权限，使其可在 Linux\u002FMac OS X 系统上运行。\n\n内部改进：\n* 移除了 `internalPredict` 方法中将 FloatArray 不必要地复制到堆外内存的操作。\n\n文档：\n* 为发布经理添加了“发布检查清单”\n* 更新了 Readme.md，新增了关于日志记录和 fatJar 问题的章节\n* 对“教程”部分进行了小幅更新。\n\n感谢以下贡献者：\n* Alexey Zinoviev (@zaleslaw)\n* Maria Khalusova (@MKhalusova)\n* Michal Harakal (@michalharakal)\n* Sebastian Aigner (@SebastianAigner)\n* LostMekka (@LostMekka)\n* Lothar Schulz (@lotharschulz)\n* quickstep24 (@quickstep24)","2021-01-28T10:01:40",{"id":130,"version":131,"summary_zh":132,"released_at":133},281005,"v0.1.0","特性：\n* 为伴生方法添加了 @JvmStatic 注解\n\n示例：\n* 在示例中提供了对 VGG16 和 VGG19 权重及模型的支持\n* 添加了用于加载示例中使用的所有模型和权重的链接\n* 将直接文件路径移至属性文件\n* 移除了重复资源\n* 将迁移学习示例合并并进行了改进\n* 为所有示例添加了说明\n\n文档：\n* 对“迁移学习教程”进行了小幅更新","2020-12-08T13:33:18",{"id":135,"version":136,"summary_zh":137,"released_at":138},281006,"v0.0.14","特性：\n* 损失函数支持 ReductionType：SUM 和 SUM_OVER_BATCH_SIZE\n* 新增损失函数：LogCosh、BinaryCrossEntropy、SquaredHinge\n\n测试：\n* 为所有损失函数添加了测试（在 Eager Mode 下）\n* 为 Keras 权重加载的新场景添加了测试\n\n文档：\n* 添加了“迁移学习教程”\n* 添加了行为准则和变更日志文档\n","2020-11-23T10:12:04",[140,152,160,169,177,186],{"id":141,"name":142,"github_repo":143,"description_zh":144,"stars":145,"difficulty_score":146,"last_commit_at":147,"category_tags":148,"status":54},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[149,49,150,151],"Agent","图像","数据工具",{"id":153,"name":154,"github_repo":155,"description_zh":156,"stars":157,"difficulty_score":146,"last_commit_at":158,"category_tags":159,"status":54},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,"2026-04-05T11:01:52",[49,150,149],{"id":161,"name":162,"github_repo":163,"description_zh":164,"stars":165,"difficulty_score":34,"last_commit_at":166,"category_tags":167,"status":54},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 真正成长为懂上",157379,"2026-04-15T23:32:42",[49,149,168],"语言模型",{"id":170,"name":171,"github_repo":172,"description_zh":173,"stars":174,"difficulty_score":34,"last_commit_at":175,"category_tags":176,"status":54},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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[49,150,149],{"id":178,"name":179,"github_repo":180,"description_zh":181,"stars":182,"difficulty_score":34,"last_commit_at":183,"category_tags":184,"status":54},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[185,149,150,49],"插件",{"id":187,"name":188,"github_repo":189,"description_zh":190,"stars":191,"difficulty_score":34,"last_commit_at":192,"category_tags":193,"status":54},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[185,49]]