2016-08-11 13 views
3

MNISTセットは、トレーニングセット用の60,000個のイメージで構成されています。私のTensorflowを訓練している間、私は列車ステップを実行して、トレーニングセット全体でモデルを訓練したいと思っています。 Tensorflowウェブサイトの深い学習の例では、バッチサイズ50(合計1,000,000バッチ)の2万回の繰り返しを使用しています。 3万回以上の繰り返しを試してみると、私の数字予測は失敗します(すべての手書き数字が0と予測されます)。私の質問は、全体のMNISTセットでテンソルフローモデルを訓練するために、50回のバッチサイズで何回反復するべきですか?MNISTデータセット全体(60000個の画像)でテンソルフローを訓練するために必要な反復回数はいくつですか?

self.mnist = input_data.read_data_sets('MNIST_data', one_hot=True) 
for i in range(FLAGS.training_steps): 
    batch = self.mnist.train.next_batch(50) 
    self.train_step.run(feed_dict={self.x: batch[0], self.y_: batch[1], self.keep_prob: 0.5}) 
    if (i+1)%1000 == 0: 
     saver.save(self.sess, FLAGS.checkpoint_dir + 'model.ckpt', global_step = i) 

答えて

2

私はあなたの停止基準に依存すると思います。損失が改善されない場合はトレーニングを中止するか、検証データセットを作成し、検証の精度がそれ以上改善されない場合はトレーニングを停止することができます。

+0

私はそれを行うと思います。 1000回目の反復ごとにあるかもしれないが、私は正確さを取ってみよう。何らかの点でアロケーションが0に下がった場合、データの雨が降らなくてはなりません。 – Swapnil

1

マシン学習では、リターンが小さくなる重大なケースがあります。例えばここに私のCNNsの1からの精度のリストは、次のとおりです。

Epoch 0 current test set accuracy : 0.5399 
Epoch 1 current test set accuracy : 0.7298 
Epoch 2 current test set accuracy : 0.7987 
Epoch 3 current test set accuracy : 0.8331 
Epoch 4 current test set accuracy : 0.8544 
Epoch 5 current test set accuracy : 0.8711 
Epoch 6 current test set accuracy : 0.888 
Epoch 7 current test set accuracy : 0.8969 
Epoch 8 current test set accuracy : 0.9064 
Epoch 9 current test set accuracy : 0.9148 
Epoch 10 current test set accuracy : 0.9203 
Epoch 11 current test set accuracy : 0.9233 
Epoch 12 current test set accuracy : 0.929 
Epoch 13 current test set accuracy : 0.9334 
Epoch 14 current test set accuracy : 0.9358 
Epoch 15 current test set accuracy : 0.9395 
Epoch 16 current test set accuracy : 0.942 
Epoch 17 current test set accuracy : 0.9436 
Epoch 18 current test set accuracy : 0.9458 

あなたはリターンが* 10のエポック〜後に脱落し始める見ることができるように、しかし、これはあなたのネットワークに基づいて、レートを学んで異なる場合があります。どのくらいクリティカルなのか/どのくらいの時間が良いのかに基づいていますが、私は20を妥当な数にしています。

*私は常にepochという単語をデータセットしかし、私はその定義の精度に関しては気付いていないよ、ここで各エポックは、あなたがno_improve_epochのようなものを使用してのは3とは何それは単に意志言わせて、それを設定することができますサイズ128

0

のバッチで〜429のトレーニング段階であります3回の反復で> 1%の改善がない場合は、反復を停止することを意味します。

no_improve_epoch= 0 
     with tf.Session() as sess: 
      sess.run(cls.init) 
      if cls.config.reload=='True': 
       print(cls.config.reload) 
       cls.logger.info("Reloading the latest trained model...") 
       saver.restore(sess, cls.config.model_output) 
      cls.add_summary(sess) 
      for epoch in range(cls.config.nepochs): 
       cls.logger.info("Epoch {:} out of {:}".format(epoch + 1, cls.config.nepochs)) 
       dev = train 
       acc, f1 = cls.run_epoch(sess, train, dev, tags, epoch) 

       cls.config.lr *= cls.config.lr_decay 

       if f1 >= best_score: 
        nepoch_no_imprv = 0 
        if not os.path.exists(cls.config.model_output): 
         os.makedirs(cls.config.model_output) 
        saver.save(sess, cls.config.model_output) 
        best_score = f1 
        cls.logger.info("- new best score!") 

       else: 
        no_improve_epoch+= 1 
        if nepoch_no_imprv >= cls.config.nepoch_no_imprv: 
         cls.logger.info("- early stopping {} Iterations without improvement".format(
          nepoch_no_imprv)) 
         break 

Sequence Tagging GITHUB

関連する問題