頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


機械学習におけるデータの範囲

最近またTensorFlowをいじってる。やったことメモ。

機械学習(TensorFlow)で位置計測っぽいことをやってみた
↑以前こういうのをやったんだけど、これを使って思い出しがてら気になってたデータの範囲について二つ確認。
1つは正解のラベルについて、もう一つは画像のデータについて。

(1)正解のラベル
この時は正解が無次元化された円の座標と半径で学習してる。座標は-1から1で半径は0超から0.5。この正解を得ようというネットワーク(CNN)だったんだが、この正解が無次元化されてなくてもいけんの?というのを確認しようとした。
座標が0から64.0の値を取る場合だと学習がうまく進まなかったので最後の出力層部分のコードをよくよく見ると、

y_conv=tf.nn.tanh(tf.matmul(h_fc2, W_fc3) + b_fc3

となってた。tan(θ)ってことは、-π/2 , π/2で発散するから-π/2 〜π/2の範囲を超えてるからか?ってことでtanhをreluに変えたらいけた。


(2)画像のデータ
画像のデータは0から1.0の値を取るとしてるんだけど、これが0〜255.0のfloatでもいいんじゃないの?といろいろと試してみたんだけど、結果から言うとなぜかできんかった。0〜2.0でもダメ。

tf.image.random_brightness(image, max_delta=0.4)
tf.image.random_contrast(image, lower=0.6, upper=1.4)

といった画像数水増し処理を特に考えず(作った時はどこかでサンプルを見つけたんだろうね)入れてたけど、これよく見ると場合によっては1.0を超えると思うんだ(すでにimageはtf.float32にキャストしてる)。もしかして今まではたまたま学習が進んだけど、実は悪さしてんじゃね?ってことで

tf.clip_by_value(image , 0.0 , 1.0 )

と言うclampと同じ処理を入れてみた。すると、どうよ。学習の進み具合がよくなってるやん!
不思議や。NNの処理をいくら見ても0〜1の範囲を超えるとまずそうな部分は俺には見つけられんのだが。いつか気付いたら追記するわ。





<< カメラで得た画像にVision frameworkを使う  TopPage  Vision.frameworkをObjective-Cでやってみた >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1094-6f576043




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad