2017-05-02 2 views
0

Wie wiederhole ich einen Tensor in einer for-Schleife? ..Iterate einen Tensor in einer for-Schleife?

Ich möchte Faltung auf jeder Zeile meines input_tensor tun ... aber kann nicht scheinen, in einem Tensor zu iterieren.

Zeit, um es wie diese versuchen:

def row_convolution(input): 
    filter_size = 8 
    print input.dtype 
    print input.get_shape() 
    for units in xrange(splits): 
     extract = input[units:units+filter_size,:,:] 
     for row_of_extract in extract: 
      for unit in row_of_extract: 
       temp_list.append((Conv1D(filters = 1, kernel_size = 1, activation='relu' , name = 'conv')(unit))) 
      print len(temp_list) 
      sum_temp_list.append(sum(temp_list)) 
     sum_sum_temp_list.append(sum(sum_temp_list)) 
    conv_feature_map.append(sum_sum_temp_list) 
    return np.array(conv_feature_map) 

Antwort

0

Es sieht aus wie Sie für Operationen definieren tensorflow jeden Eingang versuchen. Dies ist ein häufiges Missverständnis über den Rahmen.

Sie müssen zuerst die Operationen definieren, die Sie ausführen werden, alle Operationen müssen im Voraus definiert werden. Normalerweise sieht es ungefähr so ​​aus:

g = tf.Graph() 
with g.as_default(): 
    # define some placeholders to accept your input 
    X = tf.placeholder(tf.float32, shape=[1000,1]) 
    y = tf.placeholder(tf.float32, shape=[1]) 
    # add more operations... 
    Conv1D(...) # add your convolution operations 
    # add the rest of your operations 
    optimizer = tf.train.AdamOptimizer(0.00001).minimize(loss) 

Jetzt wurde die Grafik definiert, alles davon. Betrachten Sie das als behoben, Sie werden nichts wieder hinzufügen.

Sie werden nun Daten über das Fest Graph laufen:

with g.as_default(), tf.Session() as sess: 
    X_data, y_data = get_my_data() 
    # run this in a loop 
    result = sess.run([optimizer,loss], feed_dict={X:X_data, y:y_data}) 

Beachten Sie, dass Ihre Daten und Etiketten sollten in einem Batch-Feed werden, so dass die erste Dimension Ihrer Daten für N Anzahl von Datenpunkten (N = 1 ist natürlich vollkommen akzeptabel). Sie sollten die Daten so vorverarbeiten, dass sie in diesem Format vorliegen. Zum Beispiel würde ein Stapel von 10 MNIST-Ziffern in Form sein [10,28,28,1]. Das ist:

  • 10 Datenabtastwerte
  • Bilder werden 28 Pixel Höhe
  • Bilder sind 28 Pixel Breite
  • Es ist ein Graustufenbild, so ein Farbkanal
+0

Ich baue mein Modell in Keras, die oben auf Tensorflow ist. Ich verwende eine Lamdba-Ebene, um eine Ebene in Keras zu definieren, um diese Operation auszuführen .. das ist, was die Funktion, die ich verwende .. Ich bin nicht ganz sicher, ob das, was ich tue, sogar in Keras oder Tensorflow-Frameworks legal ist ... Es muss sein anwendbar in Keras .. so vermute ich, dass ich einen Fehler beim Hinzufügen von Tensorflow-Label gemacht habe. –

+0

Ich möchte es nicht trainieren. Ich will nur Daten, wie sie über die Conv1d formatiert werden und dann ausgegeben werden. –

+0

Gleiches Prinzip gilt, Sie müssen Ihr Diagramm definieren und dann 'sess.run (...)' verwenden. Wenn Sie nur Inferenz machen, werden Sie das OP nicht anfordern, sondern Sie werden ein OP anfordern, das das gewünschte Ergebnis liefert. Tensorflow wird sich nicht mit Backprop und Optimierung beschäftigen, wenn Sie das nicht wünschen Rückgabewert. Wenn Sie das Modell bereits trainiert haben, laden Sie einen Prüfpunkt, definieren Sie also Ihre Modellkomponenten, laden Sie den Prüfpunkt, berühren Sie ihn nicht und geben Sie das Modell mit 'sess.run' an –

Verwandte Themen