【问题标题】:Theano: How to implement the distance between desired output (1d) and label as cost functionTheano:如何实现所需输出(1d)和标签之间的距离作为成本函数
【发布时间】:2016-01-04 10:53:05
【问题描述】:

我想训练一个神经网络来表示从 R^n 到 R 的函数。 神经网络只有一层,输入神经元是函数参数,输出是函数值。 例如,函数可以是“逻辑与”:两个输入值,一个输出。

为了训练这样的网络,我需要定义一个成本函数,然后可以通过 Theano 对梯度的支持来推导它。 问题是: 通常你会使用神经网络进行分类。训练样本是 (input, y),其中 y 是期望的输出 = 应该具有最大似然的输出神经元的索引。

在这种情况下这是不可能的,我只有一个输出神经元,需要与标签进行比较 => 标签不用于索引。 在伪代码中:

if y==0:
   cost= - output
else:
   cost= - (1-output)

使用这种方法,必须对每个样本重新计算成本。由于计算成本的公式取决于 y 的值。

我认为有必要在 theano 公式中实现选择。 这个伪代码中的内容:

block1= - output
block2= - (1 - output)
blockMatrix= [block1 : block2]
return blockMatrix[y]

在 theano 教程中,索引与微分结合使用,所以这应该可以工作。

实际问题: 在 theano 中阻塞是如何工作的?

我的代码中符号的类型:输出是一个矩阵,y 是一个向量。样本是这样创建的,一行就是一个样本。

data_x = numpy.matrix([[0, 0],
                       [1, 0],
                       [0, 1],
                       [1, 1]])

data_y = numpy.array([0,
                      0,
                      0,
                      1])

pastebin 上的完整代码:http://pastebin.com/PByUyvMQ 它与本教程非常相似:http://deeplearning.net/tutorial/logreg.html

【问题讨论】:

  • 你确定你只需要一个输出神经元吗?你实际上可以有两个神经元(一个输出'0',第二个输出'1'),如果你这样做,你可以使用与示例中相同的成本函数;但是,如果您只想要一个输出神经元,那么您实际上是在进行“回归”,在这种情况下,最简单的成本函数可能是您的预测和真实标签之间的平均距离。另外,我看到您正在使用“softmax”来计算输出(您只需使用 softmax 将输出解释为概率),因为一个输出神经元将权重矩阵与输入矩阵相乘就足够了。

标签: python artificial-intelligence classification theano


【解决方案1】:

我不太确定阻塞究竟是什么意思,但对于简单地连接两个张量变量,有theano.tensor.concatenate()theano.tensor.stack()

此外,您的问题还有另一种表述方式可以避免调节和阻塞:

cost = -(1-y)*output -y*(1-output)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    相关资源
    最近更新 更多