pytorch-lightning与torch

### PyTorch-Lightning与原生PyTorch的功能对比 #### 功能特性 PyTorch-Lightning 是建立在 PyTorch 基础之上的高级框架,旨在简化机器学习模型训练过程中的复杂度并提高可重复性[^2]。它保留了 PyTorch 的灵活性,同时引入了一些结构化的方法来管理实验设置、数据加载器配置以及优化器的选择。 对于原生 PyTorch 而言,在编写完整的训练循环时可以深入理解其底层机制,这对于初学者来说是一个很好的实践方式[^1];然而当开发者逐渐熟悉之后,则建议转向更高层次的抽象工具如 PyTorch-Lightning 来节省时间并减少错误发生的可能性。 #### 使用场景 - **研究开发阶段** 当处于探索新算法或调整现有方法的研究初期时,可能更倾向于使用低级别的 API 如原生 PyTorch ,因为这允许更加精细地控制每一个细节,并且能够快速迭代不同的想法。 - **生产部署环境** 对于已经确定下来的项目而言,在向产品转化的过程中往往追求效率最大化。此时采用像 PyTorch-Lightning 这样的高层级库会更为合适,因为它可以帮助团队专注于核心业务逻辑而不是被繁杂的基础建设所困扰。 ```python import pytorch_lightning as pl from torch.utils.data import DataLoader, random_split from torchvision.datasets import MNIST from torchvision.transforms import ToTensor class LitMNIST(pl.LightningModule): def __init__(self): super().__init__() self.model = ... # Define model here def forward(self, x): return self.model(x) def training_step(self, batch, batch_idx): x, y = batch logits = self.forward(x) loss = F.cross_entropy(logits, y) return {'loss': loss} def configure_optimizers(self): optimizer = optim.Adam(self.parameters(), lr=0.02) return [optimizer] dataset = MNIST('', train=True, download=True, transform=ToTensor()) train_loader = DataLoader(dataset, batch_size=32) trainer = pl.Trainer(max_epochs=5) model = LitMNIST() trainer.fit(model, train_loader) ``` 此代码片段展示了如何利用 PyTorch-Lightning 构建一个简单的 MNIST 训练流程,相较于手动实现整个训练回路要简洁得多。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

Python内容推荐

pytorchTutorial_python_tensorflow_

pytorchTutorial_python_tensorflow_

Pytorch and Tensorflow tutorials written in Python.

一个用于推荐模型的LightingPytorch框架,易于使用和易于扩展_Python_下载.zip

一个用于推荐模型的LightingPytorch框架,易于使用和易于扩展_Python_下载.zip

一个用于推荐模型的LightingPytorch框架,易于使用和易于扩展_Python_下载.zip

backprop:Backprop是一个Python库,可使用最新的机器学习模型轻松解决AI任务

backprop:Backprop是一个Python库,可使用最新的机器学习模型轻松解决AI任务

反向传播 Backprop是一个Python库,可使用最新的机器学习模型轻松解决AI任务。 Backprop建立在通过转移学习解决任务的基础上。它实现了高级模型,这些模型足够通用,可以用最少的用户数据来解决现实世界中的任务。 您可以使用Backprop解决的现成任务: 英文会话式问答(用于FAQ聊天机器人,文本分析等) 超过100种语言的文本分类(用于电子邮件分类,意图检测等) 图像分类(用于物体识别,OCR等) 50多种语言的文本向量化(语义搜索电子商务,文档等) 英文摘要(长文档的TLDR) 英文情感检测(用于客户满意度,文本分析等) 文本生成(用于想法,故事生成和广泛的任务解决) 对于更特定的用例,您可以通过微调以较少的数据和几行代码适应任务。我们正在努力为所有可用任务添加微调。 您可以在自己的机器上运行所有任务,也可以使用我们优化的推理在生产环境中运行所有任务,您只需为使用付

lightning-hydra-elastic:具有pytorch_lightning + hydra +火炬_elastic的Pytorch项目骨架

lightning-hydra-elastic:具有pytorch_lightning + hydra +火炬_elastic的Pytorch项目骨架

lightning-hydra-elastic:具有pytorch_lightning + hydra +火炬_elastic的Pytorch项目骨架

