如何对类或函数定义进行哈希处理?

2024-03-25

背景

在尝试机器学习时,我经常通过 pickling/unpickling 的方式重用之前训练过的模型。 然而,在进行特征提取部分时,不混淆不同的模型是一个挑战。 因此,我想添加一项检查,以确保使用与测试数据完全相同的特征提取过程来训练模型。

Problem

我的想法如下: 除了模型之外,我还会在 pickle 转储中包含一个哈希值,该值对特征提取过程进行指纹识别。

当训练模型或使用它进行预测/测试时,模型包装器会被赋予符合特定协议的特征提取类。 使用hash()当然,在该类上是行不通的,因为它在调用之间并不持久。 所以我想我也许可以找到定义该类的源文件,并从该文件中获取哈希值。

然而,可能有一种方法可以直接从类的内存内容中获取稳定的哈希值。 这样做有两个好处: 如果找不到源文件,它也可以工作。 它可能会忽略对源文件的不相关更改(例如修复模块文档字符串中的拼写错误)。 类是否有可以在此处使用的代码对象?


您所寻找的只是一个哈希过程,其中包含类定义的所有重要细节。 (可以通过包含来包含基类their递归地定义。)为了最大限度地减少错误匹配,基本思想是将宽(加密)散列应用于序列化你们班的。所以从pickle:它支持的类型比hash并且,当它使用身份时,它使用可重现的基于名字的身份。这使得它成为递归策略基本情况的良好候选者:处理其函数和类contents很重要并让它处理引用的任何辅助对象。

因此按案例定义序列化。调用一个对象special如果它属于除最后一种情况之外的任何一种情况。

  • For a tuple deemed to contain special objects:
    1. 人物t
    2. 其系列化len
    3. 每个元素按顺序序列化
  • For a dict deemed to contain special objects:
    1. 人物d
    2. 其系列化len
    3. 每个名称和值的序列化,按排序顺序
  • For a class whose definition is salient:
    1. 人物C
    2. 其系列化__bases__
    3. 其系列化vars
  • For a function whose definition is salient:
    1. 人物f
    2. 其系列化__defaults__
    3. 其系列化__kwdefaults__(在 Python 3 中)
    4. 其系列化__closure__(但与细胞values而不是细胞本身)
    5. 其系列化vars
    6. 其系列化__code__
  • For a code object (since pickle doesn’t support them at all):
    1. 人物c
    2. 其系列化co_argcount, co_nlocals, co_flags, co_code, co_consts, co_names, co_freevars, and co_cellvars, 以该顺序;这些都不是特别的
  • For a static or class method object:
    1. 人物s or m
    2. 其系列化__func__
  • For a property:
    1. 人物p
    2. 其系列化fget, fset, and fdel, 以该顺序
  • 对于任何其他对象:pickle.dumps(x,-1)

(你实际上从未store所有这一切:只需创建一个hashlib您在顶级函数和递归部分中选择的对象update它依次与序列化的每个部分一起。)

类型标签是为了避免冲突,特别是没有前缀。二进制 pickles 已经没有前缀了。您可以根据对其内容的确定性分析(即使是启发式的)或上下文来做出有关容器的决策,只要保持一致即可。

与往常一样,平衡误报和误报是一门艺术:对于一个函数,您可以包括__globals__(修剪已经序列化的对象以避免大的(如果不是无限的)序列化)或只是任何__name__其中发现。省略co_varnames忽略重命名局部变量,除非内省很重要,否则这很好;同样对于co_filename and co_name.

