TensorFlowの変数(Variable)を一部分だけ復元(restore)する – There are some issues When I restore a part of tf.Variables by import_meta_graph –

こんにちは、ばいろん(@discexOmnes)です。

今日はTensorFlowを使う上で悩み事があったので紹介します。

悩み

TensorFlowを使った学習済みのモデル(RNN/LSTM)を使いまわすためにsava/restoreのメソッドを使って、保存した変数たちの一部であるW:weightとB:biasだけを復元したいが、エラーが発生する。

import_meta_graphを使ってTensorFlowのモデルの復元を試みる

import_meta_graphという関数はご存知でしょうか?この関数はTensorFlowで保存した変数の中で自分が使いたいものを復元できるらしいのです。この機能を使うことで取り扱う変数を局所化し、コードを見ただけで直感的に変数のスコープを認識できるように改善できそうです。しかし、実際に試してみると2つの変数は確かに復元できるのですが、それだけではモデルそのものの復元ができないことがわかりました。

 

従来のモデルからの変更点とエラー

すごく基本的のRNN/LSTMのモデルのクラスです。従来モデルはメンバ変数に出てきた変数を全部のせの大盤振る舞いだったのですが、新しいモデルでは局所化できる変数(placeholderや保存する必要がないいくつかの変数)をクラスのメンバ変数から排除することで、管理しやすい+読みやすいコードを目指しました。

結論から言うと今のところ実行は失敗しています。どうやらweightとbiasだけではなく、optimizer(勾配を最適にするやつ)の演算の実行時にコケるらしいです。ですが、optimizer(tf.train.hogeOptimizer)は変数(Variable)ではなく演算(Operation)なので変数の復元方法と異なるようです。どうやら復元のためにはget_operation_by_nameやget_collectionがカギを握っていそうなので、実験して経過をまた載せようと思います。それでは。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to top