2017-07-28 9 views
6

テンソルボードのヒストグラムにtf.layers.denseの重みを描画したいのですが、パラメータに表示されません。どうすればいいですか?tf.layers.denseでウェイトを取得するには?

+1

Welcome to Stackoverflow! [ヘルプページ](http://stackoverflow.com/help)、特に[ここではどのトピックを聞くことができますか?](http://stackoverflow.com/help/)のセクションを読んでください。 on-topic)と[[どのような種類の質問を避けるべきですか?]](http://stackoverflow.com/help/dont-ask)を参照してください。また、[ツアー](http://stackoverflow.com/tour)をご覧になり、[良い質問をする方法](http://stackoverflow.com/help/how-to-ask)を読んでください。最後に、[最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)の作成方法を学んでください。 – Markus

答えて

11

あなたは明らかにあなたがで作業している他のグラフでtf.get_default_graph()を置き換えることができます

x = tf.dense(...) 
weights = tf.get_default_graph().get_tensor_by_name(
    os.path.split(x.name)[0] + '/kernel:0')) 

を使用することができますので、重みは、kernelという名前の変数として追加されます。

+0

素晴らしい!それは私の質問を解決する。ありがとう – user8381550

+3

バイアスを得るには 'bias = tf。get_default_graph()。get_tensor_by_name( os.path.split(x.name)[0] + '/ bias:0') ' – collector

+0

これは解決済みとマークされているはずです。 –

2

最新tensorflow層APIは、すべての作成変数はtf.get_variableコールを使用しています。これにより、変数を再度使用する場合は、tf.get_variable関数を使用して、取得する変数の名前を指定するだけで済みます。

tf.layers.denseの場合、変数はlayer_name/kernelとして作成されます。だから、あなたは言って変数を取得できます。

weights = tf.get_variable("layer_name/kernel") # do not specify 
# the shape here or it will confuse tensorflow into creating a new one. 

[編集]:Tensorflowの新バージョンでは、今層のAPIに機能とオブジェクト指向のインターフェイスの両方を持っています。計算目的でのみレイヤーが必要な場合は、機能的なAPIを使用することをお勧めします。関数名は小文字で始まります(例:tf.layers.dense(...))。層オブジェクトは、大文字の最初の文字を使用して作成することができます。 - >tf.layers.Dense(...)。このレイヤオブジェクトのハンドルを取得したら、そのレイヤのすべての機能を使用できます。ウェイトを取得するには、obj.trainable_weightsを使用すると、そのレイヤのスコープ内にあるすべての学習可能変数のリストが返されます。

2

私はこの問題に遭遇し、ただ解決しました。 tf.layers.denseの名前は、カーネルの名前の接頭辞と同じである必要はありません。私のテンソルは "dense_2/xxx"ですが、カーネルは "dense_1/kernel:0"です。 tf.get_variableが機能するようにするには、同じプレフィックスを所有する2つの名前を作成するようにをtf.layers.dense関数に設定することをお勧めします。以下のデモとして動作します。

l=tf.layers.dense(input_tf_xxx,300,name='ip1') 
with tf.variable_scope('ip1', reuse=True): 
    w = tf.get_variable('kernel') 

ところで、私のtfバージョンは1.3です。

0

私はテンソルフローに夢中になります。

私はこれを実行します。トレーニングの後

sess.run(x.kernel)

、と私はウェイトを取得します。

記載された特性から来る。here

私はtfで何かするにはわずかに異なる方法があるようで、チュートリアルを分割するように見えるので、私は狂っていると言っています。

関連する問題