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

时间:2015-12-07 20:43:31

标签: python machine-learning neural-network pybrain

我对机器学习和图像分类这一切都很陌生。我正在使用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.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样本提供Class“2”。我很惊讶。我期待蹩脚的结果,但我没想到同样的6个输出......

为了结账,这里是5个样本中每个样本的所有像素的“总和”,显示我的5个样本确实不同...

    In[199]: np.sum(tstdata.data['input'],1)
    Out[198]: array([ 1170985.,  1115688.,  1173766.,  1125111.,  1152222.,  1132945.])

我甚至把0和1串作为“假”样本抛出,数字没有改变!

知道为什么我的所有小道都有相同的输出吗?

非常感谢!

0 个答案:

没有答案