ViT-pytorch_lightning

ViT-pytorch_lightning

深度学习项目种子 使用此种子启动新的深度学习/ ML项目。 内置setup.py 内置要求 MNIST的例子 徽章 比比克斯 目标 该种子的目标是使ML纸质代码结构相同,以便可以轻松地扩展和复制工作。 删除项目中的所有内容 您的项目名称 描述 它能做什么 怎么跑 一,安装依赖 # clone project git clone https://github.com/YourGithubName/deep-learning-project-template # install project cd deep-learning-project-template pip install -e . pip install -r requirements.txt 接下来,导航到任何文件并运行它。 # module folder cd project # run modul

PyTorch Lightning:简化深度学习训练的革命

PyTorch Lightning:简化深度学习训练的革命

PyTorch 是一个开源的机器学习库,广泛用于计算机视觉和自然语言处理等应用中的深度学习研究和生产。它由 Facebook 的人工智能研究团队开发,并且得到了许多研究机构和企业的支持。 以下是 PyTorch 的一些主要特点: 1. **动态计算图(Dynamic Computation Graph)**:PyTorch 允许在运行时动态地构建计算图,这使得调试和实验更加灵活和直观。 2. **自动微分**:PyTorch 提供了自动微分功能,可以自动计算导数,这对于训练神经网络至关重要。 3. **强大的GPU加速**:PyTorch 支持在 NVIDIA CUDA 上进行高效的计算,使得在 GPU 上运行深度学习模型变得非常快速。 4. **丰富的库和工具**:PyTorch 提供了大量的预训练模型和工具,如 TorchVision(用于处理图像和视频的库)和 TorchText(用于处理文本的库)。 5. **社区支持**:PyTorch 拥有一个活跃的开发者社区,提供大量的教程、文档和论坛支持。 PyTorch 的主要竞争对手是 TensorFlow,另一个流行的深度学

HyperNetworks

HyperNetworks

深度学习项目种子 使用此种子来启动新的深度学习/ ML项目。 内置setup.py 内置要求 MNIST的例子 徽章 比比克斯 目标 该种子的目标是使ML纸质代码结构相同,以便可以轻松地扩展和复制工作。 删除项目中的所有内容 您的项目名称 描述 它能做什么 怎么跑 首先,安装依赖项 # clone project git clone https://github.com/YourGithubName/deep-learning-project-template # install project cd deep-learning-project-template pip install -e . pip install -r requirements.txt 接下来,导航到任何文件并运行它。 # module folder cd project # run mo

深度矢量量化:VQVAE,GumbelSoftmaxes和朋友

深度矢量量化:VQVAE,GumbelSoftmaxes和朋友

深度矢量量化 实现VQVAE的培训代码,即具有分类潜在变量瓶颈的自动编码器,然后可以轻松地将其插入到现有基础结构中,以对离散变量序列(GPT和朋友)建模。 dvq/vqvae.py是训练脚本的入口点,可以称为一次小型训练运行,例如: cd dvq; python vqvae.py --gpus 1 --data_dir /somewhere/to/store/cifar10 这将使用CIFAR-10上的一个半小型网络来复制原始DeepMind VQVAE论文(请参阅之前的参考资料)。 此仓库上的工作仍在进行中,目前需要阅读代码并理解这些方法。 接下来,旨在重现DALL-E的结果,因为大多数代码已经到位,但是我们需要使用logit laplace分布进行训练,调整gumbel softmax超参数,并在ImageNet +上进行训练。 参考 DeepMind的 可以使用--vq_fla

Barkify是一个非官方的代码仓库,用于训练Bark,这是由suno-ai开发的一款文本提示生成音频的模型

Barkify是一个非官方的代码仓库,用于训练Bark,这是由suno-ai开发的一款文本提示生成音频的模型

