当前位置:首页 » 编程软件 » 斯坦福大学编程方法

斯坦福大学编程方法

发布时间: 2023-01-20 17:06:04

‘壹’ 在哪里能够找到国外优秀大学的计算机公开课

可以查看杜克大学的公开课,MOOC等
哈佛大学公开课:2005年计算机科学(15讲)
http://www.manfen.net/thread-14394-1-1.html
哈佛大学公开课:2006年计算机科学(32讲)
http://www.manfen.net/thread-14395-1-1.html
哈佛大学公开课:计算机科学CS50(20讲)
http://www.manfen.net/thread-14396-1-1.html
哈佛大学公开课:计算机科学导论(22讲)
http://www.manfen.net/thread-14397-1-1.html
麻省理工学院公开课:计算机科学及编程导论(24讲)
http://www.manfen.net/thread-16474-1-1.html
斯坦福大学公开课:人与计算机的互动(10讲)
http://www.manfen.net/thread-16443-1-1.html
斯坦福大学开放课程: 抽象编程
http://www.manfen.net/thread-6822-1-1.html
斯坦福大学公开课:编程范式(27讲)
http://www.manfen.net/thread-16435-1-1.html
斯坦福大学公开课:编程方法学(28讲)
http://www.manfen.net/thread-16436-1-1.html

‘贰’ 如果大学作业做不出来是不是智商问题

高中生就看这种课程,你确实很不错了~
好好研究一下会做出来的,不就是多做几个循环么,别急,一个小时做不出,做一下午吧~~

‘叁’ 放弃手工标记数据,斯坦福大学开发弱监督编程范式Snorkel

手工标记大量数据始终是开发机器学习的一大瓶颈。斯坦福AI Lab的研究人员探讨了一种通过编程方式生成训练数据的“弱监督”范式,并介绍了他们的开源Snorkel框架。

近年来,机器学习 (ML) 对现实世界的影响越来越大。这在很大程度上是由于深度学习模型的出现,使得从业者可以在基准数据集上获得 state-of-the-art 的分数,而无需任何手工特征设计。考虑到诸如 TensorFlow 和 PyTorch 等多种开源 ML 框架的可用性,以及大量可用的最先进的模型,可以说,高质量的 ML 模型现在几乎成为一种商品化资源了。然而,有一个隐藏的问题:这些模型依赖于大量手工标记的训练数据。

这些手工标记的训练集创建起来既昂贵又耗时 —— 通常需要几个月甚至几年的时间、花费大量人力来收集、清理和调试 —— 尤其是在需要领域专业知识的情况下。除此之外,任务经常会在现实世界中发生变化和演变。例如,标记指南、粒度或下游用例都经常发生变化,需要重新标记 (例如,不要只将评论分类为正面或负面,还要引入一个中性类别)。

由于这些原因,从业者越来越多地转向一种较弱的监管形式,例如利用外部知识库、模式 / 规则或其他分类器启发式地生成训练数据。从本质上来讲,这些都是以编程方式生成训练数据的方法,或者更简洁地说,编程训练数据 (programming training data)。

在本文中,我们首先回顾了 ML 中由标记训练数据驱动的一些领域,然后描述了我们对建模和整合各种监督源的研究。我们还讨论了为大规模多任务机制构建数据管理系统的设想,这种系统使用数十或数百个弱监督的动态任务,以复杂、多样的方式交互。

回顾:如何获得更多有标签的训练数据?

ML 中的许多传统研究方法也同样受到对标记训练数据的需求的推动。我们首先将这些方法与弱监督方法 (weak supervision) 区分开来:弱监督是利用来自主题领域专家(subject matter experts,简称 SME) 的更高级别和 / 或更嘈杂的输入。

目前主流方法的一个关键问题是,由领域专家直接给大量数据加标签是很昂贵的:例如,为医学成像研究构建大型数据集更加困难,因为跟研究生不同,放射科医生可不会接受一点小恩小惠就愿意为你标记数据。因此,在 ML 中,许多经过深入研究的工作线都是由于获取标记训练数据的瓶颈所致:

在主动学习 (active learning) 中,目标是让领域专家为估计对模型最有价值的数据点贴标签,从而更有效地利用领域专家。在标准的监督学习设置中,这意味着选择要标记的新数据点。例如,我们可以选择靠近当前模型决策边界的乳房 X 线照片,并要求放射科医生仅给这些照片进行标记。但是,我们也可以只要求对这些数据点进行较弱的监督,在这种情况下,主动学习与弱监督是完美互补的;这方面的例子可以参考 (Druck, settle, and McCallum 2009)。

在半监督学习 (semi-supervised learning ) 设置中,我们的目标是用一个小的标记训练集和一个更大的未标记数据集。然后使用关于平滑度、低维结构或距离度量的假设来利用未标记数据 (作为生成模型的一部分,或作为一个判别模型的正则项,或学习一个紧凑的数据表示);参考阅读见 (Chapelle, Scholkopf, and Zien 2009)。从广义上讲,半监督学习的理念不是从 SME 那里寻求更多输入,而是利用领域和任务不可知的假设来利用未经标记的数据,而这些数据通常可以以低成本大量获得。最近的方法使用生成对抗网络 (Salimans et al. 2016)、启发式转换模型 (Laine and Aila 2016) 和其他生成方法来有效地帮助规范化决策边界。

在典型的迁移学习 (transfer learning )设置 中,目标是将一个或多个已经在不同数据集上训练过的模型应用于我们的数据集和任务;相关的综述见 (Pan 和 Yang 2010)。例如,我们可能已经有身体其他部位肿瘤的大型训练集,并在此基础上训练了分类器,然后希望将其应用到我们的乳房 X 光检查任务中。在当今的深度学习社区中,一种常见的迁移学习方法是在一个大数据集上对模型进行 “预训练”,然后在感兴趣的任务上对其进行 “微调”。另一个相关的领域是多任务学习 (multi-task learning),其中几个任务是共同学习的 (Caruna 1993; Augenstein, Vlachos, and Maynard 2015)。

上述范例可能让我们得以不用向领域专家合作者寻求额外的训练标签。然而,对某些数据进行标记是不可避免的。如果我们要求他们提供各种类型的更高级、或不那么精确的监督形式,这些形式可以更快、更简便地获取,会怎么样呢?例如,如果我们的放射科医生可以花一个下午的时间来标记一组启发式的资源或其他资源,如果处理得当,这些资源可以有效地替代成千上万的训练标签,那会怎么样呢 ?

