web-dev-qa-db-ja.com

テンソルフローを使用して複数の入力グラフを作成するにはどうすればよいですか?

複数の入力を持つTensorFlowグラフを定義することは可能ですか?たとえば、グラフに2つの画像と1つのテキストを与えたいと思います。それぞれの画像は、最後にfcレイヤーがある一連のレイヤーによって処理されます。次に、3つの表現を考慮に入れた損失関数を計算するノードがあります。目的は、3つのネットがジョイント表現の損失を考慮して逆伝播できるようにすることです。出来ますか?それについての例/チュートリアル?前もって感謝します!

11
user2614596

これは完全に簡単なことです。 「1つの入力」の場合、次のようになります。

def build_column(x, input_size):

    w = tf.Variable(tf.random_normal([input_size, 20]))
    b = tf.Variable(tf.random_normal([20]))
    processing1 = tf.nn.sigmoid(tf.matmul(x, w) + b)

    w = tf.Variable(tf.random_normal([20, 3]))
    b = tf.Variable(tf.random_normal([3]))
    return tf.nn.sigmoid(tf.matmul(processing1, w) + b)

input1 = tf.placeholder(tf.float32, [None, 2])
output1 = build_column(input1, 2) # 2-20-3 network

そして、そのような「列」をさらに追加して、いつでも好きなときにそれらをマージすることができます

input1 = tf.placeholder(tf.float32, [None, 2])
output1 = build_column(input1, 2)

input2 = tf.placeholder(tf.float32, [None, 10])
output2 = build_column(input1, 10)

input3 = tf.placeholder(tf.float32, [None, 5])
output3 = build_column(input1, 5)


whole_model = output1 + output2 + output3 # since they are all the same size

次のようなネットワークが表示されます。

 2-20-3\
        \
10-20-3--SUM (dimension-wise)
        /
 5-20-3/

または単一値の出力を作成する

w1 = tf.Variable(tf.random_normal([3, 1]))
w2 = tf.Variable(tf.random_normal([3, 1]))
w3 = tf.Variable(tf.random_normal([3, 1]))

whole_model = tf.matmul(output1, w1) + tf.matmul(output2, w2) + tf.matmul(output3, w3)

取得するため

 2-20-3\
        \
10-20-3--1---
        /
 5-20-3/
15
lejlot