2016-06-16 8 views

答えて

0

短い答え:グラフを調整することはできませんが、達成したいことを得る方法はおそらくあります。

長い回答:TensorFlowグラフオブジェクトは構造的に変更できません。それらのいくつかの側面(ノードに流れるテンソルの形状など)は変更できますが、ノードを削除したり、既存の2つのノード間にノードを追加することはできません。しかし、同じ効果を得るためにカップルの方法があります:あなたの変更は追加のみに限定されている場合は

  1. は、その後、これをやっても問題はありません。たとえば、ネットワークの終わりにレイヤーを追加する場合は、そのレイヤーを探します。同様に、2番目から最後のレイヤーを入力とし、既存の最後のレイヤーを無視するだけの新しいレイヤーを追加するだけで、最後のレイヤーを「置き換える」ことができます。グラフを実行するとき、元の最後のレイヤの出力を求めないと、TensorFlowは決して計算しません。

  2. 変更を行う必要がある場合は、ノードごとにグラフノードのコピーをゆっくり作成する方法もあります。オリジナルのグラフ定義を読み込んでから、元のものを繰り返して、新しいコピーに似たようなノードを追加して、独自の新しいグラフを作成してください。これは多少面倒でエラーが起こりやすい可能性があります。さらに...

  3. ...グラフを「調整」する必要はありません。 VGG-16の実装に類似したものをお望みの場合は、python codeを直接操作してください。 fc6の幅が気に入らないのですか?それを生成するコードを編集するだけです。

これは本当の問題になります。あなたの目標がネットワークを変更することであるならば、は重みを再利用できるようになります.2と3は動作しません。現実的には、これは多くの場合可能ではありません。たとえば、VGG-16の途中でレイヤーを追加または削除したい場合(たとえば、別の畳み込みレイヤーを追加するなど)、事前にトレーニングされたウェイトは無効になります。変更の上流にある事前にトレーニングされたウェイトを回収することは可能かもしれませんが、下流のすべてが基本的には間違っています。とにかくネットワークを再トレーニングする必要があります。 (事前に訓練されたネットワークを初期設定として使用することはできますが、まだ再トレーニングする必要があります)。ネットワークに追加するだけでも(1.と同様)、ネットワークを訓練する必要があります。

0

ありがとうございます!私はグラフを再作成し、グラフ定義の値を取得することですべての重みをロードしました。

これは理論的には[それは次のようになり、質問に答えるかもしれないが...重量

https://www.tensorflow.org/versions/r0.9/how_tos/tool_developers/index.html

+0

の名前です。これは(「インポート/ ...」)graph.get_tensor_by_nameによって行われていましたここでの答えの本質的な部分を含めるために、「参考」(// meta.stackoverflow.com/q/8259)を参照してください。 – manetsus

関連する問題