2016-08-17 7 views
1

デフォルトでは、セッションセーバーは作成されたすべての変数を保存し、結果として非常に大きなチェックポイントファイルが作成されます。モデルパラメータと特定のセッション変数のみを保存します。オプティマイザの状態とグローバル・ステップ。セーバの初期化中にホワイトリストの変数以外のベストプラクティスは何ですか?テンソルフローの必須パラメータのみを保存する方法は?

+0

私が試みている1つの方法は、保存したくない他の変数のコレクションを作成することです。出力変数。次に、そのコレクションにないすべての変数をホワイトリストに入れます。 – Falcon

答えて

1

いくつかの調査(異なるバッチサイズでチェックポイントを設定し、all_variablesを印刷した後)、私は私が心配していることがわかりました。実際、テンソルフローでは、Opの結果は保存されません。 yy = k * x + bです。したがって、torch-nnとは異なり、非パラメータが保存されることをめったに心配する必要はありません。

1

デフォルトでセーバーはall_variables()から変数リストを取得します。この変数はすべてGraphKeys.VARIABLESの変数です。 Variable(..., collections=[]を使用すると、そのコレクションから変数を除外できます。あなたはキーが文字列として自分の名前であることで、保存したいすべての変数が含まれている辞書を作ることができる非チェックポイントlimit_epochs変数

with ops.name_scope(name, "limit_epochs", [tensor]) as name: 
    zero64 = constant_op.constant(0, dtype=dtypes.int64) 
    epochs = variables.Variable(
     zero64, name="epochs", trainable=False, 
     collections=[ops.GraphKeys.LOCAL_VARIABLES]) 
+0

'collections = []'の場合、変数は決して初期化されません。 'collections = [ops.GraphKeys.LOCAL_VARIABLES]'は正しい解です。それは 'tf.local_variables_initializer()'で初期化して使用する必要があります。 –

0

のためにコードベースで行われるようにそれとも、別のコレクションとしてそれを置くことができます。この辞書をsaver.save()関数に渡します。 これはapiの示唆です。

関連する問題