gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:35 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com