基于概率模型的蘑菇菌丝规模分析

摘要: 本文提出了一种将菌丝体结构与地面上蘑菇子实体的位置联系起来的概率模型,用于分析蘑菇菌丝体的规模。我们假设地形平坦,菌丝体以恒定速率扩散。同时假设地面上蘑菇子实体的位置遵循菌丝体形状决定的均匀分布。基于这些假设,我们将菌丝体定义为以初始孢子位置 (m n) 为中心,半径为 r 的圆形区域。蘑菇子实体位置的分布服从该圆形区域内的均匀分布。 对于圆心位置和半径大小,我们分别提出了三种模型。对圆心位置来说:样本点平均值模型通过直接计算所有蘑菇子实体位置的平均值来估计圆心位置;最远点平均值模型通过计算横纵坐标投影上的最远点的平均值作为对圆心的估计;中位数模型通过分别计算横纵坐标轴上的中位数进行估计。 对半径大小来说:平均值模型通过计算所有样本点距已求得的圆心距离的平均值估计半径;第二种模型中采用了极大似然法对半径进行估计;两端间隔模型则通过考虑半径取值中两端间隔的比例关系计算半径大小。 我们将这些模型结合起来求解原问题。为了选择出更优的模型,我们采用了计算机数值模拟的方法。通过多次的随机模拟试验,考察模型预测结果的平均值、相对平均值的误差和标准差,对模型进行了评价,并据此选出了更好的求解结果。 Keywords: 概率论,数值模拟 简介 背景 蘑菇作为一种广泛存在于自然界的真菌,为人们所熟知。但其除了裸露在地表的子实体部分以外,在地下还拥有着极其庞大的菌丝结构。为了完成对蘑菇的全面详细研究,有必要对菌丝结构这一蘑菇的重要组成部分进行分析和度量。其中尤为重要的,就是确定菌丝结构的位置和范围。但是由于菌丝处于地下且规模巨大,难以通过直接测量得出结果。 问题重述 蘑菇的孢子落到土壤中,不断生长出菌丝。菌丝以相同的速度向外辐射,构成庞大的菌丝菌丝。当环境条件合适时,这些菌丝会生长成裸露在地面的“蘑菇”。现在我们已知地面上属于同一菌丝结构的所有蘑菇的位置,如表 1 和图 1 所示: 序号 横坐标 纵坐标 序号 横坐标 纵坐标 1 21.12 29.84 11 24.81 17.16 2 20.39 11.50 12 41.31 31.77 3 38.52 13.34 13 20.24 15.50 4 33.85 15.47 14 34.63 26.43 5 44.24 21.49 15 42.67 20.42 6 24.87 22.42 16 18.52 14.49 7 46.32 26.41 17 17.09 25.83 8 20....

三月 17, 2023 · 6 分钟 · 1105 字 · Wokron

BUAA-OS 实验笔记之 Lab1

