【问题标题】:Theano ValueError: Some matrix has no unit strideTheano ValueError:某些矩阵没有单位步长
【发布时间】:2014-09-22 15:25:59
【问题描述】:

最近在为经过训练的 pylearn2 模型进行预测时遇到了问题。下面提供了回溯的相关位。我已确保 model.get_input_shape() 与我传递给我生成的 theano 预测函数的 numpy 数组的形状相匹配,但仍然收到以下错误。

ValueError: some matrix has no unit stride
Apply node that caused the error: Dot22(Elemwise{Composite{[Switch(GT(*1 -> add(i0, i1), i2), *1, i2)]}}[(0, 0)].0, y_W)
Inputs types: [TensorType(float32, matrix), TensorType(float32, matrix)]
Inputs shapes: [(1, 1000), (1000, 1)]
Inputs strides: [(9223372036854775807, 4), (4, 9223372036854775807)]
Inputs scalar values: ['not scalar', 'not scalar']

有趣的是,行为似乎依赖于机器。我的预测脚本在我的本地机器上运行,但在 Google Compute Engine 实例上执行会产生上述错误。

有什么想法可以开始调试吗?输入步幅看起来很奇怪,但我不确定如何开始调试该值。

【问题讨论】:

  • 我最近花了很多时间调试我的theano调试过程。它功能强大,但我对它作为工具的看法一直很糟糕
  • @Raff.Edward,我很想进一步了解您遇到的问题。我们已经尝试改进 Theano。
  • 哎呀,很多。尝试在渐变更新上打印 - 从来没有成功过。仍然不确定我是否正确创建了共享标量。错误消息非常令人困惑。无法使用调试器单步执行代码(使得无法成功打印变得更加重要)。没有警告/方式来判断您是否不小心让某些代码在 CPU 而不是 GPU 上运行。没有办法(我发现)确保偏差与更新中的权重向量配对(比如我更新了 L2 范数正则化的特定偏差)。文档也没有解释发生了什么。工作量很大。

标签: python machine-learning gpu theano


【解决方案1】:

问题在于 NumPy 创建了一个步幅错误的 ndarray。这已在更新版本的 NumPy 中得到修复。所以更新 NumPy,它应该可以工作。

这是显示 NumPy 步幅不好的行:

Inputs strides: [(9223372036854775807, 4), (4, 9223372036854775807)]

您是否使用一些特殊标志编译 NumPy 来测试尺寸为 1 的尺寸的步幅?

在这里我做了一个 PR 以更容忍那些无效的步幅:

https://github.com/Theano/Theano/pull/2008

【讨论】:

  • 太棒了,谢谢@nouiz。由于 sudoers 文件,sudo python 使用的 python 环境与python 不同,这一事实使问题变得复杂。使用 sudo 执行时使用了较旧的 numpy 版本,即使我安装了来自 github 的 dev 版本,并且在没有 sudo 权限的情况下运行时可用。可能也应该通过 theano-users 邮件列表运行它,但感谢您从 StackOverflow 挖掘这个。
猜你喜欢
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
相关资源
最近更新 更多