【发布时间】: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