Theano:如何将所需输出(1d)和标签之间的距离实现为成本函数

Theano: How to implement the distance between desired output (1d) and label as cost function

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

为了训练这样的网络,我需要定义一个成本函数,然后可以使用 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

我不太确定阻塞的确切含义,但是对于简单地连接两个张量变量,有 theano.tensor.concatenate() and theano.tensor.stack()

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

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