characters今までは100個のサンプルデータとかでやってたんだけど、概ね動いてきたので実データで。同じ処理をしているはず。(183.712062)3分ぐらいかかった。0.020253)こちらは全然時間かからず。Learning下のような感じで書き方が変わる。第4章のバージョンについては説明がないので、誤差逆伝播法の理解を深めるためにもRuby化してみる。gradsdはデルタ(δ)のd。yという関数があったら、xの偏微分はδf/δx、yの偏微分はδf/δy、と書く。Ruby化Ruby版はこんな感じになった。dがdeltaの頭文字ということがわかっていれば、やっていることはレイヤー版と何ら変わりないことがわかるので、あとは本を読めば良い。sigmoid_gradはSigmoidレイヤーのbackwardメソッドと同じ意味。LossSoftmaxと損失関数(交差エントロピー誤差)を合わせたレイヤSoftmaxは推論では省略される。繰り返す誤差逆伝播法は2を効率化するもの。いえば積分は?全然本書とは関係ない話。積分も本書で扱ってる微分と同じ。数値積分はわかりやすい。90.minutes}という例があり、ほぼこのまま書いていたアプリがあった。iPhoneのSafariで頻繁にログアウトされるという報告があり、改めて確認するとPCでもブラウザを再起動するとCookieが消えていた。これはCookieにExpiresが付いていない時の挙動である。そこで、真っ先に疑われたのがこの設定。Rails標準のCookieStoreでは、expire_afterを設定するのでそちらに変更してみたら解消した。http://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.htmlとはいえREADMEに書いてあるので、中身を一応追ってみる。1redis-railsには実コードはないけどテストによると、session_storeの実体にはActionDispatch::Session::RedisStoreが使われる。https://github.com/redis-store/redis-rails/blob/master/test/redis_rails_test.rb2ActionDispatch::Session::RedisStoreはredis-actionpackで定義され、Rack::Session::Redisを継承している。https://github.com/redis-store/redis-actionpack/blob/master/lib/action_dispatch/middleware/session/redis_store.rb3Rack::Session::Redisはredis-rackで定義され、Rack::Session::Abstract::IDを継承している。https://github.com/redis-store/redis-rack/blob/master/lib/rack/session/redis.rb4Rack::Session::Abstract::IDはrackで定義され、さらにRack::Session::Abstract::Persistedを継承している。https://github.com/rack/rack/blob/master/lib/rack/session/abstract/id.rb(Persistedも同一ファイルに定義)ここにexpire_afterはあるが、expires_inは見当たらない。CookieStoreは?ActionDispatch::Session::AbstractStoreを継承して、それがさらにRack::Session::Abstract::Persistedを継承している。https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/session/cookie_store.rbhttps://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/session/abstract_store.rbつまり結局Rack::Session::Abstract::Persistedが使われる。クラス階層の途中でexpires_inを見てそれらしき処理をしてるクラスがいない場合、READMEが間違っている、でよさそう。P.112〜を参考に。交差エントロピー誤差P.94-95のバッチ対応版の理解に少し時間がかかった。0.5108256237659907結果が変わったので気になったけど、0がないyを使って、deltaをなくしたら同じ値になったので、deltaのせい。loss_Wの罠two_layer_net.pyのloss_WがW使ってない全部一緒の結果返ってくるんじゃ?他にも同じところで詰まってる人がいた。chains今の版だと説明が変わって少しわかりやすくなってるっぽい。gradここでxに渡されたものを、直接いじってるからもとのnetも変わってる、ということ。W(fに渡したx)はやはり使ってない。Ruby化する時に直接書き換えないコードにした。end結局numerical_gradientだと速度的に実用できなそうだったので、gradientメソッドの方を使ったけど...。その他.call()は[]や.()でもいいけど結局callが冗長ながらもわかりやすい。numerical_gradientに渡したfの話。it.iternext.()をit.iternext()にしてて無限ループした。