Barkify是一个非官方的代码仓库,用于训练Bark,这是由suno-ai开发的一款文本提示生成音频的模型。 Bark包含两个与自然语言处理(NLP)提示和其他技巧兼容的GPT风格模型。Bark实现了出色的真实世界文本转语音(TTS)效果,但代码仓库本身并没有提供训练配方。我们希望进行一些实验或训练这个模型。在这里,我们发布了我们的基础训练代码,这可能对开源社区的训练有一定的指导意义。 处理数据集 我们在LJspeech数据集上进行实验。请按照process.ipynb中的说明操作。 对于中文,我们测试了一个名为“峰哥亡命天涯”的著名语音合成器。它显示出可以接受的结果,但不如我们其他的TTS代码仓库的效果。对于英文,我们测试了LibriTTS数据集。它运行良好,我们路线图中的基本项目已经得到了验证。 训练 第一阶段代表文本到语义,第二阶段代表语义到声音。 您应该在configs/barkify.yaml中配置参数。我们使用一块A100 GPU来训练我们的模型(包括S1和S2)。

pytorch_learning:pytorch框架学习

pytorch_learning:pytorch框架学习

pytorch_learning:pytorch框架学习

PyTorch思维导图.rar

PyTorch思维导图.rar

PyTorch思维导图,内容详细

WIMP:[arXiv]自动驾驶的假设运动If

WIMP:[arXiv]自动驾驶的假设运动If

WIMP-如果运动预测器该怎么办 有关运动预测的参考PyTorch实施 设置 要求 WIMP参考实现和设置过程已经过测试,可与Ubuntu 16.04+配合使用,并且具有以下要求: python> = 3.7 火炬> = 1.5.0 安装依赖项 使用pip安装其余必需的Python依赖项。 pip install -r requirements.txt 安装通过以下步骤模块到本地Python环境 , ,和中的自述。 算术数据 为了设置用于训练和评估的Argoverse数据集,请遵循以下步骤: 下载数据集并提取压缩的数据子集,以便将原始CSV文件存储在以下目录结构中: ├── WIMP │ ├── src │ ├── scripts │ ├── data │ │ ├── argoverse_raw │ │ │ ├── train │ │

PyTorch详细使用方法

PyTorch详细使用方法

pytorch,PyTorch 是一个开源的深度学习框架,由 Facebook 的人工智能研究团队(现为 Meta AI)开发和维护。它在机器学习和人工智能社区中被广泛使用,尤其受到科研人员和开发者们的喜爱,因其灵活性、易用性和高效性而著称

《PyTorch:深度学习框架的探索之旅》

《PyTorch:深度学习框架的探索之旅》

本文围绕深度学习框架 PyTorch 展开探索之旅。开篇介绍其基于 Torch 库、由 Meta 开发,具备张量计算、自动微分等功能,诸多软件基于它构建。接着探秘其动态计算图、自动微分等特性,阐述 torch.autograd 等核心组件。在应用领域,涵盖计算机视觉、自然语言处理、语音识别。与 TensorFlow 等框架对比,各有优劣。展望未来,PyTorch 将在性能、功能、应用范围上持续发展,社区壮大也将助力其繁荣,有望在深度学习领域保持强劲势头。

脑机接口基于贝叶斯优化的FBCCA算法参数调整:EEG数据分类性能提升代码实现

脑机接口基于贝叶斯优化的FBCCA算法参数调整:EEG数据分类性能提升代码实现

内容概要:本文档展示了使用贝叶斯优化对FBCCA(基于滤波器组的典型相关分析)算法参数进行调整的应用代码。首先,介绍了所需的Python包安装命令,如pytorch-lightning、torch和bayesian-optimization等。接着,定义了EEG数据集类用于数据预处理,以及FBCCA模型类,该模型由多个子带滤波器组成,每个子带采用一维卷积层进行滤波并用线性层计算相关性。然后,构建了目标函数`fbcca_optimize`,用于训练FBCCA模型并返回训练损失值,贝叶斯优化通过调整子带数量`num_subbands`和学习率`lr`来最小化损失值。最后,在主函数中,准备了示例的EEG数据与标签,并创建数据加载器,设置了贝叶斯优化的参数范围,执行优化过程,输出最佳参数组合。 适合人群:具有一定机器学习和深度学习基础,尤其是对脑电数据分析、贝叶斯优化和PyTorch框架有一定了解的研究人员或工程师。 使用场景及目标:①通过调整FBCCA算法中的关键参数(如子带数量和学习率),提高模型在脑电数据分类任务中的性能;②学习如何将贝叶斯优化应用于深度学习模型的超参数调优。 其他说明:本代码使用随机生成的数据作为示例,实际应用时需替换为真实的EEG数据。此外,代码中提供了详细的注释,帮助理解各个部分的功能,便于进一步修改和扩展。

