v0.9がリリースされています。NetworkモデルのClassifierを扱うときに便利なDNNClassifier周辺で罠が多いことが分かったので備忘録としてメモを残しておきます。Learn)ベースのものです。いろいろな罠の話をしていますが、TensorFlow本体の話では無いのでご注意ください。結論からいうとv0.9は実用段階では無さそうです。v0.9はmodelをsave/restoreできないいきなり致命的な問題です。要するに学習したmodelを使いまわせないというもの。当然のように、IssueやStackOverflowでは同様の質問が乱立しています。workこれはv0.8まであったTensorFlowDNNClassifierがv0.9からDeprecatedになってDNNClassifierの利用を推奨される流れで入ったバグのようです。restoreをする必要がある場合、2016/07/18時点ではv0.8の利用が必要になります。いろんなIssueで話題になってるので、この問題は近いうちに修正されるでしょう。restoreはおいといて、ひとまずコードをTensorFlowDNNClassifierからDNNClassifierに移そうか、、と思うのですが、v0.9のDNNClassifierはパフォーマンスがかなり悪いです。TensorFlowClassifierで学習とテストデータ、およびstepを固定し、fitにかかる時間とclassification_reportを計測してみると以下のような結果に。[sec]まず、DNNClassifierはTensorFlowDNNClassifierと比較してprecisionが10%ほど向上。デフォルトのハイパーパラメータが一部異なるのでしょう。原因は不明確ですが、ひとまず結果が良くなる分はまだ良いです。問題は、elapsed_timeが68秒から7359秒とハチャメチャに長くなってる点。これだと使い物にならなさすぎるので、Stackoverflowに投げてみたものの、2016/07/18時点ではまだ回答はありません。TensorFlowDNNClassifier?このとおり、TensorFlowDNNClassifierは近い将来DNNClassifierに乗り換える必要があるものの、このパフォーマンス差はだと乗り換えは辛いです。何もいいことが無い印象です。v0.8のTensorFlowDNNClassifierはv0.9と比較すると遅いこれまでの通り、v0.9は辛い状態かつmodelをsaveできない状態なので、v0.9でチューニングしたハイパーパラメータでv0.8を利用してmodelをsaveさせることにします。v0.9では実はTensorFlowDNNClassifierはDeprecatedになりながらも内部では全体的にパフォーマンスが向上してるようですね。ここまでくるとDeprecaedにするのもやめてくれ、、、と思い始めます。detected")が出てコケます。ちなみにsaveを呼び出さない場合はコケないのでこれも地味に辛いです。回避方法としては、「Optimizerは使わない」を選ぶしか無いのかな。rateを調整できないのが辛いですね。steps=steps)ちなみにv0.9ではOptimizerを指定したTensorFlowDNNClassifierでsaveを呼び出してもエラーにはなりません。modelデータの保存もできてないので、このバグが修正されたときにOptimizerのバグも治っているかどうかは不明です。利用save/restoreのバグが修正されるであろう、v0.9.1相当のリリースを待つDNNClassifierのパフォーマンスが上がってたらTensorFlowDNNClassifierから乗り換える。上がってなかったらしばらく使うのような感じでしょうか。TensorFlowの知識は少ないので、誤った情報がある場合はぜひ教えていただきたいです。ArchiveAboutこのBlogはクックパッドに勤めるWebエンジニアがLLネタや情報技術について直感で思ったことを何も考えず発信するサイトです。コメントやお問い合わせ、執筆依頼などは@ryo_katsuma宛のmention、またはメールなどでお待ちしています。