将领域知识注入 AI

从 历史 的角度来看,试图 “编程” 人工智能 (即注入领域知识) 并不是什么新鲜想法,但现在提出这个问题的主要新颖之处在于,AI 从未像现在这样强大,同时在可解释性和可控制性方面,它还是一个 “黑盒”。

在 20 世纪 70 年代和 80 年代,AI 的重点是专家系统,它将来自领域专家的手工策划的事实和规则的知识库结合起来,并使用推理引擎来应用它们。20 世纪 90 年代,ML 开始作为将知识集成到 AI 系统的工具获得成功,并承诺以强大而灵活的方式从标记的训练数据自动实现这一点。

经典的 (非表示学习)ML 方法通常有两个领域专家输入端口。首先,这些模型通常比现代模型的复杂度要低得多,这意味着可以使用更少的手工标记数据。其次,这些模型依赖于手工设计的特性,这些特性为编码、修改和与模型的数据基本表示形式交互提供了一种直接的方法。然而,特性工程不管在过去还是现在通常都被认为是 ML 专家的任务,他们通常会花费整个博士生涯来为特定的任务设计特性。

进入深度学习模型:由于它们具有跨许多领域和任务自动学习表示的强大能力,它们在很大程度上避免了特性工程的任务。然而,它们大部分是完整的黑盒子,除了标记大量的训练集和调整网络架构外,普通开发人员对它们几乎没有控制权。在许多意义上,它们代表了旧的专家系统脆弱但易于控制的规则的对立面 —— 它们灵活但难以控制。

这使我们从一个略微不同的角度回到了最初的问题:我们如何利用我们的领域知识或任务专业知识来编写现代深度学习模型?有没有办法将旧的基于规则的专家系统的直接性与这些现代 ML 方法的灵活性和强大功能结合起来?

代码作为监督:通过编程训练 ML

Snorkel 是我们为支持和 探索 这种与 ML 的新型交互而构建的一个系统。在 Snorkel中,我们不使用手工标记的训练数据,而是要求用户编写标记函数 (labeling functions, LF),即用于标记未标记数据子集的黑盒代码片段。

然后,我们可以使用一组这样的 LF 来为 ML 模型标记训练数据。因为标记函数只是任意的代码片段,所以它们可以对任意信号进行编码:模式、启发式、外部数据资源、来自群众工作者的嘈杂标签、弱分类器等等。而且,作为代码,我们可以获得所有其他相关的好处,比如模块化、可重用性和可调试性。例如,如果我们的建模目标发生了变化,我们可以调整标记函数来快速适应!

一个问题是,标记函数会产生有噪声的输出,这些输出可能会重叠和冲突,从而产生不太理想的训练标签。在 Snorkel 中,我们使用数据编程方法对这些标签进行去噪,该方法包括三个步骤:

1. 我们将标记函数应用于未标记的数据。

2. 我们使用一个生成模型来在没有任何标记数据的条件下学习标记函数的准确性,并相应地对它们的输出进行加权。我们甚至可以自动学习它们的关联结构。

3. 生成模型输出一组概率训练标签,我们可以使用这些标签来训练一个强大、灵活的判别模型 (如深度神经网络),它将泛化到标记函数表示的信号之外。

可以认为,这整个 pipeline 为 “编程”ML 模型提供了一种简单、稳健且与模型无关的方法!

标记函数 (Labeling Functions)

从生物医学文献中提取结构化信息是最能激励我们的应用之一:大量有用的信息被有效地锁在数百万篇科学论文的密集非结构化文本中。我们希望用机器学习来提取这些信息,进而使用这些信息来诊断遗传性疾病。

考虑这样一个任务:从科学文献中提取某种化学 - 疾病的关系。我们可能没有足够大的标记训练数据集来完成这项任务。然而,在生物医学领域,存在着丰富的知识本体、词典等资源,其中包括各种化学与疾病名称数据、各种类型的已知化学 - 疾病关系数据库等,我们可以利用这些资源来为我们的任务提供弱监督。此外,我们还可以与生物学领域的合作者一起提出一系列特定于任务的启发式、正则表达式模式、经验法则和负标签生成策略。

作为一种表示载体的生成模型

在我们的方法中,我们认为标记函数隐含地描述了一个生成模型。让我们来快速复习一下:给定数据点 x,以及我们想要预测的未知标签 y,在判别方法中,我们直接对P(y|x) 建模,而在生成方法中,我们对 P(x,y) = P(x|y)P(y) 建模。在我们的例子中,我们建模一个训练集标记的过程 P(L,y),其中 L 是由对象 x 的标记函数生成的标签,y 是对应的 (未知的) 真实标签。通过学习生成模型,并直接估计 P(L|y),我们本质上是在根据它们如何重叠和冲突来学习标记函数的相对准确性 (注意,我们不需要知道 y!)

我们使用这个估计的生成模型在标签函数上训练一个噪声感知版本的最终判别模型。为了做到这一点,生成模型推断出训练数据的未知标签的概率,然后我们最小化关于这些概率的判别模型的预期损失。