一、总前言 操作系统是一门重课,我并不知晓自己是否做好了准备。“在这样的情况下就开始写文章,是否太着急了?” 我这样想,不知道对这门课自己是否有写文章的水平,也不知道自己是否会半途而废。 但我还是决定开始,并不是因为有什么十足的信心,而是希望这一系列文章能帮助自己更深入的理解操作系统的知识,在讲解的过程中发现自己的不足。我希望这系列能持续下去,希望未来的自己看到结果时能够满意;希望他人也能从中得到收获。 二、进入操作系统 (1)操作系统的启动 操作系统的 boot 过程是一个复杂繁琐的过程,从 bios 从上电后的启动地址开始执行,初始化硬件,读取磁盘的主引导记录,跳转到 bootloader;到加载内核程序,跳转到操作系统入口。这一整个过程难以详述…… 不过幸好在本实验中,这些都不是问题,因为我们所使用的 GXemul 模拟器不会去执行上述环节,它可以直接加载 ELF 格式内核。也就是说,我们的操作系统实验是从跳转到操作系统入口开始的。 (2)内核的入口和内存布局 所以,哪里是操作系统入口?内核入口的设置在 kernel.lds 中,这是一个链接器脚本,用于帮助链接器确定最终生成的文件的组织形式。 我们看一下该文件的开头。 /* * Set the architecture to mips. */ OUTPUT_ARCH(mips) /* * Set the ENTRY point of the program to _start. */ ENTRY(_start) 其中 OUTPUT_ARCH(mips) 设置了最终生成的文件采用的架构,对于 MOS 来说就是 mips。而 ENTRY(_start) 便设置了程序的入口函数。因此 MOS 内核的入口即 _start。这是一个符号,对应的是 init/start.S 中的 .text EXPORT(_start) .set at .set reorder /* disable interrupts */ mtc0 zero, CP0_STATUS /* omit....

三月 14, 2023 · 6 分钟 · 1206 字 · Wokron

使用 Transformer 进行机器翻译

一、transformer 简介 transformer 是 Google 在 2017 年发表的文章 Attention Is All You Need 中提出的网络架构。transformer 中只使用了注意力,实现了序列数据的处理,而未使用之前常用的 RNN 或 CNN。 对 nlp 问题,我们希望的是尽可能的获取句子的整体含义。使用 RNN,我们必须逐词获取语义,因此容易导致开头词汇词义的遗忘;使用 CNN,我们必须通过增加层数来扩大获取信息的范围。这两种方法都有很大的局限。 注意力方法则可以直接获得全局信息。方法是对一条序列,求其对于本身的注意力,这被称为自注意力。 transformer 的原理和模型较为复杂,在这里只是简单说明。 二、数据集 此为训练模型所用的数据集。设定英文为源语言,中文为要翻译成的语言。 (1)Dataset 类编写 我们根据路径打开文件,获取中英文序列和单词表。并将序列直接转化为 tensor,方便读取。 class TranslateDataset(Dataset): def __init__(self, en_path, zh_path): en_seqs, self.en_vocab = get_seq_and_vocab(en_path, get_tokenizer("basic_english")) zh_seqs, self.zh_vocab = get_seq_and_vocab(zh_path, zh_simple_tokenizer) self.items = [] for i in range(len(en_seqs)): en_seq = en_seqs[i] zh_seq = zh_seqs[i] src = en_seq tgt = zh_seq[:-1] pdt = zh_seq[1:] self....

三月 12, 2023 · 4 分钟 · 667 字 · Wokron

ESIM 网络的搭建和训练

一、前言 最近半年多的时间里学了许多人工智能,尤其是深度学习的知识,但是一直没有搭建过一个较为复杂的神经网络,最多也只是一个简单的 rnn。这主要是因为自己的笔记本没有训练较大模型的能力。 因为对nlp比较感兴趣,因此最近开始尝试跟着复旦大学邱锡鹏老师的NLP入门练习搭建网络。但到任务三时自己的笔记本就无法继续训练了,于是这次我下定决心找到训练一个比较好的训练模型的方法。最终找到了 Colab。 因为使用了Colab,本次模型的构建和训练比较成功,因而做此记录。 二、任务 本次任务是输入两个句子,判断它们之间的关系。具体来说,我们需要实现论文中提出的 ESIM 网络,并通过 SNLI数据集 进行训练,以学习预测两个句子间的关系。 三、数据集 SNLI数据集包含57万行英文句子对,并被标注了句子间的关系,包括蕴含(Entailment),矛盾(Contradiction),中立/不冲突(Neutral),未知(-)。 例如 输入文本: A man inspects the uniform of a figure in some East Asian country. 输入假设: The man is sleeping. 输出: 矛盾(C) 输入文本: A smiling costumed woman is holding an umbrella. 输入假设:A happy woman in a fairy costume holds an umbrella. 输出: 中立(N) 输入文本: A soccer game with multiple males playing. 输入假设: Some men are playing a sport....

三月 5, 2023 · 4 分钟 · 755 字 · Wokron

利用 Colab 训练神经网络

一、算力从哪里来? 曾听到过这样一种说法,深度学习 “自学 + 没经费 = 天坑”。不幸的是我似乎正处于这种状态中。自学的方面还比较好克服,可没有 gpu 进行训练就 “难为无米之炊” 了。就算理论学得再好,自己构建的模型电脑带不动,没有实践的机会,也是难以学好这门学科的。 最近我正开始学着实现更大的模型,我的笔记本此前的小模型还可以勉强撑住,可现在却完全带不动了。一方面,训练的时间太长,挤占了我使用笔记本做其他事的时间;另一方面,我的 gpu 显存太小,不能调大参数,可参数较小时又无法收敛。这就是我面临的双重两难问题。 我希望找到一处租用算力的平台。它应该同时满足如下的条件 算力丰富,能快速训练模型 对用户友好,和本机环境差别不大,能够迅速上手训练模型 费用便宜,最好有免费的算力 综合以上各点,通过搜索,我找到了 Colab。Colab(oratory) 是一个 Google 研究项目,旨在帮助传播机器学习培训和研究成果。它是一个 Jupyter 笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行。Colab 笔记本存储在 Google 云端硬盘中,并且可以共享。利用Colaboratory ,可以方便的使用Keras, TensorFlow, PyTorch, OpenCV 等框架进行深度学习应用的开发。最重要的是,Colab 可免费使用。 二、Colab基本操作 (1)创建笔记本 在正式介绍 Colab 之前需要说明一点,使用 Colab 需要科学上网。 要新建 Colab 需要创建笔记,笔记是 Colab 编辑文本、代码和运行程序的地方。使用过 jupyter notebook 的人应该很了解。不同笔记之间内容互不相通,可以把每一个笔记看做一台独立运行的虚拟机。 Colab 是谷歌的产品,因此需要实现注册好一个谷歌账号。 通过 Google Drive 创建笔记本 Google Drive 是 Google 的一款云端硬盘,操作与其他云盘,如百度网盘、阿里云盘,类似。 通过 Google Drive 可以创建 Colab 笔记。方式是:点击左上角的“新建”按钮或右击背景 => 在弹出的窗口中选择“更多” => 选择 “Google Colaboratory” 选项。...

三月 4, 2023 · 2 分钟 · 267 字 · Wokron

利用 ASM 库实现 Java 反射

一、ASM库简介 ASM 库是一款基于 Java 字节码层面的代码分析和修改工具。它能分析二进制的 class 文件并对其进行动态修改。ASM 库侧重性能,设计和实现尽可能小和快。 通过 ASM 库,我们可以方便地获取类信息,并实现类似于反射的功能。ASM 库处理字节码,因此能得到仅仅使用反射无法获取的信息,如方法内的结构。 ASM 库同样具有动态修改和创建类文件的功能,但本篇文章主要使用 ASM 库的字节码读取功能。 本篇文章假设读者能自行通过Maven或其他方式添加ASM库依赖。 二、利用ASM库访问类文件 ASM 库的核心库提供了读取和修改字节码的基本 API。核心库包含如下几个工具类: ClassReader ClassReader 类用于从 class 文件中加载字节码。这样,这一 ClassReader 对象就拥有了关于某一类的所有信息。 ClassVisitor ClassVisitor 类可以从 ClassReader 中获取想要的信息。 ClassVisitor 是访问者模式的访问类。简单解释访问者模式,就是被访问的对象调用访问者类的方法,从而使得访问者获取希望得到的数据。 还是通过 ASM 的例子来理解吧,ClassVisitor 实际是一个抽象类,其中定义了一个方法 visit。该方法的签名为: visit(int version, int access, String name, String signature, String superName, String[] interfaces) 假设我们继承 ClassVisitor 创建了一个新的访问类,那么获取信息的方式如下: ClassReader cr = new ClassReader("className"); ClassVisitor cv = new ClassVisitor(Opcodes.ASM5) { // this is an anonymous class }; cr....

二月 21, 2023 · 3 分钟 · 442 字 · Wokron