2016-10-29 2 views
6

Ist es möglich, einen TensorFlow-Graphen mit mehr als einem Eingang zu definieren? Zum Beispiel möchte ich dem Graph zwei Bilder und einen Text geben, jeder wird von einer Reihe von Schichten mit einer fc-Schicht am Ende verarbeitet. Dann gibt es einen Knoten, der eine verlustbehaftete Funktion berechnet, die die drei Darstellungen berücksichtigt. Ziel ist es, die drei Netze unter Berücksichtigung der gemeinsamen Darstellung verlustbehaftet rückpropagieren zu lassen. Ist es möglich? irgendein Beispiel/Tutorial dazu? danke im voraus!Wie erstellt man ein Diagramm mit mehreren Eingängen mit Tensorfluss?

Antwort

9

Das ist völlig einfach Ding. Für „einen Eingang“ würden Sie so etwas wie:

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(x, w) + b) 

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

und Sie können einfach mehr solcher „Spalten“ hinzufügen und kombiniere sie Sie jederzeit

wollen
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 

und Sie werden Netzwerk erhalten, die wie folgt aussieht:

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

oder einen einzelnen bewerteten Ausgangs

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) 
machen 210

2-20-3\ 
     \ 
10-20-3--1--- 
     /
5-20-3/ 
+0

bekommen Obwohl dies vor 2 Jahren, ich habe eine Frage bezüglich der Leitung des nn. Wie würdest du das nn einspeisen, wenn es mehrere Eingaben gibt? Ist es nur ein einfacher sess.run (Optimierer, {input1: getBatch1, input2: getBatch2, input3: getBatch3} mit den entsprechenden Eingängen? Und wenn der Optimierer trainiert ist, wird TF automatisch die Eingänge für jeden der verschiedenen Eingänge einspeisen nn? Danke! – Luna

+0

@Luna wenn Sie eine Frage haben - bitte stellen Sie eine Frage, anstatt einen Kommentar zu einer Antwort zu posten. – lejlot

Verwandte Themen