トレーニング/検証の喪失時に何をすべきかについて、ここでいくつかの記事を読んでいます。私は誰かが一見見ることができて同意しないかと思っていますが、私の問題は十分に崩壊していないと思っています。Tensorflowトレーニング/検証の損失の問題
私はすばらしいブログ投稿hereに従っていますが、テンソルフローで実装しています。モデルを変換するのはかなり簡単ですが、運動量と学習率はやや厄介ですが、それは問題だと思います。私は損失が跳び上がるまでに多くの時代にしか行くことができない問題を抱えています。私が使っているモデルは、ブログチュートリアルのnet4/5と同等でなければなりません。
... Epoch /Time/Train Loss/Valid Loss/Learn Rate
Epoch[ 900]0:14:11 0.000116 0.001566 0.027701
Epoch[ 910]0:14:20 0.000107 0.001565 0.026593
Epoch[ 920]0:14:29 0.000098 0.001564 0.026593
Epoch[ 930]0:14:39 0.000088 0.001567 0.026593
Epoch[ 940]0:14:48 0.000080 0.001567 0.026593
Epoch[ 950]0:14:58 0.000069 0.001578 0.026593
Epoch[ 960]0:15: 7 0.000072 0.001600 0.026593
Epoch[ 970]0:15:17 0.000105 0.001664 0.026593
Epoch[ 980]0:15:26 0.000221 0.001799 0.026593
Epoch[ 990]0:15:35 0.000456 0.002045 0.026593
Epoch[1000]0:15:45 0.000955 0.002473 0.025530
Epoch[1010]0:15:54 0.002148 0.003415 0.025530
Epoch[1020]0:16: 4 0.008455 0.009337 0.025530
Epoch[1030]0:16:13 0.009042 0.010412 0.025530
Epoch[1040]0:16:22 nan nan 0.025530
私はこれを見て、その時点で学習率を下げる必要があるように思えます。それは心配していますが、チュートリアルの数字とよく一致しません。
ブログ投稿の次のステップは、ドロップアウトを追加することです。私はすでにモデルに実装しています。ここでは、テンソルブールを渡してトレーニングの有無を伝えるだけです。ドロップアウトが有効になっているので、私は150エポック未満の人になってしまい、問題が何であるか分かりません。それはシステムを正式化することになっているので、私はこれが起こることを期待していませんでした。
... Epoch /Time/Train Loss/Valid Loss/Learn Rate
Epoch[ 0]0: 0: 1 0.025211 0.025614 0.045000
Epoch[ 10]0: 0:11 0.003496 0.004075 0.045000
Epoch[ 20]0: 0:22 0.003202 0.003742 0.045000
Epoch[ 30]0: 0:32 0.003169 0.003712 0.045000
Epoch[ 40]0: 0:42 0.003084 0.003605 0.045000
Epoch[ 50]0: 0:53 0.002976 0.003507 0.045000
Epoch[ 60]0: 1: 3 0.002891 0.003437 0.045000
Epoch[ 70]0: 1:14 0.002795 0.003381 0.045000
Epoch[ 80]0: 1:24 0.002648 0.003317 0.045000
Epoch[ 90]0: 1:34 0.002408 0.003181 0.011250
Epoch[ 100]0: 1:45 0.002267 0.003107 0.011250
Epoch[ 110]0: 1:55 0.001947 0.003003 0.011250
Epoch[ 120]0: 2: 6 0.004507 0.005768 0.011250
Epoch[ 130]0: 2:16 nan nan 0.011250
ドロップアウトを有効にすることで問題になる可能性のあることについて考えてみましょうか?私は全く同じモデルafaikを作りましたが、ナノの問題がなくても私の損失はそれほど良くありません。
EDIT:
だから私は私の畳み込み層が誤って設定しています。私はこれを持っているチュートリアルを終えました。
InputLayer (None, 1, 96, 96) produces 9216 outputs
Conv2DCCLayer (None, 32, 94, 94) produces 282752 outputs
MaxPool2DCCLayer (None, 32, 47, 47) produces 70688 outputs
Conv2DCCLayer (None, 64, 46, 46) produces 135424 outputs
MaxPool2DCCLayer (None, 64, 23, 23) produces 33856 outputs
Conv2DCCLayer (None, 128, 22, 22) produces 61952 outputs
MaxPool2DCCLayer (None, 128, 11, 11) produces 15488 outputs
DenseLayer (None, 500) produces 500 outputs
DenseLayer (None, 500) produces 500 outputs
DenseLayer (None, 30) produces 30 outputs
と私はちょうど更新したので、今は同じだと思います。
conv: input size: (?, 96, 96, 1)
pool: input size: (?, 94, 94, 32)
conv: input size: (?, 47, 47, 32)
pool: input size: (?, 46, 46, 64)
conv: input size: (?, 23, 23, 64)
pool: input size: (?, 22, 22, 128)
fc: input size before flattening: (?, 11, 11, 128)
fc: input size: (?, 15488)
fc: input size: (?, 500)
fc: input size: (?, 500)
out: (?, 30)
まだ動作しません。畳み込みレイヤーと最初に完全に接続されたレイヤーでドロップアウトが有効になると、モデルは50エポック以下で続き、エラーは屋根を通過します。非常に小さな学習率でも、問題は依然として発生します。
Epoch[ 0]0: 0: 1 0.029732 0.030537 0.030000
Epoch[ 10]0: 0:11 0.004211 0.004986 0.030000
Epoch[ 20]0: 0:20 0.003013 0.003530 0.004500
Epoch[ 30]0: 0:30 5.250690 5.426279 0.004500
Epoch[ 40]0: 0:40 nan nan 0.000675
そして、それは> _> ...
EDIT非ドロップアウト方式が壊れているように見えると同じことをやって:私は、私は問題を考え出したと思います。私は時間の経過と共に勢いを増す運動量最適化アルゴリズムを使用しています。私はそれが少し増えてオーバーシュートを起こしていると思います。現在、ドロップアウトなしで動作していますが、一定の勢いを持つことで、以前よりも良い結果が得られます。私は1000エポックを実行した後、私はドロップアウトでそれをチェックしようとしています
ドロップアウトで今実行しているので、私は問題を修正したと思います。
私のモデルでは大きな問題が見つかりました。私は畳み込みレイヤのパラメータを正しく設定していないので、パスを取ってそれらが正しいことを確認してから、同じ問題がまだ起きているかどうかを確認します。 – Exuro