python - 神经网络报告不同激活的相同响应

标签 python neural-network pybrain

我编写了这个 Pybrain 神经网络的简单测试,但它的表现并不像我预期的那样。这个想法是在最多 4095 个数字的数据集上对其进行训练,并为素数和非素数分类。

#!/usr/bin/env python
# A simple feedforward neural network that attempts to learn Primes

from pybrain.datasets import ClassificationDataSet
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised import BackpropTrainer

class PrimesDataSet(ClassificationDataSet):
    """ A dataset for primes """

    def generatePrimes(self, n):
        if n == 2:
            return [2]
        elif n < 2:
            return []
        s = range(3, n + 1, 2)
        mroot = n ** 0.5
        half = (n + 1) / 2 - 1
        i = 0
        m = 3
        while m <= mroot:
            if s[i]:
                j = (m * m - 3) / 2
                s[j] = 0
                while j < half:
                    s[j] = 0
                    j += m
            i = i + 1
            m = 2 * i + 3
        return [2] + [x for x in s if x]

    def binaryString(self, n):
        return "{0:12b}".format(n)

    def __init__(self):
        ClassificationDataSet.__init__(self, 12, 1)
        primes = self.generatePrimes(4095)
        for prime in primes:
            b = self.binaryString(prime).split()
            self.addSample(b, [1])
        for n in range(4095):
            if n not in primes:
                b = self.binaryString(n).split()
                self.addSample(b, [0])

def testTraining():
    d = PrimesDataSet()
    d._convertToOneOfMany()
    n = buildNetwork(d.indim, 12, d.outdim, recurrent=True)
    t = BackpropTrainer(n, learningrate = 0.01, momentum = 0.99, verbose = True)
    t.trainOnDataset(d, 100)
    t.testOnData(verbose=True)
    print "Is 7 prime? ",   n.activate(d.binaryString(7).split())
    print "Is 6 prime? ",   n.activate(d.binaryString(6).split())
    print "Is 100 prime? ", n.activate(d.binaryString(100).split())


if __name__ == '__main__':
    testTraining()

忽略(请)这是否可能的问题,我的问题是最后三个测试 7、6 和 100 是否为质数的打印语句都返回相同的结果:

Is 7 prime?  [ 0.34435841  0.65564159]
Is 6 prime?  [ 0.34435841  0.65564159]
Is 100 prime?  [ 0.34435841  0.65564159]

(或类似的东西) 我解释这些结果的方式是,神经网络以 65% 的把握预测这些数字中的每一个素数。我的神经网络是否学会了对所有输入都一视同仁,还是我做错了什么?

最佳答案

实际上,您似乎只使用了一个输入。

d.binaryString(7).split()

相当于

"{0:12b}".format(7).split()

计算结果为

['111'].

我想你的意图是这样的

[int(c) for c in "{0:012b}".format(7)]

结果是

[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1]

附言检查您输入统计模型的确切内容总是一个好主意 :)

关于python - 神经网络报告不同激活的相同响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829102/

相关文章:

python 脚本需要很长时间并且窗口似乎卡住

python - 如何在Python中有效地获取元组列表中的元素

machine-learning - 在测试 MNIST 时,caffe 测试错误没有名为 "net"的字段

python - pybrain LSTM 层缓冲区变量

python - 使用 PyBrain 进行神经网络训练不会收敛

python - 我怎样才能在Python中创建一个不创建重复数字的随机数生成器

python - 当应用 jwt auth 包装器时,Flask-cors 包装器不起作用。

python - 调试反向传播算法

python - 为什么在 Tensorflow 简单神经网络示例中再添加一层会破坏它?

python - pybrain 预测只是 float 。我需要整数、 bool 值和字符串