26
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Denoising Autoencoderで使うノイズの違いを体験してみよう

Last updated at Posted at 2015-09-21

#TL;DR

デモはChromeで動作を確認しました
デモ
コード

#概要

  • Denoising Autoencoder(以下DAE)に使うノイズには色々ありますが、自分にはどのような違いがあるのかよくわかりません
  • ということで、mnistの手書き数字データで学習済したDAEで自分が書いた字を再構成させることでノイズの種類による違いを体験してみました
  • それで何かわかるのかというと微妙ですが、個人的に面白かったので共有しようと思います

#ネタ元

Stacked Denoising Autoencoders: Learning Useful Representations in
a Deep Network with a Local Denoising Criterion

#使ったDAEの説明

  • 入力は28*28のグレイスケール画像
  • tied weight
  • 中間層のユニットの数は500
    • 増やし過ぎるとjsのデモが重くなるのでこのくらいに
  • アフィン変換&シグモイド関数のエンコーダー + アフィン変換&シグモイド関数のデコーダー。ロスはクロスエントロピー
  • 入力のmnistのデータはグレイスケール画像とはいえ、ほぼ0or1のバイナリ画像として見れるのでこの組み合わせです

#試したノイズの種類
###マスキングノイズ
入力の一部を0にします
###ソルト&ペッパーノイズ
入力の一部を01にします。01かは等確率で決めました
###ガウシアンノイズ
入力に平均0で事前に決めた分散のガウス分布からサンプルした値を加えます

#コード

コード
DAEの学習にChainer1.3.1を用いました
しかし、一部すんなりと実装できない部分があるので説明します
###tied weightなAutoencoder
こちらを使用しました
###chainer.functions.sigmoid_cross_entropyの型が合わない
シグモイド関数からのクロスエントロピーロスにはchainer.functions.sigmoid_cross_entropyが使えます。しかしsigmoid_cross_entropyの教師の方の入力の型はint32ですが今回はfloat32の擬似バイナリ画像を使用したいので型が合いません。幸いなことにsigmoid_cross_entropyのforward,backwardの部分はfloat32も受け付けるようなので、chainerのソースからsigmoid_cross_entropyをコピペしてクラス名を変えて、check_type_forwardの部分でfloat32も受け付けるようにすればok

#デモ

学習したモデルをjsに読み込ませてリアルタイムに再構成させます
https://hatoo.github.io/mnist-DAE-demo/html/

#例

##マスキングノイズ80%
不完全な画像からそれっぽく数字に補完してくれる
z80.png

##ソルト&ペッパーノイズ50%
補完はしてくれないが黒いノイズを消去してくれる
sp50.png

##ガウシアンノイズ 分散0.75
軽く補完したりノイズを消したり
g75_5.png
g75_2.png

26
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?