计算图的实现

pensieve的Python项目详细描述


养老金2.1

一个人只是从自己的头脑中吸取多余的思想,把它们倒进盆里,然后在闲暇时检查它们。当模式和链接以这种形式出现时,就更容易发现它们。
-albus邓布利多(哈利波特与火焰杯作者j.k.罗琳)

Picture of Pensieve

数据

J. K. Rowling神奇的魔法世界里, “巫婆或巫师可以提取他们自己或他人的记忆,将它们存储在Pensieve, 然后review稍后再查看。它还可以relieve the mind当信息变得杂乱无章时。 任何人都可以examine检查养老金中的记忆,这也让观众完全沉浸在 他们在记忆中。

在数据科学中,在数据争用和模型生成过程中处理数据就像处理内存一样。 除了在处理数据时有更多的来回和迭代。 你不断地更新模型的参数,改善你的数据争论, 并更改可视化或存储数据的方式。 与数据科学中的大多数过程一样,一路上的每一步都可能需要很长时间才能完成 这迫使您避免从头开始重新运行所有内容;这种方法很容易出错 过程依赖于其他过程。为了解决这个问题,我想出了一个计算图 其中节点表示数据对象,边的方向表示它们之间的依赖关系。

在我自己使用了一段时间后,我发现它在以下几个方面是有益的:

  • 减少错误,特别是在数据争用和模型创建时
  • 数据对象组织
  • 轻松传输数据
  • 相干数据处理和数据管道
  • 数据和模型再现性
  • 最重要的是放松身心

安装

pip install pensieve

用法

pensieve存储定义内存之间关系的memoriesfunctions函数。

frompensieveimportPensieve# initiate a pensievepensieve=Pensieve()# store a "memory" (with 1 as its content) pensieve.store(key='one',content=1)# create a new memory made up of a precursor memorypensieve.store(key='two',precursors=['one'],function=lambdax:x+x)

有两种类型的记忆:

  • 独立的记忆(无前驱)
  • 依赖性记忆(有前驱体)

独立记忆

一个独立的记忆没有任何先兆,而不是一个功能, 它将定义与前体的关系,具有content

frompensieveimportPensievepensieve=Pensieve()pensieve.store(key='integers',content=list(range(10)))

依赖性记忆

从对的内容运行函数创建依赖内存 它的前体。当内存只有一个前兆时,函数可以是 定义为一个lambda,其中一个输入直接在函数中访问, 例如lambda x:x+1

# the precursor, 'integer' is accessed within the lambda under the label: numberspensieve.store(key='odd_integers',precursors=['integers'],function=lambdanumbers:[xforxinnumbersifx%2==1])

具有两个或多个{em1}$前体的内存

如果一个存储器有多个前驱,它的功能应该仍然有一个输入,但是 前体应该作为输入项访问,就像输入是字典一样 前体的。

例如,如果一个函数添加了两个前体xy,则应将其定义为: lambda x:x['x']+x['y']。在下面的示例中,函数获取一组整数和 奇数整数,通过从整数中过滤出奇数整数,它可以找到所有的偶数整数 在片场。此函数只有一个输入,为清楚起见,称为precetors。 (但可以称为任何东西)并且前体在函数中作为 项目'integers''odd_integers'就像字典一样。

pensieve.store(key='even_integers',precursors=['integers','odd_integers'],function=lambdaprecursors:[xforxinprecursors['integers']ifxnotinprecursors['odd_integers']])

检索内存

检索内存内容就像从字典中获取项,如下所示。

pensieve['integers']# output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]pensieve['even_integers']# output: [0, 2, 4, 6, 8]

更改内存

当您在Pensive中更改内存时,所有successiver都会得到通知并标记为stale,但不会立即更新。 一旦需要一个已更改内存的继承者,它将根据与它的关系进行更新 前驱记忆。

# changing one memory affects all successorspensieve.store(key='integers',content=list(range(16)))pensieve['integers']# output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]pensieve['even_integers']# output: [0, 2, 4, 6, 8, 10, 12, 14]

保存并加载

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java子组件宽度超过父组件宽度   java JCheckBox始终返回True/False,但不更改   java start simple 1生产者2通过executor服务消费   java如何在没有数组的情况下找到50个随机数中的最大值和最小值?   java如何处理HttpAsyncClient异常   基于java文本的jar文件在windows cmd中运行时出错。这个问题怎么解决?   java无法在Jboss EAP 7.0服务器中创建oracle数据源   java尝试使用数学旋转多边形   契约式设计如何在Java中实现自定义类实例不变量   爪哇修改怪物在锻造雷霆模型中的繁殖率(1.16)   http如何在java中构造curl XHEAD请求   java文件md5哈希在分块时发生变化(用于netty传输)   java有一个简单、异步、HTTP集成I/O的框架吗?   java commercetools:在JVM SDK中,是否可以从JSON创建产品?   Java在加载改装的minecraft时发生致命错误   java hibernate不创建sessionFactory bean   java改型以使用参数获取请求   java将github库添加为gradle中的依赖项