Search code examples
pythonnetwork-programmingdatasetgraphic

Making a graphic of a trained dataset python


y1 = []
y2 = []
x = []
for i in range(40):
    #fer dos llistes (error y epoch) y despres fer un plot
    trainer.trainEpochs( 1 )
    trnresult = percentError( trainer.testOnClassData(),trndata['class'] )
    tstresult = percentError( trainer.testOnClassData(dataset=tstdata ),tstdata['class'] )

    print "epoch: %4d" % trainer.totalepochs, \
          "  train error: %5.2f%%" % trnresult, \
          "  test error: %5.2f%%" % tstresult

    if i==1:
        g=Gnuplot.Gnuplot()
    else:
        y1 = y1.append(float(trnresult))
        y2 = y2.append(float(tstresult))
        x = x.append(i)
d1=Gnuplot.Data(x,y1,with_="line")
d2=Gnuplot.Data(x,y2,with_="line")
g.plot(d1,d2)

Hi everyone, first time i post here, but thanks for the work.

Ok, i´m working with neural networks (multi-layer preceptron) and i´m testing with UCI ML repository, i have to make a graphical display of the error versus the number of epochs, but i have no idea what i´m doing wrong, this is the error i got:

y1 = y1.append(float(trnresult))
AttributeError: 'NoneType' object has no attribute 'append'

I´ve tryed with int and float at the y1.append() but i got same errors. This is all i get on console:

Number of training patterns:  233

Input and output dimensions:  6 2

First sample (input, target, class):

[ 63.03  22.55  39.61  40.48  98.67  -0.25] [1 0] [ 0.]

Total error: 0.110573541007

epoch:    1   train error: 33.05%   test error: 29.87%

Total error: 0.0953749484982

epoch:    2   train error: 32.19%   test error: 35.06%

Total error: 0.0977600868845

epoch:    3   train error: 27.90%   test error: 29.87%

Traceback (most recent call last):
  File "C:\Python\Practice\dataset.py", line 79, in <module>
    y1 = y1.append(float(trnresult))
AttributeError: 'NoneType' object has no attribute 'append'

Thanks.


Solution

  • The append() function on a list does not return a value. Therefore y1 is replaced by None. You should do y1.append() and y2.append() without assigning back to y1 and y2.

    More specifically

    >>> a = []
    >>> b = a.append(1)
    >>> b is None
    True
    >>> a
    [1]
    >>> a.append(2)
    >>> a
    [1, 2]
    

    If you want, you can use the + operator on lists (note the [] around 3):

    >>> a = a + [3]
    >>> a
    [1, 2, 3]