2017-11-21 11 views
-2

私は10から15までエポックを増加させましたが、精度には影響しませんでした。両方とも、精度は49.3%であり、損失は1.0であった。なぜニューラルネットの精度は同じですか?

なぜこのように動作しているのでしょうか?私はTensorFlowと深く学ぶのが初めてです。

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

学習データとしてネットワークに何を渡しているのですか?入力内容とラベルの例を教えてください。また、各トレーニングバッチの内容を簡略化して表示できますか?あなたの辞書はどれくらいですか?どれだけのデータを訓練していますか? –

+0

純粋なテンソルフローよりもテンソルフローバックエンドを持つケーラを使用する方が良い – Nickpick

答えて

1

ニューラルネットの効率化に貢献するエポックの#以外のパラメータ、、の全体のホストがあります:

ここでのトレーニング方法です。

最初のパスの試みとして、あなたはで実験しようとする場合があります:

  • 異なるバッチサイズあなたのニューラルネット(すなわち、層の増加#)の
  • 異なるアーキテクチャ。
  • 異なる機能変換(すなわち、おそらくlemmatizingの代わりに起因してみてください)

は、より多くのあなたが行うことができますあります、と私はあなたがこのprimer

幸運をチェックアウトすることをお勧め! :)

関連する問題