2016-03-25 14 views
5

私はトーチに訓練されたニューラルネットワークを与えられており、テンソルフローで正確に再構築する必要があります。私はテンソルフローでネットワークのアーキテクチャを正しく定義していると信じていますが、体重とバイアステンソルを転送するのに問題があります。サードパーティのパッケージを使用して、トーチネットワークからすべての重量とバイアスのテンソルをnumpyの配列に変換し、ディスクに書きました。私はそれらを私のpythonプログラムにロードすることができますが、私はそれらをテンソルフローネットワークの対応するレイヤーに割り当てる方法を理解できません。例えばテンソルフローconv2d操作の重みとバイアステンソルを設定する

、Iはtensorflowドキュメントによれば

kernel_1 = tf.Variable(tf.truncated_normal([11,11,3,64], stddev=0.1)) 
conv_kernel_1 = tf.nn.conv2d(input, kernel_1, [1,4,4,1], padding='SAME') 
biases_1 = tf.Variable(tf.zeros[64]) 
bias_layer_1 = tf.nn_add(conv_kernel_1, biases_1) 

としてtensorflowで定義されたコンボリューション層を有し、tf.nn.conv2d動作は重量テンソルを構築するkernel_1変数で定義された形状を使用します。しかし、私はファイルからロードしたウェイト配列に設定するために、そのウェイトテンソルにアクセスする方法を理解できません。

重量テンソルを明示的に設定することはできますか?そしてもしそうなら、どうですか?

(同じ質問は、バイアステンソルに適用されます。)

答えて

5

あなたがnumpyの配列の重みとバイアスを持っている場合、あなたのTensorFlowネットワークにそれらを接続する簡単なはず:

weights_1_array = ... # ndarray of weights for layer 1 
biases_1_array = ... # ndarray of biases for layer 1 

conv_kernel_1 = tf.nn.conv2d(input, weights_1_array, [1, 4, 4, 1], padding='SAME') 
bias_layer_1 = tf.nn.bias_add(conv_kernel_1, biases_1_array) 

weights_1_arraybiases_1_arrayが正しいデータ形式であることを確認する必要があります。必要なフィルタ形状の説明については、tf.nn.conv2d()のドキュメントを参照してください。

+0

私はこのアプローチを試してみました。ValueError:Shape(64、363)にはランク4が必要です。私の理解は、フィルターパラメータがウェイトテンソルの作成方法を定義しています – bdawson1

+0

またはロードしたものを再形成する必要がありますか?重量テンソル?実行中に値を保持しますか? – bdawson1

+0

はい、体重テンソルを変更する必要があるかもしれません。 'tf.nn.conv2d()'演算では、次元が '[filter_height、filter_width、in_channels、out_channels]'の4-Dである必要があります。 – mrry

関連する問題