python - 如何在 Blocks(Theano、Python)中使用 SquaredError 砖 block ?

标签 python block theano

我在 Blocks(和 Theano)中设计了一个非常简单的循环神经网络。作为成本函数,我决定使用平方误差函数,其简单定义为 (y-y')^2。我想计算整个小批量的平均成本。

下面的代码是一个几乎可以工作的示例,使用 Blocks 类/方法 SquaredError ,就我而言,它应该完全执行所需的操作。

请忽略效率低下的float64,我使用它们是为了简化eval执行。使用 32b 时问题仍然存在。

import theano.tensor as tt
from blocks.bricks.cost import SquaredError

if __name__ == '__main__':
    a = tt.vector('a', dtype='float64')
    b = tt.vector('b', dtype='float64')

    cost = SquaredError().apply(a, b)

    print(cost.eval({a: [1.0, 2.0, 3.0, 4.0],
                     b: [0.5, 2.1, 3.4, 3.8]}))

    # Expected: mean(0.5^2 + 0.1^2 + 0.4^2 + 0.2^2)
    # Got: ValueError: Not enough dimensions on squarederror_cost_matrix_output_0 to reduce on axis 1

如果我将有问题的行更改为下面的行,一切都会按预期进行。

cost = tt.sqr(tt.abs_(a - b)).mean()

我做错了什么?我正在尝试更多地学习 Blocks,但这超出了我的理解范围。我应该使用另一 block 砖吗?或者以某种方式预处理张量?

最佳答案

看起来我们需要 CostMatrix 砖 block 的 2D 输入,这有点愚蠢。我已提交an issue关于它。如果您愿意,可以通过将输入混洗到 (N, 1) 矩阵来解决这个问题,但是成本 block 主要仅在您使用自动标记变量过滤器操作等的输入和输出时才有用。像在 Theano 表达式中那样降低成本也很好(尽管挑剔的是你不需要绝对值,但负数的平方总是正数)。

关于python - 如何在 Blocks(Theano、Python)中使用 SquaredError 砖 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37093601/

相关文章:

python - 避免过时的 *.pyc 文件的最佳方法?

python - 如何使用 Python 的 OpenSSL 库从中创建 RSA 对和 CRS?

C# ThreadPool 一个线程阻塞另一个?

ruby - ruby 中没有参数的 DSL block

tensorflow - 如何训练反向嵌入,如 vec2word?

python - Keras 中的 Theano 图形打印

python - 仅使用 for 循环和 if/else 操作计算字符串中唯一字符的数量

python - 如何关闭 mechanize 浏览器?

ios - 在 Firebase block 外使用变量

python - theano中的嵌套循环