-2

Ich habe die Epochen von 10 auf 15 erhöht, aber das hatte keinen Einfluss auf die Genauigkeit. Beide Male betrug die Genauigkeit 49,3% mit einem Verlust von 1,0.Warum bleibt die Genauigkeit des neuronalen Netzes gleich?

Irgendeine Idee, warum es sich so verhält? Ich bin neu in TensorFlow und Deep Learning.

Hier ist die Trainingsmethode:

def train_neural_network(x): 
    prediction = neural_network_model(x) 
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction,labels=y)) 
    optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost) 
    with tf.Session() as sess: 
     sess.run(tf.global_variables_initializer()) 

     try: 
      epoch = int(open(tf_log,'r').read().split('\n')[-2]) + 1 
      print('STARTING:',epoch) 
     except: 
      epoch = 1 
     # this will track epochs using a log file 
     while epoch <= n_epochs: 
      if epoch != 1: 
       saver.restore(sess,"./model.ckpt") 
      epoch_loss = 1 
      with open('lexicon-2500-2638.pickle','rb') as f: 
       lexicon = pickle.load(f) 
       print("lexicon length: ", len(lexicon)) 
      with open('train_set_shuffled.csv', buffering=20000, encoding='latin-1') as f: 
       batch_x = [] 
       batch_y = [] 
       batches_run = 0 
       for line in f: 
        label = line.split(':::')[0] 
        tweet = line.split(':::')[1] 
        current_words = word_tokenize(tweet.lower()) 
        current_words = [lemmatizer.lemmatize(i) for i in current_words] 

        features = np.zeros(len(lexicon)) 

        for word in current_words: 
         if word.lower() in lexicon: 
          index_value = lexicon.index(word.lower()) 

          features[index_value] += 1 
        line_x = list(features) 
        line_y = eval(label) 
        batch_x.append(line_x) 
        batch_y.append(line_y) 
        if len(batch_x) >= batch_size: 
         _, c = sess.run([optimizer, cost], feed_dict={x: np.array(batch_x), 
                     y: np.array(batch_y)}) 
         epoch_loss += c 
         batch_x = [] 
         batch_y = [] 
         batches_run += 1 
         print('Batch run:',batches_run,'/',total_batches,'| Epoch:',epoch,'| Batch Loss:',c,) 

      saver.save(sess, "./model.ckpt") 
      print('Epoch',epoch,'completed out of',n_epochs,'loss:',epoch_loss) 
      with open(tf_log,'a') as f: 
       f.write(str(epoch) + '\n') 
      epoch += 1 
    train_neural_network(x) 
+0

Was leiten Sie als Trainingsdaten an Ihr Netzwerk weiter? Können Sie uns ein Beispiel für Ihre Eingabe und Ihre Etiketten zeigen? Kannst du uns auch ein vereinfachtes Bild zeigen, was jede Trainingschar enthält? Wie groß ist dein Wörterbuch? Und wie viele Daten trainieren Sie? –

+0

Verwenden Sie besser Keras mit Tensorflow-Backend als reiner Tensorflow – Nickpick

Antwort

1

Es gibt eine ganze Reihe von Parametern, andere als Anzahl der Epochen, die auf die Effizienz eines neuronalen Netzes beitragen.

Als erster Pass Versuch, möchten Sie vielleicht mit versuchen, zu experimentieren:

  • Unterschiedliche Losgrößen
  • Verschiedene Architekturen Ihrer neuronalen Netz (das heißt, die Erhöhung Anzahl der Schichten).
  • Verschiedene Feature-Transformationen (d, versuchen vielleicht statt lemmatizing stammen)

Es gibt viel mehr Sie tun können, und ich ermutige Sie dieses primer

Viel Glück heraus zu überprüfen! :)

Verwandte Themen