pytorch-tutorial_pytorch_

pytorch-tutorial_pytorch_

pytorch教程

pytorch-doc-zh-pytorch教程

pytorch-doc-zh-pytorch教程

PyTorch pytorch教程 pytorch教程 pytorch教程 pytorch教程 pytorch教程

pytorch教程pytorch教程

pytorch教程pytorch教程

pytorch教程

TorchNPU
基于昇腾NPU的PyTorch适配插件

TorchNPU 基于昇腾NPU的PyTorch适配插件

作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。 昇腾为基于华为昇腾 AI 处理器和软件的行业应用及服务提供全栈 AI 计算基础设施。您可以通过访问昇腾社区,了解关于昇腾的更多信息。

体验PyTorch深度建模的乐趣

体验PyTorch深度建模的乐趣

体验PyTorch深度建模的乐趣

最新推荐最新推荐

recommend-type

点造型加湿器.prt_UG四五轴CNC编程练习图档.rar

点造型加湿器.prt_UG四五轴CNC编程练习图档.rar
recommend-type

通过短时倒谱(Cepstrogram)计算进行时-倒频分析研究(Matlab代码实现)

内容概要:本文围绕通过短时倒谱(Cepstrogram)计算进行时-倒频分析的研究,提出了一种基于Matlab的信号处理方法,旨在从复杂信号中提取时变的倒频域特征,尤其适用于具有非线性反馈的LTI系统识别。文中系统阐述了短时倒谱的理论基础、计算流程与实现机制,并结合Simulink与Matlab代码实现了多个典型应用案例,涵盖非线性系统辨识、路径损耗建模、信号去噪与增强等,充分展示了该方法在系统建模与信号分析中的强大能力。研究不仅提供了完整的算法实现方案,还深入探讨了其在科研与工程实践中的广泛应用前景。; 适合人群:具备扎实的信号处理理论基础与Matlab编程能力,从事自动化、通信工程、电子工程、控制科学等领域的高校研究生、科研人员及工程技术人员。; 使用场景及目标:①实现对具有非线性反馈的LTI系统的精确建模与参数辨识,提升系统识别的准确性与鲁棒性;②在强噪声背景下进行有效的信号特征提取与时-倒频域分析,恢复信号的有效成分;③作为高级信号处理的教学与科研平台,帮助深入理解倒谱分析的物理意义及其在现代工程中的实际应用。; 阅读建议:建议读者在学习过程中紧密结合文中提供的Matlab代码与Simulink模型进行动手实践,通过调整参数、修改输入信号等方式观察分析结果的变化,以加深对算法机理的理解;同时可访问作者提供的网盘资源与完整代码包,系统性地掌握相关技术的优化与拓展方法。
recommend-type

esxi 硬盘保存问题及解决

打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 在将ESXi6.7u3系统更新至最新补丁ESXi670-202210001.zip版本之后,ESXi的管理Web界面可能会出现一个现象,即当尝试添加已有的硬盘时,显示部分会出现异常情况,并且有可能导致无法继续进行下一步操作以保存设置。有网络资源指出,该问题可能同样存在于后续的更高版本系统中。以下提供的资源将详细阐述该问题的具体表现,并给出经过验证的解决方案。
recommend-type

312.zip

当 CAD 缺失对应字体时,图纸文字会显示异常,出现乱码、问号。将下载好的字体文件复制到 AutoCAD 的 Fonts 文件夹中,即可恢复正常显示。
recommend-type

户外配电箱_机箱机柜.rar

户外配电箱_机箱机柜.rar
recommend-type

学生成绩管理系统C++课程设计与实践