您可能需要支持更多类型:查找不支持的静态属性和默认参数pickle正确地(因为他们contain对特殊类型的引用)或根本没有。当然请注意,某些类型(例如文件对象)是不可picklable的because序列化它们很困难或不可能(尽管与pickle完成后,您可以像处理任何其他函数一样处理 lambdacode对象)。存在一些错误匹配的风险,您可以选择仅序列化type此类对象(一如既往,以字符为前缀?以区别于该位置实际具有的类型)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对类或函数定义进行哈希处理? 的相关文章

  • ValueError:“连接”层需要具有匹配形状的输入(连接轴除外)

    我正在尝试为我的项目构建 Pix2Pix 并收到错误 值错误 Concatenate层需要具有匹配形状的输入 除了连接轴之外 获得输入形状 None 64 64 128 None 63 63 128 生成器是一个 U 网模型 我的输入高度
  • Celery计划任务中的打印语句不会出现在终端中

    当我跑步时celery A tasks2 celery worker B我想看到每秒打印 芹菜任务 目前没有打印任何内容 为什么这不起作用 from app import app from celery import Celery from
  • 如何在Python中的BeautifulSoup4中使用.next_sibling时忽略空行

    由于我想删除 html 网站中重复的占位符 因此我使用 BeautifulSoup 的 next sibling 运算符 只要重复项位于同一行 就可以正常工作 参见数据 但有时它们之间有一个空行 所以我希望 next sibling 忽略它
  • Django 如何从 ManyToManyField 序列化并列出全部

    我正在使用 Django 1 9 1 开发移动应用程序后端 我实现了关注者模型 现在我想列出用户的所有关注者 但目前我不得不这样做 我还使用 Django Rest 框架 这是我的 UserProfile 模型 class UserProf
  • 可移植的非关系数据库

    我想尝试 尝试非关系数据库 最好的解决方案是 便携式 这意味着它不需要安装 理想情况下 只需将目录复制粘贴到某个地方即可使其工作 我不介意第一次使用时是否需要编辑一些配置文件或运行配置工具 可从 python 访问 适用于 Windows
  • 对图像使用 Pixellib 自定义训练时出现 input_image 元形状错误

    我正在使用 Pixellib 来训练自定义图像实例分割 我创建了一个数据集 可以在下面的链接中看到 数据集 https drive google com drive folders 1MjpDNZtzGRNxEtCDcTmrjUuB1ics
  • 理解@property装饰器和继承[重复]

    这个问题在这里已经有答案了 这里是 Python 3 以防万一它很重要 我试图正确理解如何实现继承 property使用 我已经搜索了 StackOverflow 并阅读了大约 20 个类似的问题 但无济于事 因为他们试图解决的问题略有不同
  • 属性错误:类型对象“图像”没有属性“打开”

    Exception in Tkinter callback Traceback most recent call last File C Python34 lib tkinter init py line 1482 in call retu
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在
  • 如何使用 jira-python 设置 fixVersions 字段

    我正在尝试使用 jira python 模块 http jira python readthedocs org en latest 更新现有的 JIRA 具体来说 我正在尝试设置问题的fixesVersion 列表 我已经尝试了一段时间但没
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 管理文件字段当前 url 不正确

    在 Django 管理中 只要有 FileField 编辑页面上就会有一个 当前 框 其中包含指向当前文件的超链接 但是 此链接会附加到当前页面 url 因此会导致 404 因为不存在这样的页面 例如 http 127 0 0 1 8000
  • 如何在 Python 中仅列出 zip 存档中的文件夹?

    如何仅列出 zip 存档中的文件夹 这将列出存档中的每个文件夹和文件 import zipfile file zipfile ZipFile samples sample zip r for name in file namelist pr
  • 如何在 Python 中执行相当于预处理器指令的操作?

    有没有办法在 Python 中执行以下预处理器指令 if DEBUG lt do some code gt else lt do some other code gt endif There s debug 这是编译器预处理的特殊值 if
  • 请求response.iter_content()获取不完整的文件(1024MB而不是1.5GB)?

    您好 我一直在使用此代码片段从网站下载文件 到目前为止 小于 1GB 的文件都很好 但我注意到 1 5GB 文件不完整 s is requests session object r s get fileUrl headers headers
  • 向量化 numpy bincount

    我有一个 2d numpy 数组 A我要申请np bincount 到矩阵的每一列A生成另一个二维数组B由原始矩阵每列的 bincounts 组成A 我的问题是 np bincount 是一个采用一维数组的函数 它不是像这样的数组方法B A
  • 从 csv 中读取 pandas 数据帧,以非固定标头开始

    我有许多数据文件是由我的实验室中使用的一些相当黑客的脚本生成的 该脚本非常有趣 因为它在标头之前附加的行数因文件而异 尽管它们具有相同的格式并具有相同的标头 我正在编写一个批处理来将所有这些文件处理为数据帧 如果我不知道位置 如何让 pan
  • psutil:测量特定进程的CPU使用率

    我正在尝试测量进程树的 cpu 使用率 目前获取进程 没有子进程 的 cpu usage 就可以了 但我得到了奇怪的结果 import psutil p psutil Process PID p cpu percent 还给我float g
  • 从 Python 中编译的正则表达式中提取命名组正则表达式模式

    我有一个 Python 正则表达式 其中包含多个命名组 但是 如果先前的组已匹配 则可能会错过与一组匹配的模式 因为似乎不允许重叠 举个例子 import re myText sgasgAAAaoasgosaegnsBBBausgisego
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是

随机推荐