0

私は、ノイズ除去型オートエンコーダを使用して重み付けしたNNを使用して画像の修復を試みています。すべてがhttps://papers.nips.cc/paper/4686-image-denoising-and-inpainting-with-deep-neural-networks.pdfTensorflow:私の損失関数が巨大な数値を生成する

私は彼らが使用しているカスタム損失機能を作った。

私のセットは、イメージのオーバーラッピングパッチ(196x32x32)のバッチです。私の入力は画像の破損したバッチであり、出力はクリーンなものでなければなりません。私の損失関数の

一部は

dif_y = tf.subtract(y_xi,y_) 

dif_norm = tf.norm(dif_y, ord = 'euclidean', axis = (1,2)) 

どこに再構成しクリーンなイメージとY_(×1×3072 196)は、実際のクリーンなイメージであるy_xi(×1×3072 196)されています。だから私は実際には、破損したバージョンからすべての画像を差し引いて、すべての違いを合計しています。私は非常に大きな数字になるのが普通だと思います。

train_step = tf.train.AdamOptimizer().minimize(loss) 

損失の値は約3 * 10^7から始まり、200回の実行(1000回のループ)後に収束します。だから、私の出力イメージはオリジナルから数マイル離れています。

編集:3.02391e + 07から始まり、3.02337e + 07

に収束私の損失値が正しい方法はありますか?もしそうなら、どうすれば劇的に減らすことができますか?

おかげ

編集2:私の損失関数

dif_y = tf.subtract(y,y_) 
dif_norm = tf.norm(dif_y, ord = 'euclidean', axis = (1,2)) 
sqr_norm = tf.square(dif_norm) 
prod = tf.multiply(sqr_norm,0.5) 
sum_norm2 = tf.reduce_sum(prod,0) 
error_1 = tf.divide(sum_norm2,196) 
+0

このような損失は、ネットワークがデータ/タスクに適合しないことを意味します。異なるアーキテクチャ(つまり、より深い)が役立つ可能性があります。 –

+0

あなたは損失計算のためのコード行を提供できますか? – Wontonimo

+0

@wontonimo私はコードの行を追加しました – costisst

答えて

0

sum_norm2 = tf.reduce_sum(PROD、0) - 私はこれがあなたはそれが何をしたいのかやっているとは思いません。

セイYY_は500枚の画像の値を持っていて、500x10行列のための10枚のラベルを持っています。 tf.reduce_sum(prod、0)は、2つのランクのすべての値の合計となる500個の値の合計である1個の値を持つことを処理します。

私はあなたが望むものとは思えません。各ラベル間の誤差の合計です。おそらくあなたが望むのは、少なくとも私の経験では、私にとって驚異的なことは平均です。さらに、私は一枚一枚の損失を望んでいません。一つ一つのイメージにつき1枚ですが、その代わりに一枚の損失があります。

私の好みは

loss = tf.reduce_mean (tf.reduce_mean(prod)) 

これはあなたのオプティマイザのパラメータは、簡単な作りの追加の結末を持っているようなものを使用することです。私はまだGradientDescent、Adam、またはMomentumOptimizerのlearning_rateに1.0以外のものを使用しなければならない状況に陥っていません。

あなたの損失は、バッチサイズやラベルの数とは無関係になります。

+0

これまでのテストから、問題はdif_norm = tf.norm()だと思います。私がはるかに小さいバッチ(196の代わりに15枚の画像)で実行しても、ロスは同じままです(そしてdif_normの値)。私はバッチの各イメージではなく、バッチ全体の損失を望むという考えに同意します。今、私はバッチサイズ(196)で割って平均損失を取るが、私は間違いなくtf.reduce_meanで試してみる。それは理にかなっている。また、私は学習率をAdamに任せずに設定しなければならないと信じていますか? – costisst

+0

私はAdamのデフォルトを使い始めるでしょう。 *実際には、少なくともモメンタムをベースラインとして使用します。 :)* – Wontonimo

+0

誰かがMomentum vs Adamに関する上記のコメントを読んでもっと勉強したいのであれば、ここでは素晴らしいリンクhttp://sebastianruder.com/optimizing-gradient-descent/index.html#gradientdescentoptimizationalgorithmsです。それは素晴らしいですから。 – Wontonimo

0

他の誰かが似たような問題を抱えている場合は、レコードのために:データを正規化することを忘れないでください!私は実際に範囲[0,255]の値から範囲[0,1]の値を減算していました。非常にnoobishの間違い、私はそれが難しい方法を学んだ!解決

入力値/ 255

期待値/ 255

問題。

関連する問題