Python 使用前馈网络进行图像分类。为什么我会得到相同的值?

Python 使用前馈网络进行图像分类。为什么我会得到相同的值?,python,machine-learning,neural-network,pybrain,Python,Machine Learning,Neural Network,Pybrain,我对机器学习和图像分类的所有业务都很陌生。我正在使用pybrain作为我的主要神经网络建模工具 我的问题如下。我有100x100个图像,有0,1,2,3个项目,我想让机器告诉我一个新的100x100图像中有多少元素 我做了一个25个元素的训练集(只是想看看我是否能从中得到一些东西)。我意识到相对于所需的测试集,这个数字非常小,但收集训练数据将非常昂贵(可行但昂贵) 下面是我如何制作训练集的 onlyfiles = [f for f in filter(lambda x: x[-3:] =

我对机器学习和图像分类的所有业务都很陌生。我正在使用pybrain作为我的主要神经网络建模工具

我的问题如下。我有100x100个图像,有0,1,2,3个项目,我想让机器告诉我一个新的100x100图像中有多少元素

我做了一个25个元素的训练集(只是想看看我是否能从中得到一些东西)。我意识到相对于所需的测试集,这个数字非常小,但收集训练数据将非常昂贵(可行但昂贵)

下面是我如何制作训练集的

    onlyfiles = [f for f in filter(lambda x: x[-3:] == "png", onlyfiles)]
    input = np.zeros(shape=(len(onlyfiles), 10000))
    output = np.zeros(shape=(len(onlyfiles), 1))

    row = 0
    for file in onlyfiles:
        img = Image.open(path+file)
        pix = img.load()
        for x in range(100):
            for y in range(100):
                input[row, 100*x+y] = pix[x, y][2]
        output[row,0] = output_mapping[file]
        row += 1
我只使用了pix[x,y][2](蓝色),因为区域被蓝光照亮

所以我生成了分类数据集

    ds = ClassificationDataSet(10000,1,nb_classes=4)
    for k in range(len(X)):
        ds.addSample(np.ravel(input[k]),output[k])

    temp_testdata, temp_traindata = ds.splitWithProportion(0.25)

    tstdata = ClassificationDataSet(10000,1,nb_classes=4)
    trndata = ClassificationDataSet(10000,1,nb_classes=4)

    for k in range(len(temp_testdata)):
        tstdata.addSample(temp_testdata.getSample(k)[0],temp_testdata.getSample(k)[1])

    for k in range(len(temp_traindata)):
        trndata.addSample(temp_traindata.getSample(k)[0],temp_traindata.getSample(k)[1])
创建网络

    fnn = buildNetwork(trndata.indim, 1, trndata.outdim, outclass=SoftmaxLayer)
    trainer = BackpropTrainer(fnn,dataset=trndata, momentum=0.1, learningrate=0.01, verbose= True, weightdecay=0.01)
    trainer.trainEpochs (50)
训练网络

    fnn = buildNetwork(trndata.indim, 1, trndata.outdim, outclass=SoftmaxLayer)
    trainer = BackpropTrainer(fnn,dataset=trndata, momentum=0.1, learningrate=0.01, verbose= True, weightdecay=0.01)
    trainer.trainEpochs (50)
并试图将一些数据推回到

    fnn.activateOnDataset(tstdata)
这就是我得到的

    Out[186]: 
    array([[ 0.20086945,  0.46216524,  0.30707544,  0.02988986],
           [ 0.20086945,  0.46216524,  0.30707544,  0.02988986],
           [ 0.20086945,  0.46216524,  0.30707544,  0.02988986],
           [ 0.20086945,  0.46216524,  0.30707544,  0.02988986],
           [ 0.20086945,  0.46216524,  0.30707544,  0.02988986],
           [ 0.20086945,  0.46216524,  0.30707544,  0.02988986]])
由此我了解到,我的神经网络将为所有tstdata样本提供“2”类。我很惊讶。我期待着糟糕的结果,但我并不期待同样的6个输出

为了便于检查,这里是这5个样本中每个样本的所有像素的“和”,表明我的5个样本确实不同

    In[199]: np.sum(tstdata.data['input'],1)
    Out[198]: array([ 1170985.,  1115688.,  1173766.,  1125111.,  1152222.,  1132945.])
我甚至把0和1作为“假”样本抛出,数字没有改变

知道为什么我所有的轨迹都有相同的输出吗


非常感谢

是否是功能的数量导致了这个问题?我将训练数据的数量增加到100个,同样的问题。我试着使用灰度和数字不完全相同。非常接近,但不完全相同。询问。