Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说pycharm怎么开始写代码_pycharm安装好之后怎么使用,希望能够帮助你!!!。
深度学习如何入门?
本题已加入知乎圆桌 »「机器学习 · 学以致用」,更多「机器学习」相关话题讨论欢迎。
虽然深度学习和计算机专业看上去很相关,但实际上这完全是两个领域。二者的交集只有向量化计算、自动求导等少数技术。
深度学习本身的知识,小半部分是从论文、教程中学习到的数学原理、网络架构等理论知识,大半部分是靠亲手实践踩坑的实践经验。
因此,
不过,即使如此,学习编程对于深度学习来说还是很有必要的。对于初学者来说,运行自己编写的程序,才是近距离感受深度学习的最佳方式。等编程技术成熟了,才可以完全抛开编程,把精力专注于看最新的论文上。
在代码基础薄弱的前提下,想入门深度学习,最好不要去一上来就学高度封装的编程框架,看最新的论文,复现较新的代码。基础没打好就去学一些较难的东西,就像搭建空中楼阁一般,学习效率极低。我建议按照如下步骤从浅至深地学习:
上一节只讨论了入门深度学习的步骤,这里我再给出每步的一些学习资源。
如果有编程基础的话,去搜索引擎上随手一搜「Python 教程」,就可以找到许多合适的资料。比如说:
随便跑几个例子就学懂 Python 了。
如果编程经验不是难么丰富的话,除了参考上述简洁的资料之外,可以看讲解得更细致的视频、文字教程。从零学 Python 算是另一个话题了,可以去专门搜索一下这方面的学习路线。
对于初学者,选深度学习的教材时,最重要的其中的编程教学。优质的入门教材很多,比较出名的有:
最近知乎推出了学习平台「知学堂」,上述这些视频教程也能在这里找到。以后这个平台还会加入更多的教程。在「知学堂」里找深度学习的视频教程是一个比较便捷的选择。
文字教程也有很多,我所知道的只有
前言 - 《动手学深度学习》 文档
这份《动手学深度学习》的文档版。这份文字教程已经讲解得足够细致了。
这里,还推荐一下我自己的写的吴恩达《深度学习专项》的学习笔记和代码实战笔记:
周弈帆:我的「吴恩达深度学习笔记」汇总帖(附 18 个代码实战项目)
GitHub - SingleZombie/DL-Demos: Demos for deep learning
对于大多数的教程,无论制作得多么优秀,都无法提供足够的编程指导。这是因为编程更多要靠实践来学习,而难以通过课堂上的讲解来学习。如果非想通过上课来学习编程,最好的方式找一个助教,自己写代码碰到了问题,立刻去问助教。
我写的笔记就是起到一个「助教」的作用。尤其是在代码实战的笔记中,我基于 Python 和 NumPy 的基础函数,从某种意义上复现了《深度学习专项》中课后习题(比如实现全连接网络、正则化、Adam 优化器)的题目和解答,并对所有代码都进行了细致的讲解。哪怕是零基础的人,也能够看懂我写的代码和讲解。我相信,我写的这份笔记能够帮助大家在学习深度学习时少走一些弯路,尽快地通过复现底层构件来高效入门深度学习。
另外,如果只想快速上手深度学习,就不要浪费时间去看传统机器学习的参考书了。
对于 PyTorch 来说,其实最有用的就是官方的「Hello World」项目:
PyTorch Tutorials 1.11.0+cu102 documentation
,看完了就基本知道 PyTorch 的主要用法了。
同样,官方网站上也收录了很多具体任务的代码实现教程。一边看着教程里的代码,一边参考 API 文档,学起来还是很快的。
另一方面,除了学习框架的基本知识外,还可以直接去看一些现成的 PyTorch 项目,通过示例来学习。
这里,我十分推荐基于 PyTorch 的 OpenMMLab 项目,该开源项目复现了分类、检测、分割、生成等多个 CV 任务的前沿模型。这些 PyTorch 开源代码不见得是写得最好、最合理的,但起码是写得十分工整,读起来没什么问题的,可以作为初学者的学习对象。
以问题中的目标检测为例,可以去参考 MMDetection。参考一下官方文档,把项目安装好,学习一下代码库的基本用法,就可以去读源码了。读源码时,最简单的方法是使用文字搜索,找到对应模块的实现代码,比如去 MMDetection 里搜索"FasterRCNN"。同时,跑新接触的开源库时,可以先随便运行一个 Demo 项目,使用单步调试功能,看看代码的运行逻辑是怎么样的,各个模块之间是怎么调用的。
读开源代码时,千万不要因开源项目的复杂度而产生恐惧。代码都是人写的,都是一点一点从一些很基础的功能开始写起来的。看这些源代码时,一方面要从学习的角度,看看你不会写的地方,别人是怎么写的;另一方面,要自信地带着批判性的眼光,看看别人写的东西让你来写,你会怎么写得更好。带着这样的态度,不要畏惧,一点一点看,学习开源代码的效率其实是十分高的。
在编程基础较弱时上手深度学习,最重要的不是去看最新的内容,而是找一些对编程介绍得十分详细的深度学习教材。学完深度学习的基础知识后,再去专精 PyTorch 等编程框架。同时,随着编程知识、理论知识、对框架的熟悉度不断提升,可以慢慢开始接触最新的论文,并参考性地阅读新论文的开源代码。
也欢迎使用知乎新推出的「知学堂」APP。「知学堂」有全面的 Python 编程基础和深度学习的教学视频,足以满足深度学习入门的需求。
原文作者:周弈帆
目前,该付费内容的完整版仅支持在 App 中查看
🔗App 内查看
今日论文推荐
论文名:ShapeLLM: Universal 3D Object Understanding for Embodied Interaction
论文链接:https://arxiv.org/pdf/2402.17766.pdf
3D形状理解,作为在数字和物理世界中塑造智能系统 的基本能力,已经见证了图形、视觉、增强现实和具 身机器人的巨大进步。然而,要被现实世界的智能体 有效部署,必须满足几个关键标准:(i)需要捕获足够的 3D几何信息,以进行精确的空间和结构处理。(ii)模型应该被赋予与对象(通常是物理上的)具 体交互方式的基础知识,以便进行功能理解。(iii)需要一个通用接口作为信息 编码和解码之间的桥梁,这可以帮助翻译智能体反应 的高阶指令,如对话响应和具身反馈。
大型语言模型(llm)的最新进展已经在跨任务的基础知识和统一推理能力方面取得了 前所未有的成功。它使得 利用语言作为通用接口成为可能,从而使llm中嵌入的 综合常识知识能够增强对3D形状的理解。这在以物理 为基础的任务中尤其明显,在这些任务中,常识知识 的财富简化了对对象的功能、移动性和动态等的解释。然而,在将llm纳入3D对象理解(特别是依赖于精确几 何的具体化交互)时,上述挑战仍然存在,目前尚未 得到充分探索。
本文提出了第一个为具身交互设计的三维多模态大型语言模型(LLM) SHAPELLM,探索了一种基于 三维点云和语言的通用三维对象理解。SHAPELLM是 建立在一个改进的3D编码器上,通过扩展RE-CON到RECON++,受益于多视图图像蒸馏,增强几何 形状的理解。通过使用RECON++作为llm的3D点云输 入编码器,SHAPELLM在构建的指令遵循数据上进行 训练,并在我们新的人工评估基准3D MM-Vet上进行 测试。RECON++和SHAPELLM在3D几何图形理解和 语言统一的3D交互任务方面实现了最先进的性能,例 如具体化的视觉接地。
总体架构
这项工作的主要目标是通过使用LLM作为通用接口进行 交互式3D理解。从最近的视觉理解工作中汲取灵感, 所提出的SHAPELLM由一个预训练的3D编码器和一个 LLM组成,分别用于有效的3D表示学习和理解。具体来 说,我们采用LLaMA作为我们的LLM,建立在之前 工作成功的基础上。对于3D编码器,我们在 RECON的基础上提出了一种新的3D模型,命名为 RECON++,并对其进行了多项改进,因为3D理解通常需 要更多的信息,如精确的空间和多视图细节等。为了确 保与LLM输入的兼容性,从RECON++获得的3D对象的 表示在被馈送到LLM之前经历了一个线耳投影。为了进 一步提高低级几何理解,这有利于6自由度姿态估计等任 务,我们附加了由三维坐标线性投影获得的绝对位置编 码(APE)。此外,我们使用带有可学习提示的前缀调优 来自适应调节APE和RECON++表示的不同 语义。
如何缓解交互式3D理解数据甜点?
大多数已发表的3D数据通常以3D物体-字幕对的形式呈 现,缺乏互动风格。尽管一些同时进行的工作试 图构建交互式3D理解数据集,但问题和答案(问答)主要 基于注释的标题,通常是pro提供有限的视角而没有足够的细节。此外,这些作品通 常局限于语义理解,而没有考虑具身交互。为了解决这 些限制,我们的工作使用GPT-4V(视觉)构建了基于3D物 体的多视图图像的问答对。对于数据多样性,我们 明确引入了六个方面作为提示,如图3所示。在下文中, 我们分别提供了关于一般语义理解和具身对象理解的数 据收集和构建的细节。
Data Objaverse-LVIS和GAPartNet是数据源。Objaverse-LVIS涵盖了1156个LVIS类别,我们对每个 类别的前10个“喜欢”2个3D对象进行采样,并为每个样 本生成问答对。在滤除有噪声的问答后,我们获得了~ 45K指令遵循样本。我们使用来自GAPartNet的12个类别, 通过删除“Remote”来避免太多的小框,这导致从覆盖~ 1.1K个不同对象的~ 4K对象状态的~ 8K部分构建过滤的~ 30K问答样本。
一般语义理解这旨在增强模型在视觉识别、知识整合、 空间理解和其他方面的泛化能力。我们提示GPT4-V根据 从3D主题的四个不同视图捕获的图像在六个不同方面生 成问答,如图3所示。
具身物体理解全面理解部件级别的空间位置和语义,对于 促进具身场景中有效的物体抓取和交互至关重要。幸运的 是,GAPartNet提供了丰富的部件注释,包括语义和 姿态,这对构建主题的具身交互部件的指令调优数据很有 帮助。具体来说,给定一个3D对象,问题是基于其不同 部分的语义制定的,答案是在语义和3D位置上构建的。这些位置被表示为6自由度的3D边界框,以直线化的 Python多维列表格式表示,记为[[x1, y1, z1], [x2, y2, z2],…, [x8, y8, z8]],以满足llm文本对话响应的特点。对象的规范空间决定了坐标序列。使用边界框坐标利用固 有的空间关系,允许llm很容易地学习这些模式并生成准 确的输出坐标。这种方法可以为具身操纵提供特定的位置 信息。
RECON++:扩展3D表示学习
与物体的交互,如物体抓取,通常需要在多 层次和多粒度上准确感知3D形状信息。这对3D表示提出 了更高的要求,要求对3D几何的整体理解有更高的标准。
然而,现有的3D跨模态表示学习方法主要 是从单视图2D基础模型中提取高分辨率的物体特征, 导致单方面的形状理解。此外,它们通常采用多视图图 像作为数据增强策略,将学习到的表示强加于所有视图 的平均表示。因此,准确的3D形状信息是缺失的。最 近,RECON利用重建引导的对比来解决局部掩模 数据建模和全局跨模态对齐之间的模式差异。这在各种 任务中产生了显著的性能,包括迁移学习、零样本分类 和部分分割。然而,其潜力受到预训练数据稀缺的 阻碍。
为了解决上述局限性,本文提出了RE-CON++,并 进行了多项改进。首先,多视图图像查询标记协同理解 跨不同视图的3D对象的语义信息,包括传递RGB图像 和深度图。考虑到预训练数据在姿态方面的无序性,本 文提出了一种基于二部图匹配的跨模态对齐方法,隐 式学习3D物体的姿态估计。其次,我们扩大了RECON 的参数,并扩大了预训练数据集的规模,以 获得鲁棒的3D表示。
表示N为多视图图像的数量,Ii 是来自第i个视图的 图像特征,Qi 表示第i个视图的全局查询。继Carion等人 之后,我们以最低的代价搜索N个元素的最优排列σ:
其中Lmatch(Ii, Qσ(i))是第i个视图图像特征Ii 和匹配查询 Qσ(i) 之间的成对匹配成本,使用置换σ。在实践中,我们采用余弦相似度作为 匹配代价。通过这种方式,学习每个视图的查询,以从 3D点云中收集准确的3D形状信息。将本地3D点云编码 器和全局3D点云解码器的特征连接在一起,为多模态 llm的3D理解提供了全面的信息。
在表1中,我们首先通过对scanobject - jectnn和 ModelNet进行微调来评估自监督RECON++的表 示迁移学习能力,这是目前最具挑战性的两个3D对象 数据集。ScanObjectNN是来自真实场景数据集ScanNet 的约15K个3D物体点云的集合,涉及15个类别。ModelNet是从干净的3D CAD模型中收集的最经典的 3D对象数据集之一,其中包括覆盖40个类别的约12K 网格3D CAD模型。在PointGPT之后,我们采用中 间微调策略并使用后预训练在ShapeNetCore上通过自监督预训练学习到的通用 语义迁移阶段。为了进行公平的比较,我们的基础模型 和大型模型在层、隐藏大小和注意力头方面采用了与 PointGPT相同的架构。表1显示:(i) RECON++的表示性 能显著超过其他基线,达到了最先进的结果。(ii)特别 是,RECON++在最具挑战性的ScanObjectNN PB T50 RS基准上实现了95.25%的显着准确率,将Transformer 基线提高了+16.14%。
零样本3D开放世界识别与CLIP类似,所提出模型 对齐了语言和其他模态的特征空间,从而产生了零样本 开放世界识别能力。在表2中,我们比较了零样本3D开 放世界物体识别模型,以评估可泛化的识别能力。继 OpenShape之后,我们在ModelNet、 scanobject - jectnn和Objaverse-LVIS上进行了评 估。Objaverse-LVIS是一个涉及1156个LVIS类别的~ 47K个干净3D模型的基准。我们将RECON++与2D 推理方法、ShapeNet预训练方法和“en - sembles”数据 集预训练方法进行了比较。从表2可以得出结论:i)相比 2D推理和shapenet预训练方法相比,RECON++的性能 明显优于2D推理和shapenet预训练方法,这表明了3D点 云作为输入和扩展的必要性。ii)与在“集成”数据集上 训练的最先进的方法相比,re - con++在所有基准测试 中都表现出优越或同等的性能。值得注意的是, RECON++-L实现了显著的顶级1精度,在最具挑战性的 Objaverse-LVIS和ScanObjectNN基准测试中,分别比 Uni3D-L高+0.6%和+7.2%。
可视化结果
本文提出了一种具有泛化识别和具身交互理解能力的三 维多模态法学模型——SHAPELLM。我们首先提出了一 种新的三维点云编码器recon++,利用多视图蒸馏和缩放 三维表示学习,作为SHAPELLM的基础三维表示编码器。对构建的指令遵循数据进行3D视觉指令调优,以实现一 般和具身理解。还建立了一个3D评估基准3D MM-Vet, 用于评估具身交互场景中的4级能力,从基本感知到控 制语句生成不等。
2024年1月至2月,三位人工智能领域的顶级专家——Geoffrey Hinton, Yann LeCun和Karl Friston,在不同场合分享了他们对人工智能未来发展的看法。以下是他们观点的总结:
理解能力
安全风险
发展方向
结论
三位大佬对人工智能未来发展的看法存在分歧,但都认为人工智能是一项具有巨大潜力的技术,需要谨慎发展和应用。未来,人工智能将如何发展?它将给人类社会带来哪些影响?这些问题值得我们深思。
参考文献:
https://www.bilibili.com/video/BV1ZZ421h7by/?spm_id_from=333.337.search-card.all.click
https://www.youtube.com/watch?v=iruyNY5T5Mo
https://www.youtube.com/watch?v=SYQ8Siwy8Ic
END
AI武者士 -- 集合智能,自由能原理,通向智能涌现的第n+1条路
每个人的路线图都不一样。看了西瓜书南瓜书,鱼书,吴恩达视频,李沐动手学深度学习后,我总结如下:
1,入门最好少看书,多看 csdn 上的帖子(这样说政治不正确,但是我觉得实用),搜一搜深度学习, BP 神经网络,CNN ,rnn 这些关键词,通过一个例子快速建立概念
2,其他书籍作为补充阅读工具书查阅即可,查漏补缺,建议顺序 西瓜书南瓜书(bp 网络推导简短清晰)---鱼书---动手学
概率频率分布,是指一个事件的所有可能的结果,以及其结果对应的概率的集合。
某些时候,预期值给不了我们太多的信息。
而概率分布提供了每个可能取值的相对概率的详细描述,使我们能够更好地理解和处理不确定性。
假设有两个六面骰子,我们想知道,投掷这两个骰子一次,得到的两个骰子的点数之和的预期值是多少?
这个事件符合计算预期值里提到的数值变量计算的方法。
因此,我们应该将每一个点数之和乘以投掷出这个点数之和的概率,然后将每一个计算出来的概率值进行累加。
计算公式如下:
E(A)= P(2).2 + P(3).3+... + P(12).12。
我们可以把所有的组合都列出来:
点数之和为2的组合:(1,1)
点数之和为3的组合:(1,2), (2,1)
点数之和为4的组合:(1,3), (2,2), (3,1)
点数之和为5的组合:(1,4), (2,3), (3,2), (4,1)
点数之和为6的组合:(1,5), (2,4), (3,3), (4,2), (5,1)
点数之和为7的组合:(1,6), (2,5), (3,4), (4,3), (5,2), (6,1)
点数之和为8的组合:(2,6), (3,5), (4,4), (5,3), (6,2)
点数之和为9的组合:(3,6), (4,5), (5,4), (6,3)
点数之和为10的组合:(4,6), (5,5), (6,4)
点数之和为11的组合:(5,6), (6,5)
点数之和为12的组合:(6,6)
能够看到,点数之和为2以及12的概率是1/36,点数之和为3以及11的概率是2/36。
依次类推,将每个点数之和的概率以及点数之和的数值代入公式。
E(A)的最终结果为7。
虽然通过预期值计算,我们知道了预期值为7,但是预期值本身并不提供关于每个具体点数之和的概率信息。
它并没有直接告诉我们其它的点数之和的概率是多少,也未展示其他点数之和的概率分布情况。
实际上,你可能得到2、12的机会较小,而得到7的机会较大。
只有预期值的话,无法揭示这种点数之和的分布特征。
又或者,你可能想要知道在点数之和为8和点数之和为11之间的区域内的概率,以便更好地制定下注策略。
只看预期值,可能无法提供这种局部的概率信息。
为了更为详细、清晰的信息,以及了解各个点数之和的概率走势,我们需要创建一个概率分布。
概率分布提供了对每个可能取值的相对概率的详细描述。
在下面这个图里,我们能看到每个点数之和,以及它们的概率,出现的频率。
将这12种点数之和以及它们的概率放在一起的集合,它就是一个概率频率分布。
我们可以通过表格或图表来表示这个概率频率分布。
X轴代表各种可能出现的点数之和。
Y轴代表每个点数之和出现的概率。
这样,我们就可以选择最高概率的一段区间进行预测,例如6,7,8的区间,而不是仅仅只依靠一个预期值来预测。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。