有了这个工具,不执行代码就可以找PyTorch模型错误( 二 )


首先是 PyTorch 程序结构 , PyTorch、TensorFlow 和 Keras 等现代机器学习框架需要使用 Python API 来构建神经网络 。 使用此类框架训练神经网络大多遵循如下四个阶段的标准程序 。
有了这个工具,不执行代码就可以找PyTorch模型错误
文章图片

在 PyTorch 中 , 常规神经网络训练代码的结构 。
【有了这个工具,不执行代码就可以找PyTorch模型错误】训练模型需要先定义网络结构 , 图 2 为一个简化的图像分类代码 , 取自官方的 PyTorch MNIST 分类示例:
有了这个工具,不执行代码就可以找PyTorch模型错误
文章图片

在这里 , 上述代码首先定义一系列神经网络层 , 并使它们成为单一的神经网络模块 。 为了正确组装层 , 前一层的返回张量必须满足下一层的输入要求 。 网络使用超参数的初始化参数进行实例化 , 例如隐藏层的数量 。 接下来 , 对输入数据集进行预处理并根据网络的要求进行调整 。 从该阶段开始 , 每个数据集都被切成较小的相同大小的块(minibatch) 。 最后 , 主循环开始 , minibatch 按顺序输入网络 。 一个 epoch 是指将整个数据集传递到网络的单个循环 , 并且 epoch 的数量通常取决于神经网络的目的和结构 。 除了取决于数据集大小的主训练循环之外 , 包括 epoch 数在内 , 训练代码中的迭代次数在大多数情况下被确定为常数 。
在构建模型时 , 网络层之间输入、输出张量形状的不对应就是张量形状错误 。 通常形状错误很难手动查找 , 只能通过使用实际输入运行程序来检测 。 下图就是典型的张量形状错误(对图 2 的简单修改) , 如果不仔细查看 , 你根本发现不了错误:
有了这个工具,不执行代码就可以找PyTorch模型错误
文章图片

对于张量形状错误(如上图的错误类型) , PyTea 将原始 Python 代码翻译成 PyTea IR 进行查找 , 如下图是 PyTea IR 示例:
有了这个工具,不执行代码就可以找PyTorch模型错误
文章图片

上面提到 , PyTea 会跟踪转换后的 IR 的每个可能执行路径 , 并收集有关张量形状约束 。 其实约束是 PyTorch 应用程序所需要的条件 , 以便在没有任何张量形状误差的情况下执行它 。 例如 , 一个矩阵乘法运算的两个操作数必须共享相同的维数 。 下图显示了约束的抽象语法:
有了这个工具,不执行代码就可以找PyTorch模型错误
文章图片

约束的抽象语法部分截图
如何使用 PyTea
首先 , 安装环境要求:node.js >= 12.x , python >= 3.8 , z3-solver >= 4.8 。
安装和使用可参考以下代码:
# install node.js
sudo apt-get install nodejs
# install python z3-solver
pip install z3-solver
# download pytea
wget https://github.com/ropas/pytea/releases/download/v0.1.0/pytea.zip
unzip pytea.zip
# run pytea
python bin/pytea.py path/to/source.py
# run example file
python bin/pytea.py packages/pytea/pytest/basics/scratch.py
编译代码:
# install dependencies
npm run install:all
pip install z3-solver
# build
npm run build
网友纷纷表示:这个工具绝对是必要的!

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。