From 25254321d73d2fcd93b74150d0cf81fdb281722a Mon Sep 17 00:00:00 2001 From: "TOKISAKIX\\21168" <2116884726@qq.com> Date: Sun, 7 Apr 2024 23:47:31 +0800 Subject: [PATCH] add terox logo --- README.md | 2 ++ README_cn.md | 2 ++ asset/terox.png | Bin 0 -> 17445 bytes 3 files changed, 4 insertions(+) create mode 100644 asset/terox.png diff --git a/README.md b/README.md index f92150b..460247b 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ **Terox is an open source tiny Deep Learning System based on Python, Cython and CUDA.** +![img](asset/terox.png) + Terox is a tiny Python package that provides some features: - [x] Support automatic differentiation. - [ ] Provides convenient tensor calculation. diff --git a/README_cn.md b/README_cn.md index 18faa08..c33cafe 100644 --- a/README_cn.md +++ b/README_cn.md @@ -4,6 +4,8 @@ **Terox 是一个基于 Python、Cython 和 CUDA 的开源微型深度学习系统。** +![img](asset/terox.png) + Terox 是一个很精简的 Python 包,它提供了一些特性: - [x] 支持自动微分。 - [ ] 提供方便的张量计算。 diff --git a/asset/terox.png b/asset/terox.png new file mode 100644 index 0000000000000000000000000000000000000000..493798ed335e2057e04eec0e144053a341845304 GIT binary patch literal 17445 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