いくつかの転送学習アルゴリズムを開発しようと思って、私はいくつかの訓練されたニューラルネットワークを使用してレイヤーを追加します。私はTensorflowとPythonを使用しています。Tensorflowモデルで低レイヤーを追加
Tensorflowの既存のグラフを使用するのは非常に一般的です。たとえば、metaGraphsを使用してグラフをインポートした後、ノードを追加して新しい高レイヤーを設定します。
vgg_saver = tf.train.import_meta_graph(dir + '/vgg/results/vgg-16.meta')
# Access the graph
vgg_graph = tf.get_default_graph()
# Retrieve VGG inputs
self.x_plh = vgg_graph.get_tensor_by_name('input:0')
# Choose some node
output_conv =vgg_graph.get_tensor_by_name('conv1_2:0')
# Build further operations
output_conv_shape = output_conv.get_shape().as_list()
W1 = tf.get_variable('W1', shape=[1, 1, output_conv_shape[3], 32],initializer=tf.random_normal_initializer(stddev=1e-1))
b1 = tf.get_variable('b1', shape=[32], initializer=tf.constant_initializer(0.1))
z1 = tf.nn.conv2d(output_conv, W1, strides=[1, 1, 1, 1], padding='SAME') + b1
a = tf.nn.relu(z1)
その後トレーニングに、あなたはあなたの層に加えて、以下のすべてのそれらを使用します。たとえば、私はこのコードhereが見つかりました。また、いくつかのレイヤーをフリーズし、セッション中に訓練された変数をインポートすることもできます。
しかし、私のアプローチでは、入力と最初のレイヤーの間に新しいレイヤーを追加し、したがって、グラフの最下部にノードを追加するだけでは、入力の直後にノードを挿入する必要があります。
今まで私はテンソルフローでそれを行う便利な方法が見つかっていません。何かお考えですか?それとも不可能なのでしょうか?
ありがとうございます。
一方的な方法で最初の答えが進む可能性がありますhttps://stackoverflow.com/questions/33748552/tensorflow-how-to-replace-a-node-in-a-calculation-graph –