2017-08-24 3 views
1

Ich versuche, ein einfaches neuronales Feed-Forward-Netzwerk zu betreiben und meine Trainings- und Testgenauigkeit scheint in allen Epochen gleich zu sein.Verlust und Genauigkeit bleibt gleich durch mein Training

from keras.models import Sequential 
from keras.layers import Dense 
from keras.utils import plot_model 
from IPython import embed 
from keras import optimizers 
from keras import backend as K 

import keras 
import numpy as np 
import glob 


import pre_process_data as dataProc 

def network(): 

    path = '/home/RD*' 
    files = glob.glob(path) 

    model = Sequential() 
    model.add(Dense(2048, input_shape=(10030,),name="dense_one")) 
    model.add(Dense(2048,activation='softmax',name = "dense_two")) 
    model.add(Dense(4,activation='tanh',name = "dense_three")) 
    #model.add(Dense(4,activation = 'relu',name = "dense_four")) 

    for l in model.layers: 
      print l.name, l.input_shape , "=======>", l.output_shape 

    print model.summary() 

    model.compile(loss = 'categorical_crossentropy', 
        optimizer = "adam", 
        metrics = ['accuracy']) 

    #Reads data from text files 
    pre_proc_data = dataProc.OnlyBestuData() 

    data = pre_proc_data[:,0:-1] 
    labels = pre_proc_data[:, -1] 
    labels = np.random.randint(0,4,32) #Generate random lables 

    one_hot_labels = keras.utils.to_categorical(labels, num_classes=4) 
    model.fit(x = data,y = one_hot_labels ,epochs = 10, batch_size = 2, verbose = 2) 

    #embed() 


def main(): 
     with K.get_session(): 
       network() 

    main() 

Meine Ausgabe ist unten eingefügt. Ich versuche zu lernen, wie neuronale Netzwerke funktionieren und daher habe ich ein sehr einfaches Feed-Forward-Netzwerk geschrieben. Ich habe versucht, den Optimierer von "Adam" zu "SGD" mit Lernraten von 0,01 zu ändern. Doch mein Netzwerk gibt mir den ständigen Verlust und die Genauigkeit. Da es sich um ein kleines Netzwerk handelt, beträgt die Größe des gesamten Eingangs 32x10030, wobei jede Zeile eine Menge von gemeinsamen Positionen darstellt.

Können Sie mir sagen, was hier schief gehen könnte?

Ausgang:

Epoch 1/10 
5s - loss: 9.6919 - acc: 0.4375 
Epoch 2/10 
5s - loss: 9.5701 - acc: 0.4688 
Epoch 3/10 
5s - loss: 9.5701 - acc: 0.4688 
Epoch 4/10 
5s - loss: 9.5701 - acc: 0.4688 
Epoch 5/10 
5s - loss: 9.5701 - acc: 0.4688 
Epoch 6/10 
5s - loss: 9.5701 - acc: 0.4688 
Epoch 7/10 
5s - loss: 9.5701 - acc: 0.4688 
Epoch 8/10 
5s - loss: 9.5701 - acc: 0.4688 
Epoch 9/10 
5s - loss: 9.5701 - acc: 0.4688 
Epoch 10/10 
5s - loss: 9.5701 - acc: 0.4688 
+0

Warum generieren Sie zufällig Ihre Etiketten? Und wenn es nur zum Testen ist - warum halten Sie sich nicht an einen gemeinsamen Datensatz, um eine Basislinie zu erhalten? – petezurich

+0

Ja, das macht mehr Sinn. Ich werde das auf einer gemeinsamen Basis versuchen. Ich wollte nur sicherstellen, dass das Skelett meines Codes richtig ist. – deeplearning

+0

Noch eine Sache, die ich bemerke: Ihre letzte Schicht sollte mit Softmax-Aktivierung eingestellt werden. ReLu macht da keinen Sinn, weil es die «entscheidende» Ebene ist. – petezurich

Antwort

0

Wenn ich das Setup richtig verstehen Sie haben 32 Proben mit 10030 Funktionen (auch bekannt als gemeinsame Positionen) je. Das sind viele Features und viel zu wenige Samples.

Versuchen Sie, mehr Proben zu verwenden und gleichzeitig Ihre Funktionen, z. B. mit PCA, zu reduzieren.

Warum verwenden Sie unterschiedliche und ungewöhnliche Aktivierungen für jede Ebene? Versuchen Sie, alle Ebenen auf ReLU (und die letzte Ebene auf softmax) zu setzen und beginnen Sie von dort.

+0

Ja. Ich war mir ziemlich sicher, dass es viel zu viele Proben waren. Da es mein erstes neuronales Netzwerk ist, wollte ich sicherstellen, dass ich keinen entscheidenden Teil verpasst habe, obwohl meine Ebenenaktivierungen durcheinander sind. – deeplearning

+1

Eigentlich ist es auch zu ** wenigen ** Samples und viel zu vielen Features ... – desertnaut

+0

Yeah! Ich sehe..will Dimensionalität Reduktion helfen hier? – deeplearning

Verwandte Themen