估计这些生成模型的参数可能非常棘手,特别是当使用的标记函数之间存在统计依赖性时。在 Data Programming: Creating Large Training Sets, Quickly(https://arxiv.org/abs/1605.07723) 这篇论文中,我们证明了给定足够的标记函数的条件下,可以得到与监督方法相同的 asymptotic scaling。我们还研究了如何在不使用标记数据的情况下学习标记函数之间的相关性,以及如何显着提高性能。

Snorkel:一个开源的框架

在我们最近发表的关于 Snorkel 的论文 (https://arxiv.org/abs/1711.10160) 中,我们发现在各种实际应用中,这种与现代 ML 模型交互的新方法非常有效!包括:

1. 在一个关于 Snorkel 的研讨会上,我们进行了一项用户研究,比较了教 SMEs 使用Snorkel 的效率,以及花同样的时间进行纯手工标记数据的效率。我们发现,使用Snorkel 构建模型不仅快了 2.8 倍,而且平均预测性能也提高了 45.5%。

2. 在与斯坦福大学、美国退伍军人事务部和美国食品和药物管理局的研究人员合作的两个真实的文本关系提取任务,以及其他四个基准文本和图像任务中,我们发现,与baseline 技术相比,Snorkel 平均提高了 132%。

3. 我们 探索 了如何对用户提供的标记函数建模的新的权衡空间,从而得到了一个基于规则的优化器,用于加速迭代开发周期。

下一步:大规模多任务弱监管

我们实验室正在进行各种努力,将 Snorkel 设想的弱监督交互模型扩展到其他模式,如格式丰富的数据和图像、使用自然语言的监督任务和自动生成标签函数!

在技术方面,我们感兴趣的是扩展 Snorkel 的核心数据编程模型,使其更容易指定具有更高级别接口(如自然语言) 的标记函数,以及结合其他类型的弱监督 (如数据增强)。

多任务学习 (MTL) 场景的普及也引发了这样一个问题:当嘈杂的、可能相关的标签源现在要标记多个相关任务时会发生什么?我们是否可以通过对这些任务进行联合建模来获益?我们在一个新的多任务感知版本的 Snorkel,即 Snorkel MeTaL 中解决了这些问题,它可以支持多任务弱监管源,为一个或多个相关任务提供噪声标签。

我们考虑的一个例子是设置具有不同粒度的标签源。例如,假设我们打算训练一个细粒度的命名实体识别 (NER) 模型来标记特定类型的人和位置,并且我们有一些细粒度的嘈杂标签,例如标记 “律师” 与 “医生”,或 “银行” 与 “医院”;以及有些是粗粒度的,例如标记 “人” 与 “地点”。通过将这些资源表示为标记不同层次相关的任务,我们可以联合建模它们的准确性,并重新加权和组合它们的多任务标签,从而创建更清晰、智能聚合的多任务训练数据,从而提高最终 MTL 模型的性能。

我们相信,为 MTL 构建数据管理系统最激动人心的方面将围绕大规模多任务机制(massively multi-task regime),在这种机制中,数十到数百个弱监督 (因而高度动态)的任务以复杂、多样的方式交互。

虽然迄今为止大多数 MTL 工作都考虑最多处理由静态手工标记训练集定义的少数几项任务,但世界正在迅速发展成组织 (无论是大公司、学术实验室还是在线社区) 都要维护数以百计的弱监督、快速变化且相互依赖的建模任务。此外,由于这些任务是弱监督的,开发人员可以在数小时或数天内 (而不是数月或数年) 添加、删除或更改任务 (即训练集),这可能需要重新训练整个模型。

在最近的一篇论文 The Role of Massively Multi-Task and Weak Supervision in Software 2.0 (http://cidrdb.org/cidr2019/papers/p58-ratner-cidr19.pdf) 中,我们概述了针对上述问题的一些初步想法,设想了一个大规模的多任务设置,其中 MTL 模型有效地用作一个训练由不同开发人员弱标记的数据的中央存储库,然后组合在一个中央“mother” 多任务模型中。

不管确切的形式因素是什么,很明显,MTL 技术在未来有许多令人兴奋的进展 —— 不仅是新的模型架构,而且还与迁移学习方法、新的弱监督方法、新的软件开发和系统范例日益统一。

原文:

https://ai.stanford.e/blog/weak-supervision/

Snorkel:

http://snorkel.stanford.e/

欢迎同时关注微信公众号: IT 科技 森

每天分享IT小技巧、 科技 数码新闻!

‘肆’ Nature:从FortranAlexNet代码改变了科学界

选自Nature

作者:Jeffrey M. Perkel

机器之心编译

机器之心编辑部

2019 年,“事件视界望远镜”团队拍下了第一张黑洞照片。这张照片并非传统意义上的照片,而是计算得来的——将美国、墨西哥、智利、西班牙和南极多台射电望远镜捕捉到的数据进行数学转换。该团队公开了所用代码,使科学社区可以看到,并基于此做进一步的 探索 。

而这逐渐成为一种普遍模式。从天文学到动物学,每一个伟大的现代科学发现背后都有计算机的身影。斯坦福大学计算生物学家、2013 年诺贝尔化学奖获得主 Michael Levitt 表示,现在的笔记本电脑在内存和时钟速度方面是 1967 年其实验室计算机的一万倍。“今天,我们拥有大量算力。但问题是,这仍然需要人类的思考。”

如果没有能够处理研究问题的软件以及知道如何编写和使用软件的研究人员,计算机再强大也是无用。“现在的研究与软件紧密相关,软件已经渗透到科研的方方面面。”软件可持续性研究所(Software Sustainability Institute)负责人 Neil Chue Hong 如是说。

最近,Nature 上的一篇文章试图揭示科学发现背后的重要代码,正是它们在过去几十年中改变了科研领域。这篇文章介绍了对科学界带来重大影响的十个软件工具,其中就包括与人工智能领域密切相关的 Fortran 编译器、arXiv、IPython Notebook、AlexNet 等。

语言先驱:Fortran 编译器(1957)

首批出现的现代计算机对用户并不友好。编程实际上是由手工完成的,通过电线连接一排排电路。后来的机器语言和汇编语言允许用户使用代码进行计算机编程,但这两种语言依然要求使用者对计算机架构有深入了解,导致很多科学家无法使用它们。

20 世纪 50 年代,随着符号语言的发展,尤其是“公式翻译”语言 Fortran 的出现,上述境况发生了改变。Fortran 语言由 IBM 的约翰 · 巴科斯(John Backus)团队开发。借助 Fortran,用户可以使用 x = 3 + 5 等人类可读的指令进行计算机编程,之后编译器将这类指令转化为快速高效的机器码。

这台使用 Fortran 编译器编程的 CDC 3600 计算机于 1963 年移送至美国国家大气研究中心。(图源:美国大气科学研究大学联盟 / 科学图片库。)

在早期,编程人员使用穿孔卡片(punch card)输入代码,复杂的模拟可能需要数万张穿孔卡片。不过,Fortran 使得并非计算机科学家的研究者也能够进行编程。普林斯顿大学气候学家 Syukuro Manabe 表示:“我们第一次靠自己进行编程。”他和同事使用 Fortran 语言开发了首批成功的气候模型之一。

60 多年过去了,Fortran 依然广泛应用于气候建模、流体动力学、计算机化学,以及其他涉及复杂线性代数并需要强大计算机快速处理数字的学科。Fortran 代码运行速度很快,仍然有很多编程人员知道如何写 Fortran。古老的 Fortran 代码库依然活跃在世界各地的实验室和超级计算机上。

信号处理器:快速傅里叶变换(1965)

当天文学家扫描天空时,他们捕捉到了随时间变化的复杂信号的杂音。为了理解这些无线电波的性质,他们需要观察这些信号作为频率函数的样子。一种被称为傅里叶变换(Fourier transform)的数学过程允许科学家实现这一点。但问题在于傅里叶变换并不高效,对大小为 N 的数据集它需要进行 N 次运算。

1965 年,美国数学家 James Cooley 和 John Tukey 开发了一种加速傅里叶变换过程的方法。借助递归(recursion)这种“分而治之”的编程方法(其中算法可以实现重复地再运用),快速傅里叶变换(fast Fourier transform, FFT)将计算傅里叶变换问题简化为 N log_2(N) 个步骤。速度也随着 N 的增加而提升。对于 1000 个点,速度提升约 100 倍;对于 100 万个点,速度提升约 5 万倍。

牛津大学数学家 Nick Trefethen 表示,FFT 的发现实际上是一种“再发现”,因为德国数学家卡尔 · 弗里德里希 · 高斯在 1805 年就完成了该发现,不过从未发表。但是,James Cooley 和 John Tukey 开启了 FFT 在数字信号处理、图像分析和结构生物学等领域中的应用。Trefethen 认为 FFT“是应用数学与工程领域伟大的发现之一。”FFT 已经在代码中实现了很多次,其中一种流行的变体是 FFTW(“西方最快的傅里叶变换”)。

默奇森天文望远镜,使用快速傅里叶变换来收集数据。

劳伦斯伯克利国家实验室(Lawrence Berkeley National Laboratory)分子生物物理学和综合生物成像部门主任 Paul Adams 回忆称,当他在 1995 年改进细菌蛋白 GroEL 的结构时,即使使用 FFT 和一台超级计算机,也需要“很多很多个小时,甚至是几天”的计算。但要没有 FFT,很难想象这件事要怎么做,花的时间将难以估量。

线性代数运算标准接口:BLAS(1979)

科学计算通常涉及使用向量和矩阵的数学运算,这些运算相对简单,但计算量大。20 世纪 70 年代,学界并没有出现一套普遍认可的执行此类运算的工具。因此,科研工作者不得不花费时间设计高效的代码来做基础的数学运算,导致无法专注于科学问题本身。

编程世界需要一个标准。1979 年,基础线性代数子程序库(Basic Linear Algebra Subprograms, BLAS)应运而生。直到 1990 年,该标准仍然在发展变化,定义了数十条涵盖向量和矩阵运算的基本程序。

田纳西州大学计算机科学家、BLAS 开发团队成员之一 Jack Dongarra 表示,BLAS 实际上将矩阵和向量运算简化成了像加减法一样的基础计算单元。

Cray-1 超级计算机。(图源:科学 历史 图像 / Alamy)

德州大学奥斯汀分校计算机科学家 Robert van de Geijn 表示:“BLAS 可能是为科学计算而定义的最重要接口。”除了为常用函数提供标准名称之外,研究者可以确保基于 BLAS 的代码能够以相同的方式在任何计算机上运行。该标准也使得计算机制造商能够优化 BLAS 实现,以实现硬件上的快速运行。

40 多年来,BLAS 代表了科学计算堆栈的核心,使得科学软件持续发展。乔治华盛顿大学机械与航空航天工程师 Lorena Barba 将 BLAS 称为“五层代码内的核心机制”。

预印本平台:arXiv.org(1991)

20 世纪 80 年代末,高能物理领域的研究者往往会把自己提交的论文邮寄给同行审阅,这是一种礼仪,但只邮寄给少数几个人。“那些处于食物链底端的人依赖于顶端人的施舍,这往往会把非精英机构中有抱负的研究者完全排除在特权圈之外,”物理学家 Paul Ginsparg 曾在 2011 年的一篇文章中写道。

1991 年,洛斯阿拉莫斯国家实验室(Los Alamos National Laboratory)的 Ginsparg 写了一个电子邮件自动回复器,以建立公平的竞争环境。邮件订阅者每天都会收到一份预印本列表,每份论文都带有标识符。如此一来,世界各地的用户都可以通过一封电子邮件提交或检索来自上述实验室计算机系统的论文。

Ginsparg 原本计划将文章保留三个月,将范围限制在高能物理社区,但他的同事劝他去掉了这些限制。“就是在那一刻,它从布告栏转变成了档案库,”Ginsparg 表示。在这之后,大批论文开始涌入,其学科之广远远超出了 Ginsparg 的预期。1993 年,Ginsparg 把这个系统移植到互联网上。1998 年,他正式将该系统命名为 arXiv.org。

如今,30 岁的 arXiv 收录了 180 万份预印本文章,且全部免费阅读,其每月论文提交量超过 15000 份,每月下载量高达 3000 万次。“不难看出 arXiv 为何如此受欢迎,”Nature Photonics 的编辑曾表示,“该系统为研究者提供了一种快捷、方便的科研方式,可以告诉大家你在做什么、什么时间做的,省去了传统期刊同行评审的繁琐。”

该网站的成功还对生物学、医学、 社会 学等其他学科类似存储库的建立起到了助推作用,成千上万份新冠病毒相关研究预印本的发布就是一个例证。

数据 探索 器:IPython Notebook (2011)

Fernando Pérez 在 2001 年决定“探寻拖延症”,当时他是一名研究生,决定采用 Python 的核心组件。

Python 是一种解释型语言,意味着程序会一行一行地执行。编程人员可以使用一种被称为“读取 - 求值 - 输出循环(REPL)”的计算型调用和响应(call-and-response)工具,他们可以键入代码,然后由解释器执行代码。REPL 允许快速 探索 和迭代,但 Pérez 指出 Python 并不是为科学构建的。例如,它不允许用户轻松地预加载代码模块或保持数据可视化的打开状态。因此 Pérez 创建了自己的版本。

2001 年 12 月,Pérez 发布了交互式 Python 解释器 IPython,它共有 259 行代码。10 年后,Pérez 和物理学家 Brian Granger、数学家 Evan Patterson 合作,将该工具迁移到 Web 浏览器,创建了 IPython Notebook,掀起了一场数据科学的革命。

和其他计算型 notebook 一样,IPython Notebook 将代码、结果、图形和文本组合到了单个文档中。但与其他此类型项目不同的是,IPython Notebook 是开源的,欢迎广大社区开发者为其发展做出贡献,并且支持 Python 这种科学家常用的语言。2014 年,IPython 演变成 Project Jupyter,支持约 100 种语言,并允许用户像在自己计算机上一样轻松地在远程超级计算机上 探索 数据。

Nature 在 2018 年指出:“对数据科学家而言,Jupyter 已经成为一种实际标准”。那时,GitHub 上已经有 250 万个 Jupyter notebook,如今已有近一千万个,其中包括 2016 年发现引力波和 2019 年黑洞成像的记录。Pérez 表示:“我们能为这些项目做出一点贡献也是非常有意义的”。

快速学习器:AlexNet(2012)

人工智能(AI)可分为两类,一类使用编码规则,另一类让计算机通过模拟大脑的神经结构来“学习”。多伦多大学计算机科学家、图灵奖获得者 Geoffrey Hinton 表示:“几十年来,人工智能研究者一直将第二种研究方法视为‘荒谬’”。2012 年,Hinton 的研究生 Alex Krizhevsky 和 Ilya Sutskever 证明了事实并非如此。

在当年的 ImageNet 的年度竞赛上,研究者们被要求在包含 100 万张日常物品图像的数据库上训练 AI,然后在另一个图像集上测试算法。Hinton 表示:“在当时,最佳算法会在 1/4 的图像上出现分类错误”。Krizhevsky 和 Sutskever 开发的 AlexNet 是一种基于神经网络的深度学习算法,该算法将误差率降至 16%。Hinton 表示:“我们几乎将误差率降低了一半”。

Hinton 认为,该团队在 2012 年的成功反映出足够大的训练数据集、出色的编程和图形处理单元(最初为了提高计算机视频性能的处理器)新力量的结合。他表示:“突然之间,我们就能够将该算法的速度提高 30 倍,或者说可以学习 30 倍的数据”。

Hinton 表示真正的算法突破实际上发生在 3 年前。当时他的实验室创建了一个比几十年来不断完善的传统 AI 更能准确识别语音的神经网络。虽然准确率只稍微提升了一点,但已值得被记住。

AlexNet 及相关研究的成功带来了实验室、临床等多个领域深度学习的兴起。它让手机能够理解语音查询,也让图像分析工具能够轻松地从显微照片中挑选出细胞。这就是 AlexNet 在改变科学、改变世界的工具中占有一席之地的原因。

‘伍’ eclipse问题

去修改下你的eclipse.ini,把里面加上你原来使用的jdk路径,格式如下 :
-vm
C:\..\java\jdk1.6.....;

如上方法去试试,也许能帮到你!

‘陆’ 求Karel机器人文件

http://www.stanford.e/class/cs106a/ 中resource中可以下载到

‘柒’ 一个C语言的问题,求解,挺简单的

浮点数在计算机的二进制里面是不能精确表示的,用0.1去转换二进制的过程你会看到永远都有余数。
实际上0.1在计算机里面存储为 3DCCCCCD 十六进制,编译器的debug查看内存就知道了
http://babbage.cs.qc.e/IEEE-754/32bit.html
你可以到这里查看这个十六进制实际上十进制是 0.10000000149011612
也就是说n在加的过程中不是精确的加的0.1,所以就不可能精确的加到10,n!=10永远都满足,就死循环了。
下面这个代码打印出来d在计算机中实际表示的值,和在计算循环相加过程中n变化的情况。里面n确实就没有和10相等过。实际的d在计算机中也不是精确的0.1
#include <stdio.h>
void main(void)
{
float n, d = 0.1;
printf("%.20f\n", d);
for(n = 9;n <= 20;n += d)
printf("%.20f\n",n);
}

‘捌’ 《自然》评选改变科学的10个计算机代码项目

从Fortran到arXiv.org,这些计算机编码和平台让生物学、气候科学和物理学等学科的发展达到了真正“日新月异”的速度。

2019年,事件视界望远镜团队让世界首次看到了黑洞的样子。不过,研究人员公布的这张发光环形物体的图像并不是传统的图片,而是经过计算获得的。利用位于美国、墨西哥、智利、西班牙和南极地区的射电望远镜所得到的数据,研究人员进行了数学转换,最终合成了这张标志性的图片。研究团队还发布了实现这一壮举所用的编程代码,并撰文记录这一发现,其他研究者也可以在此基础上进一步加以分析。

这种模式正变得越来越普遍。从天文学到动物学,在现代每一项重大科学发现的背后,都有计算机的参与。美国斯坦福大学的计算生物学家迈克尔·莱维特因“为复杂化学系统创造了多尺度模型”与另两位研究者分享了2013年诺贝尔化学奖,他指出,今天的笔记本电脑内存和时钟速度是他在1967年开始获奖工作时实验室制造的计算机的1万倍。“我们今天确实拥有相当可观的计算能力,”他说,“问题在于,我们仍然需要思考。”

如果没有能够解决研究问题的软件,以及知道如何编写并使用软件的研究人员,一台计算机无论再强大,也是毫无用处的。如今的科学研究从根本上已经与计算机软件联系在一起,后者已经渗透到研究工作的各个方面。近日,《自然》(Nature)杂志将目光投向了幕后,着眼于过去几十年来改变科学研究的关键计算机代码,并列出了其中10个关键的计算机项目。

这台CDC 3600型计算机于1963年交付给位于科罗拉多州博尔德的国家大气研究中心,研究者在Fortran编译器的帮助对其进行了编程

语言先驱:Fortran编译器(1957年)

最初的现代计算机并不容易操作。当时的编程实际上是手工将电线连接成一排排电路来实现的。后来出现了机器语言和汇编语言,允许用户用代码为计算机编程,但这两种语言都需要对计算机的架构有深入的了解,使得许多科学家难以掌握。

20世纪50年代,随着符号语言的发展,特别是由约翰·巴克斯及其团队在加州圣何塞的IBM开发的“公式翻译”语言Fortran,这种情况发生了变化。利用Fortran,用户可以用人类可读的指令来编程,例如x = 3 + 5。然后由编译器将这些指令转换成快速、高效的机器代码。

不过,这一过程仍然很不容易。早期的程序员使用打孔卡来输入代码,而复杂的模拟可能需要数万张打孔卡。尽管如此,新泽西州普林斯顿大学的气候学家真锅淑郎(Syukuro Manabe)还是指出,Fortran让非计算机科学家也能编程,“这是我们第一次能够自己给计算机编程”。他和同事们利用这种语言开发的气候模型是最早取得成功的模型之一。

Fortran发展至今已经到了第八个十年,它仍然广泛应用于气候建模、流体动力学、计算化学等学科,这些学科都涉及到复杂线性代数并需要强大的计算机来快速处理数字。Fortran生成的代码速度很快,而且仍然有很多程序员知道如何编写。古早的Fortran代码库仍然活跃在世界各地的实验室和超级计算机上。“以前的程序员知道他们在做什么,”美国海军研究院的应用数学家和气候模型师弗兰克·吉拉尔多说,“他们非常注重内存,因为他们拥有的内存非常少。”

信号处理器:快速傅立叶变换(1965)

当射电天文学家扫描天空时,他们捕捉到的是随时间变化的复杂信号杂音。为了理解这些无线电波的本质,他们需要看到这些信号作为频率的函数时是什么样的。一种名为“傅里叶变换”的数学过程可以帮到研究人员,但它的效率很低,对于一个大小为N的数据集需要N^2次计算。

1965年,美国数学家詹姆斯·库利和约翰·杜基想出了一种加速该过程的方法。快速傅里叶变换(FFT)通过递归(一种通过重复将问题分解为同类的子问题而解决问题的编程方法)将计算傅里叶变换的问题简化为N log2(N)步。随着N的增加,速度也会提高。对于1000个点,速度提升大约是100倍;100万个点则是5万倍。

这个“发现”实际上是一个再发现,因为德国数学家高斯在1805年就对此进行了研究,但他从未发表过。而詹姆斯·库利和约翰·杜基做到了,他们开启了傅里叶变换在数字信号处理、图像分析、结构生物学等领域的应用,成为应用数学和工程领域的重大事件之一。FFT在代码中的应用已有很多次,近年一个流行的方案是FFTW,被认为是世界上最快的FFT。

保罗·亚当斯是加州劳伦斯伯克利国家实验室分子生物物理学和综合生物成像部门的主任,他回忆称,当他在1995年改进细菌蛋白质凝胶的结构时,即使使用FFT和超级计算机,也需要“很多个小时,甚至数天”的计算。“如果在没有FFT的情况下尝试做这些,我不知道在现实中应该如何做到,”他说,“那可能要花很长时间。”

分子编目:生物数据库(1965年)

数据库是当今科学研究中不可或缺的组成部分,以至于人们很容易忘记它们也是由软件驱动的。过去的几十年中,数据库资源的规模急剧膨胀,影响了许多领域,但或许没有哪个领域的变化会比生物学领域更引人注目。

蛋白质数据库Protein Data Bank拥有超过17万个分子结构的档案,包括这种细菌的“表达子”(expressome),其功能是结合RNA和蛋白质合成的过程。

今天,科学家所用的庞大基因组和蛋白质数据库源于美国物理化学家玛格丽特·戴霍夫的工作,她也是生物信息学领域的先驱。20世纪60年代初,当生物学家们致力于梳理蛋白质的氨基酸序列时,戴霍夫开始整理这些信息,以寻找不同物种之间进化关系的线索。她与三位合着者于1965年发表了《蛋白质序列和结构图谱》,描述了当时已知的65种蛋白质的序列、结构和相似性。 历史 学家布鲁诺·斯特拉瑟在2010年写道,这是第一个“与特定研究问题无关”的数据集,它将数据编码在打孔卡中,这使得扩展数据库和搜索成为可能。

其他“计算机化”的生物数据库紧随其后。蛋白质数据库Protein Data Bank于1971年投入使用,如今详细记录了超过17万个大分子结构。加州大学圣地亚哥分校的进化生物学家拉塞尔·杜利特尔在1981年创建了另一个名为Newat的蛋白质数据库。1982年,美国国立卫生研究院(NIH)与多个机构合作,成立了GenBank数据库,这是一个开放获取的DNA序列数据库。

这些数据库资源在1983年7月证明了其存在价值。当时,由伦敦帝国癌症研究基金会蛋白质生物化学家迈克尔·沃特菲尔德领导的团队,与杜利特尔的团队各自独立报道了一个特殊的人类生长因子序列与一种导致猴子出现癌症的病毒蛋白质之间的相似性。观察结果显示了一种病毒诱发肿瘤机制——通过模仿一种生长因子,病毒会诱导细胞不受控制地生长。美国国家生物技术信息中心(NCBI)前主任詹姆斯·奥斯特尔说:“这一结果让一些对计算机和统计学不感兴趣的生物学家头脑里灵光一闪:我们可以通过比较序列来了解有关癌症的一些情况。”

奥斯特尔还表示,这一发现标志着“客观生物学的到来”。除了设计实验来验证特定的假设,研究人员还可以挖掘公共数据集,寻找那些实际收集数据的人可能从未想到的联系。当不同的数据集连接在一起时,这种力量就会急剧增长。例如,NCBI的程序员在1991年通过Entrez实现了这一点;Entrez是一个可以让研究人员在DNA、蛋白质和文献之间自由检索和比对的工具。

预测领先者:大气环流模式(1969年)

在第二次世界大战结束时,计算机先驱约翰·冯·诺伊曼开始将几年前用于计算弹道轨迹和武器设计的计算机转向天气预测问题。真锅淑郎解释道,在那之前,“天气预报只是经验性的”,即利用经验和直觉来预测接下来会发生什么。相比之下,冯·诺伊曼的团队“试图基于物理定律进行数值天气预测”。

新泽西州普林斯顿的美国国家海洋和大气管理局(NOAA)地球物理流体动力学实验室的建模系统部门负责人Venkatramani Balaji表示,几十年来,人们已经熟知这些方程式。但早期的气象学家无法实际解决这些问题。要做到这一点,需要输入当前的条件,计算它们在短时间内会如何变化,并不断重复。这个过程非常耗时,以至于在天气状况实际出现之前还无法完成数学运算。1922年,数学家刘易斯·弗莱·理查森花了几个月时间计算德国慕尼黑的6小时预报。根据一段 历史 记载,他的结果是“极不准确的”,包括“在任何已知的陆地条件下都不可能发生的”预测。计算机使这个问题变得很容易解决。

20世纪40年代末,冯·诺伊曼在普林斯顿高等研究院建立了天气预报团队。1955年,第二个团队——地球物理流体动力学实验室——开始进行他所谓的“无限预测”,也就是气候建模。

真锅淑郎于1958年加入气候建模团队,开始研究大气模型;他的同事柯克·布莱恩将这一模型应用在海洋研究中。1969年,他们成功将二者结合起来,创造了《自然》杂志在2006年所说的科学计算“里程碑”。

今天的模型可以将地球表面划分为一个个25公里 25公里的正方形,并将大气层划分为数十层。相比之下,真锅淑郎和布莱恩的海洋-大气联合模型划分的面积为500平方公里,将大气分为9个层次,只覆盖了地球的六分之一。尽管如此,Venkatramani Balaji表示,“这个模型做得很好”,使研究团队第一次能够通过计算机预测二氧化碳含量上升的影响。

数字运算机:BLAS(1979年)

科学计算通常涉及到使用向量和矩阵进行相对简单的数学运算,但这样的向量和矩阵实在太多了。但在20世纪70年代,还没有一套普遍认可的计算工具来执行这些运算。因此,从事科学工作的程序员会将时间花在设计高效的代码来进行基本的数学运算,而不是专注于科学问题。

加州劳伦斯利弗莫尔国家实验室的Cray-1超级计算机。在BLAS编程工具于1979年问世之前,并没有线性代数标准可供研究人员在Cray-1超级计算机等机器上工作

编程世界需要一个标准。1979年,这样的标准出现了:基本线性代数程序集(Basic Linear Algebra Subprograms,简称BLAS)。这是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库,如矢量或矩阵乘法。该标准一直发展到1990年,为向量数学和后来矩阵数学定义了数十个基本例程。

美国田纳西大学计算机科学家、BLAS开发团队成员杰克·唐加拉表示,事实上,BLAS把矩阵和向量数学简化成了和加法和减法一样基本的计算单元。

美国德克萨斯大学奥斯汀分校的计算机科学家Robert van de Geijn指出,BLAS“可能是为科学计算定义的最重要的接口”。除了为常用函数提供标准化的名称之外,研究人员还可以确保基于BLAS的代码在任何计算机上以相同方式工作。该标准还使计算机制造商能够优化BLAS的安装启用,以实现在其硬件上的快速操作。

40多年来,BLAS代表了科学计算堆栈的核心,也就是使科学软件运转的代码。美国乔治·华盛顿大学的机械和航空航天工程师洛雷娜·巴尔巴称其为“五层代码中的机械”。而杰克·唐加拉说:“它为我们的计算提供了基础结构。”

显微镜必备:NIH Image(1987年)

20世纪80年代初,程序员韦恩·拉斯班德在马里兰州贝塞斯达的美国国立卫生研究院的脑成像实验室工作。该实验室拥有一台扫描仪,可以对X光片进行数字化处理,但无法在电脑上显示或分析。为此,拉斯班德写了一个程序。

这个程序是专门为一台价值15万美元的PDP-11小型计算机设计的,这是一台安装在架子上的计算机,显然不适合个人使用。然后,在1987年,苹果公司发布了Macintosh II,这是一个更友好、更实惠的选择。拉斯班德说:“在我看来,这显然是一种更好的实验室图像分析系统。”他将软件转移到新的平台上,并重新命名,建立了一个图像分析生态系统。

NIH Image及其后续版本使研究人员能在任何计算机上查看和量化几乎任何图像。该软件系列包括ImageJ,一个拉斯班德为Windows和Linux用户编写的基于Java的版本;以及Fiji,这是ImageJ的分发版,由德国德累斯顿的马克斯普朗克分子细胞生物学和遗传学研究所的Pavel Tomancak团队开发,其中包括关键的插件。“ImageJ无疑是我们所拥有的最基础的工具,”布洛德研究所(由麻省理工学院和哈佛大学联合创立)成像平台的计算生物学家贝丝·契米妮说,“我从来没有和一个使用过显微镜,但没有使用过ImageJ或Fiji的生物学家说过话。”

拉斯班德表示,部分原因可能是这些工具是免费的。但威斯康星大学麦迪逊分校的生物医学工程师Kevin Eliceiri指出,另一个原因是用户可以很容易地根据自己的需求定制工具。自拉斯班德退休后,Kevin Eliceiri的团队一直领导着ImageJ的开发。ImageJ提供了一个看似简单、极简主义的用户界面,自20世纪90年代以来基本上没有改变。然而,由于其内置的宏记录器(允许用户通过记录鼠标点击和菜单选择的序列来保存工作流)、广泛的文件格式兼容性和灵活的插件架构,该工具具有无限的可扩展性。该团队的编程主管柯蒂斯·鲁登表示,有“数以百计的人”为ImageJ贡献了插件。这些新添加的功能极大扩展了研究人员的工具集,例如在视频中跟踪对象或自动识别细胞的功能。

Kevin Eliceiri说:“这个程序的目的不是做到一切或终结一切,而是服务于用户的目标。不像Photoshop和其他程序,ImageJ可以成为你想要的任何东西。”

序列搜索器:BLAST (1990年)

可能没有什么能比把软件名称变成动词更能说明文化的相关性了。提到搜索,你会想到谷歌;而提到遗传学,研究者会立刻想到BLAST。

通过诸如替代、删除、缺失和重排等方式,生物将进化中的改变蚀刻在分子序列中。寻找序列之间的相似性——特别是蛋白质之间的相似性——可以让研究人员发现进化关系,并深入了解基因功能。在迅速膨胀的分子信息数据库中,想要快速而准确地做到这一点并不容易。

玛格丽特·戴霍夫在1978年提供了关键的进展。她设计了一种“点接受突变”矩阵,使研究人员不仅可以根据两种蛋白质序列的相似程度,还可以根据进化距离来为评估它们的亲缘关系。

1985年,弗吉尼亚大学的威廉·皮尔森和NCBI的大卫·利普曼引入了FASTP,这是一种结合了戴霍夫矩阵和快速搜索能力的算法。

数年后,利普曼与NCBI的沃伦·吉什和斯蒂芬·阿特舒尔,宾夕法尼亚州立大学的韦伯·米勒,以及亚利桑那大学的吉恩·迈尔斯一起开发了一种更强大的改进技术:BLAST(Basic Local Alignment Search Tool)。BLAST发布于1990年,将处理快速增长的数据库所需的搜索速度,与提取进化上更为遥远的匹配结果的能力结合起来。与此同时,该工具还可以计算出这些匹配发生的概率。

阿特舒尔表示,计算结果出来得非常快,“你可以输入搜索内容,喝一口咖啡,搜索就完成了。”但更重要的是,BLAST很容易使用。在一个通过邮寄更新数据库的时代,沃伦·吉什建立了一个电子邮件系统,后来又建立了一个基于网络的架构,允许用户在NCBI计算机上远程运行搜索,从而确保搜索结果始终是最新的。

哈佛大学的计算生物学家肖恩·艾迪表示,BLAST系统为当时处于萌芽阶段的基因组生物学领域提供了一个变革性的工具,即一种根据相关基因找出未知基因可能功能的方法。对于各地的测序实验室,它还提供了一个新颖的动词。“它是众多由名词变成动词的例子之一,”艾迪说,“你会说,你正准备BLAST一下你的序列。”

预印本平台:arXiv.org (1991年)

20世纪80年代末,高能物理学家经常将他们已投稿的论文手稿副本邮寄给同行,征求他们的意见——但只发给少数人。物理学家保罗·金斯帕格在2017年写道:“处于食物链较低位置的人依赖于一线研究者的成果,而非精英机构中有抱负的研究人员则往往身处特权圈以外。”

1991年,当时在新墨西哥州洛斯阿拉莫斯国家实验室工作的金斯帕格编写了一个电子邮件自动应答程序,希望建立一个公平的竞争环境。订阅者每天都会收到预印本列表,每一篇都与文章标识符相关联。只需通过一封电子邮件,世界各地的用户就可以从实验室的计算机系统中提交或检索论文,并获得新论文的列表,或按作者或标题进行搜索。

金斯帕格的计划是将论文保留三个月,并将内容限制在高能物理学界。但一位同事说服他无限期地保留这些文章。他说:“就在那一刻,它从布告栏变成了档案馆。”于是,论文开始从比各个领域如潮水般涌来。1993年,金斯伯格将这个系统迁移到互联网上,并在1998年将其命名为arXiv.org,沿用至今。

arXiv成立已近30年,拥有约180万份预印本,全部免费提供,而且每月有超过1.5万份论文提交,下载量达3000万次。十年前,《自然-光子学》(Nature Photonics)的编辑在评论arXiv创立20周年时写道:“不难看出为什么arXiv的服务会如此受欢迎,这个系统让研究人员能快速而方便地插上旗帜,显示他们所做的工作,同时避免投稿传统同行评议期刊时的麻烦和时间成本。”

arXiv网站的成功也促进了生物学、医学、 社会 学和其他学科同类预印本网站的繁荣。在如今已出版的数万份关于新冠病毒的预印本中就可以看到这种影响。“很高兴看到30年前在粒子物理学界之外被认为是异端的方法,现在被普遍认为是平淡无奇和自然而然的,”金斯伯格说,“从这个意义上说,它就像一个成功的研究项目。”

数据浏览器:IPython Notebook (2011年)

2001年,费尔南多·佩雷斯还是一位希望“寻找拖延症”的研究生,当时他决定采用Python的一个核心组件。

Python是一种解释型语言,这意味着程序是逐行执行的。程序员可以使用一种称为“读取-评估-打印循环”(read–evaluate–print loop,简称REPL)的计算调用和响应工具,在其中输入代码,然后由解释器执行代码。REPL允许快速 探索 和迭代,但佩雷斯指出,Python的REPL并不是为科学目的而构建的。例如,它不允许用户方便地预加载代码模块,也不允许打开数据可视化。因此,佩雷斯自己编写了另一个版本。

结果就是IPython的诞生,这是一个“交互式”Python解释器,由佩雷斯在2001年12月推出,共有259行代码。十年后,佩雷斯与物理学家布莱恩·格兰杰和数学家埃文·帕特森合作,将该工具迁移到web浏览器上,推出了IPython Notebook,开启了一场数据科学革命。

与其他计算型Notebook一样,IPython Notebook将代码、结果、图形和文本合并在一个文档中。但与其他类似项目不同的是,IPython Notebook是开源的,邀请了大量开发者社区的参与其中。而且它支持Python,一种很受科学家欢迎的语言。2014年,IPython演变为Jupyter,支持大约100种语言,允许用户在远程超级计算机上 探索 数据,就像在自己的笔记本电脑上一样轻松。

《自然》杂志在2018年写道:“对于数据科学家,Jupyter实际上已经成为一个标准。”当时,在GitHub代码共享平台上有250万个Jupyter Notebook;如今,这一数字已经发展到1000万个,在2016年引力波的发现,以及2019年的黑洞成像工作中,它们都发挥了重要的作用。佩雷斯说:“我们对这些项目做出了很小的贡献,这是非常值得的。”

快速学习器:AlexNet(2012年)

人工智能有两种类型。一种是使用编码规则,另一种则通过模拟大脑的神经结构来让计算机“学习”。加拿大多伦多大学的计算机科学家杰弗里•辛顿表示,几十年来,人工智能研究人员一直认为后者是“一派胡言”。但在2012年,他的研究生亚力克斯·克里泽夫斯基和伊尔亚·苏茨克维证明了事实并非如此。

在一年一度的ImageNet比赛中,研究人员被要求在一个包含100万张日常物体图像的数据库中训练人工智能,然后在一个单独图像集上测试生成的算法。辛顿表示,当时最好的算法错误分类了大约四分之一的图像。克里泽夫斯基和苏茨克维的AlexNet是一种基于神经网络的“深度学习”算法,它将错误率降低到了16%。辛顿说:“我们基本上把错误率减半了,或者说几乎减半了。”

辛顿还指出,该团队在2012年的成功反映了足够大的训练数据集与出色的编程,以及新出现的图形处理单元的强大能力的结合。图形处理单元是最初设计用来加速计算机视频性能的处理器。“突然之间,我们可以将(算法)运行速度提高30倍,”他说,“或者说,学习多达30倍的数据。”

真正的算法突破实际上发生在三年前,当时辛顿的实验室创建了一个神经网络,可以比经过几十年改进的传统人工智能更准确地识别语音。“只是稍微好一点,”辛顿说,“但这已经预示了某些东西。”

这些成功预示着深度学习在实验室研究、临床医学和其他领域的崛起。通过人工智能的深度学习,手机能够理解语音查询,图像分析工具能够很容易地在显微照片中识别出细胞;这就是为什么AlexNet会成为众多从根本上改变科学,也改变世界的工具之一。(任天)

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:710
制作脚本网站 发布:2025-10-20 08:17:34 浏览:972
python中的init方法 发布:2025-10-20 08:17:33 浏览:681
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:833
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:740
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1080
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:311
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:191
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:878
python股票数据获取 发布:2025-10-20 07:39:44 浏览:835