Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的二进制输出神经网络_Python_Networking_Theano_Nnet - Fatal编程技术网

Python中的二进制输出神经网络

Python中的二进制输出神经网络,python,networking,theano,nnet,Python,Networking,Theano,Nnet,作为个人项目的一部分,我试图用自己的数据修改Theano文档()中给出的示例代码 到目前为止,我设法以所需的格式提供我自己的(文本)数据,我想构建一个二进制分类器。问题是,当我写的时候,输出的数量是1,即 classifier = MLP(rng=rng, input=x, n_in=49, n_hidden=n_hidden, n_out=1) 我得到以下错误: Traceback (most recent call last): File "<stdin>", line 1,

作为个人项目的一部分,我试图用自己的数据修改Theano文档()中给出的示例代码

到目前为止,我设法以所需的格式提供我自己的(文本)数据,我想构建一个二进制分类器。问题是,当我写的时候,输出的数量是1,即

classifier = MLP(rng=rng, input=x, n_in=49, n_hidden=n_hidden, n_out=1)
我得到以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Asterios\Anaconda\lib\site-packages\spyderlib\widgets\externalshell  \sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "C:/Users/Asterios/Documents/Python/TripAdvisor/untitled4.py", line 603, in <module>
params = test_mlp()
File "C:/Users/Asterios/Documents/Python/TripAdvisor/untitled4.py", line 553, in test_mlp
minibatch_avg_cost = train_model(minibatch_index)
File "C:\Users\Asterios\Anaconda\lib\site-packages\theano-0.6.0-py2.7.egg\theano\compile\function_module.py", line 588, in __call__
self.fn.thunks[self.fn.position_of_error])
File "C:\Users\Asterios\Anaconda\lib\site-packages\theano-0.6.0-py2.7.egg\theano\compile\function_module.py", line 579, in __call__
outputs = self.fn()
ValueError: y_i value out of bounds
Apply node that caused the error: CrossentropySoftmaxArgmax1HotWithBias(Dot22.0, b, Elemwise{Cast{int32}}.0)
Inputs shapes: [(10L, 1L), (1L,), (10L,)]
Inputs strides: [(8L, 8L), (8L,), (4L,)]
Inputs types: [TensorType(float64, matrix), TensorType(float64, vector), TensorType(int32, vector)]
Use the Theano flag 'exception_verbosity=high' for a debugprint of this apply node.
奇怪的是,如果我将大于1的任何东西(例如n_out=2)用作输出神经元的数量,代码运行时没有任何错误,但现在当然有许多输出神经元没有实际意义

请解释一下为什么二进制输出的代码似乎给了我一个错误?我怎样才能让它工作


谢谢大家!

在MLP教程中用作输出层的逻辑回归类不是“标准”逻辑回归,它作为输出给出一个值并仅区分两个类,而是多项式逻辑回归(又称Softmax回归),它为每个类给出一个值作为输出,告诉属于他们的输入的概率。所以,如果你有10个类,你也需要10个单位,显然所有输出单位的总和等于1,因为这是一个概率分布

尽管使用了类名(“LogistRegression”),但它在中的修改毫无疑问地表明了它的真实意图(
''Multi-class Logistic Regression class[…]''

而在你的问题中,你有两个类,你还需要2个输出单位,你的
n_out
的值必须是2而不是1。当然,对于两个类,一个输出的值总是1减去另一个输出的值


此外,请检查是否确实需要int64而不是int32。Theano对第二个有更好的支持。

我对Theano不是很熟悉,但可能它想输出二进制分类的单位?两个单位上的Softmax相当于一个单位上的logistic(除了正则化器可能会有点不同,因为有更多隐藏->输出权重)。太好了!!谢谢贝拉多,这一定是问题所在。最简单的解决方案是选择具有最高值的输出。然而,我认为最好是一个真正的二元逻辑回归,而不是多项式回归。我搜索了一些尝试过的二进制日志代码,但没有成功。回归。您是否碰巧与此类实施有任何联系?您认为在什么意义上这样做会更好?更准确?更快?我不认为“真正的二元逻辑回归”有任何优势。如果你只是需要一些外部看起来像它的东西,只需围绕softmax创建一个包装器类,并始终返回每个预测中的第一个数字。我认为这会快一点,因为需要计算的权重少一个。我不确定这会对总运行时间产生多大影响,但无论如何。我两个都试试看,看有没有明显的区别。再次感谢!如果你在一个GPU上运行,你可以添加几十个其他单元,并且运行时间没有差别。如果您在CPU上,Theano不是计划旧逻辑回归的最佳选择。无论如何,让我们知道你的实验结果。请别忘了回来标记正确答案。祝你好运
array([1, 1, 1, ..., 0, 0, 0], dtype=int64)