资源摘要信息:"学生成绩信息管理系统-C++(1).doc" 1. 系统需求分析与设计 在进行学生成绩信息管理系统开发前,首先需要进行系统需求分析,这是确定系统开发目标与范围的过程。需求分析应包括数据需求和功能需求两个方面。 - 数据需求分析: - 学生成绩信息:需要收集学生的姓名、学号、课程成绩等数据。 - 数据类型和长度:明确每个数据项的数据类型(如字符串、整型等)和长度,例如学号可能是字符串类型且长度为一定值。 - 描述:详细描述每个数据项的意义,以确保系统能够准确处理。 - 功能需求分析: - 列出功能列表:用户界面应提供清晰的操作指引,列出所有可用功能。 - 查询学生成绩:系统应能通过学号或姓名查询学生的成绩信息。 - 增加学生成绩信息:允许用户添加未保存的学生成绩信息。 - 删除学生成绩信息:能够通过学号或姓名删除已经保存的成绩信息。 - 修改学生成绩信息:通过学号或姓名修改已有的成绩记录。 - 退出程序:提供安全退出程序的选项,并确保所有修改都已保存。 2. 系统设计 系统设计阶段主要完成内存数据结构设计、数据文件设计、代码设计、输入输出设计、用户界面设计和处理过程设计。 - 内存数据结构设计: - 使用链表结构组织内存中的数据,便于动态增删查改操作。 - 数据文件设计: - 选择文本文件存储数据,便于查看和编辑。 - 代码设计: - 根据功能需求,编写相应的函数和模块。 - 输入输出设计: - 设计简洁明了的输入输出提示信息和操作流程。 - 用户界面设计: - 用户界面应为字符界面,方便在命令行环境下使用。 - 处理过程设计: - 设计数据处理流程,确保每个操作都有明确的处理逻辑。 3. 系统实现与测试 实现阶段需要根据设计阶段的成果编写程序代码,并进行系统测试。 - 程序编写: - 完成系统设计中所有功能的程序代码编写。 - 系统测试: - 设计测试用例,通过测试用例上机测试系统。 - 记录测试方法和测试结果,确保系统稳定可靠。 4. 设计报告撰写 最后,根据系统开发的各个阶段,撰写详细的设计报告。 - 系统描述:包括问题说明、数据需求和功能需求。 - 系统设计:详细记录内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。 - 系统测试:包括测试用例描述、测试方法和测试结果。 - 设计特点、不足、收获和体会:反思整个开发过程,总结经验和教训。 时间安排: - 第19周(7月12日至7月16日)完成项目。 - 7月9日8:00到计算机学院实验中心(三楼)提交程序和课程设计报告。 指导教师和系主任(或责任教师)需要在文档上签名确认。 系统需求分析: - 使用表格记录系统需求分析的结果,包括数据项、数据类型、数据长度和描述。 - 分析数据项如学生成绩信息、状态器、链表节点等,确定其属性和行为。 以上就是文档中提到的学生成绩信息管理系统开发的关键知识点。开发此类系统需要熟练掌握C++编程基础,了解面向对象的程序设计思想,以及熟悉文件操作和链表等数据结构的应用。此外,良好的软件开发流程意识、测试意识和文档撰写能力也是必不可少的。
recommend-type

别再手动拖拽了!用Lumerical脚本批量创建FDTD仿真结构(附完整代码)

# 告别低效建模:Lumerical脚本自动化实战指南 在光子学仿真领域,时间就是科研生命线。当同行还在GUI界面里反复点击菜单时,你已经用脚本批量生成了20组参数化结构——这不是未来场景,而是每位FDTD用户都应该掌握的基础生产力革命。本文将彻底改变你与Lumerical的交互方式,从手动拖拽的农耕时代,跃迁到自动化建模的工业文明。 ## 1. 为何脚本建模是必然选择 2019年Nature Photonics的一项研究显示,科研工作者在仿真工具上平均浪费37%的时间在重复性操作上。对于需要参数扫描的纳米光学结构设计,这个数字可能更高。手动创建10个不同尺寸的纳米柱阵列意味着: -
recommend-type

Java邮件解析任务中,如何安全高效地提取HTML邮件内容并避免硬编码、资源泄漏和类型转换异常?

