私はトーチに訓練されたニューラルネットワークを与えられており、テンソルフローで正確に再構築する必要があります。私はテンソルフローでネットワークのアーキテクチャを正しく定義していると信じていますが、体重とバイアステンソルを転送するのに問題があります。サードパーティのパッケージを使用して、トーチネットワークからすべての重量とバイアスのテンソルを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変数で定義された形状を使用します。しかし、私はファイルからロードしたウェイト配列に設定するために、そのウェイトテンソルにアクセスする方法を理解できません。
重量テンソルを明示的に設定することはできますか?そしてもしそうなら、どうですか?
(同じ質問は、バイアステンソルに適用されます。)
私はこのアプローチを試してみました。ValueError:Shape(64、363)にはランク4が必要です。私の理解は、フィルターパラメータがウェイトテンソルの作成方法を定義しています – bdawson1
またはロードしたものを再形成する必要がありますか?重量テンソル?実行中に値を保持しますか? – bdawson1
はい、体重テンソルを変更する必要があるかもしれません。 'tf.nn.conv2d()'演算では、次元が '[filter_height、filter_width、in_channels、out_channels]'の4-Dである必要があります。 – mrry