<think>我们被要求优化一段Java代码,该代码用于处理邮件(特别是来自特定发件人的构建通知邮件)。代码的主要问题包括: 1. 重复获取邮件内容:在检查MIME类型后,多次调用`msg[i].getContent()`,这可能导致性能问题或流关闭异常。 2. 类型转换问题:直接将邮件内容转换为`Multipart`而不进行类型检查,可能引发`ClassCastException`。 3. 代码结构问题:逻辑嵌套过深,可读性差,且存在重复代码(如插入邮件详情的操作在两个地方都有)。 4. 硬编码和魔法值:例如在解析HTML表格时使用了硬编码的索引(如list3.get(10)),这容易因邮件
recommend-type

RH公司应收账款管理优化策略研究

资源摘要信息:"本文针对RH公司的应收账款管理问题进行了深入研究,并提出了改进策略。文章首先分析了应收账款在企业管理中的重要性,指出其对于提高企业竞争力、扩大销售和充分利用生产能力的作用。然后,以RH公司为例,探讨了公司应收账款管理的现状,并识别出合同管理、客户信用调查等方面的不足。在此基础上,文章提出了一系列改善措施,包括完善信用政策、改进业务流程、加强信用调查和提高账款回收力度。特别强调了建立专门的应收账款回收部门和流程的重要性,并建议在实际应用过程中进行持续优化。同时,文章也意识到企业面临复杂多变的内外部环境,因此提出的策略需要根据具体情况调整和优化。 针对财务管理领域的专业学生和从业者,本文提供了一个关于应收账款管理问题的案例研究,具有实际指导意义。文章还探讨了信用管理和征信体系在应收账款管理中的作用,强调了它们对于提升企业信用风险控制和市场竞争能力的重要性。通过对比国内外企业在应收账款管理上的差异,文章总结了适合中国企业实际环境的应收账款管理方法和策略。" 根据提供的文件内容,以下是详细的知识点: 1. 应收账款管理的重要性:应收账款作为企业的一项重要资产,其有效管理关系到企业的现金流、财务健康以及市场竞争力。不良的应收账款管理会导致资金链断裂、坏账损失增加等问题,严重影响企业的正常运营和长远发展。 2. 应收账款的信用风险:在信用交易日益频繁的商业环境中,企业必须对客户信用进行评估,以便采取合理的信用政策,降低信用风险。 3. 合同管理的薄弱环节:合同是应收账款管理的法律基础,严格的合同管理能够保障企业权益,减少因合同问题导致的应收账款风险。 4. 客户信用调查:了解客户的信用状况对于预测和控制应收账款风险至关重要。企业需要建立有效的客户信用调查机制,识别和筛选信用良好的客户。 5. 应收账款回收策略:企业应建立有效的账款回收机制,包括定期的账款跟进、逾期账款的催收等。同时,建立专门的应收账款回收部门可以提升回收效率。 6. 应收账款管理流程优化:通过改进企业内部管理流程,如简化审批流程、提高工作效率等措施,能够提升应收账款的管理效率。 7. 应收账款管理策略的调整和优化:由于企业的内外部环境复杂多变,因此制定的管理策略需要根据实际情况进行动态调整和持续优化。 8. 信用管理和征信体系的作用:建立和完善企业内部信用管理体系和征信体系,有助于企业更好地控制信用风险,并在市场竞争中占据有利地位。 9. 对比国内外应收账款管理实践:通过研究国内外企业在应收账款管理上的不同做法和经验,可以借鉴先进的管理理念和方法,提升国内企业的应收账款管理水平。 综上所述,本文深入探讨了应收账款管理的多个方面,为RH公司乃至其他同类型企业提供了应收账款管理的改进方向和策略,对于财务管理专业的教育和实践都具有重要的参考价值。
recommend-type

新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构

# 新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构 第一次拿到BingPi-M2开发板时,面对Tina Linux SDK里密密麻麻的文件夹,我完全不知道从哪下手。就像走进一个陌生的大仓库,每个货架上都堆满了工具和零件,却找不到操作手册。这种困惑持续了整整两天,直到我意识到——理解目录结构比死记硬背每个文件更重要。 ## 1. 为什么SDK目录结构如此重要 想象你正在组装一台复杂的模型飞机。如果所有零件都混在一个箱子里,你需要花大量时间寻找每个螺丝和面板。但如果有分门别类的隔层,标注着"机身部件"、"电子设备"、"紧固件",组装效率会成倍提升。Ti