2017-07-12 1 views
1

Ich fange gerade an, TensorFlow zu lernen, und ich habe einige Probleme damit. Ich lese das Papier - DEEP COMPRESSION: TIEFE NEURAL NETZWERKE MIT PRUNING, TRAINED QUANTIZATION UND HUFFMAN CODING vor ein paar Tagen. Beim Beschneiden beginnen die Autoren mit dem Erlernen der Konnektivität über normales Netzwerktraining. Als nächstes werden die Verbindungen mit geringem Gewicht abgeschnitten: Alle Verbindungen mit Gewichten unterhalb eines Schwellenwerts werden aus dem Netzwerk entfernt. Schließlich trainieren sie das Netzwerk neu, um die endgültigen Gewichte für die verbleibenden spärlichen Verbindungen zu lernen.Wie ändere ich den Wert eines Tensors beim Entwurf des Netzwerks in TensorFlow

Ich möchte alle Gewichte jeder Schicht erhalten und an die Schwelle einer nach dem anderen zu vergleichen, und stellen Sie die kleinen Gewichte zero.Here mein Code und es gibt eine Ausnahme Typeerror ("eine tf.Tensor als Python bool nicht ist dürfen."). Wie kann ich den Wert des Gewichtstensors erhalten, wenn ich das Netzwerk entwerfe? Hat jemand diesen Code noch implementiert oder eine andere vorgeschlagene Methode? Danke im Voraus!

with tf.variable_scope('layer1-conv1'): 
    conv1_weights = tf.get_variable(
     "weight", [CONV1_SIZE, CONV1_SIZE, NUM_CHANNELS, CONV1_DEEP], 
     initializer = tf.truncated_normal_initializer(stddev=0.1) 
    ) 

    shapeDim=CONV1_SIZE*CONV1_SIZE*NUM_CHANNELS*CONV1_DEEP 
    reshape_w=tf.reshape(conv1_weights,[-1]) 

    i=0 
    if step != 0 and step != 1: 
     while i < shapeDim: 
      if reshape_w[i] < RATIO: 
       reshape_w[i] = 0 

    conv1_weights=tf.reshape(reshape_w, [CONV1_SIZE, CONV1_SIZE, NUM_CHANNELS, CONV1_DEEP]) 

    conv1_biases = tf.get_variable("bias", [CONV1_DEEP], initializer=tf.constant_initializer(0.0)) 

    conv1 = tf.nn.conv2d(input_tensor, conv1_weights, strides=[1, 1, 1, 1], padding='SAME') 

    relu1 = tf.nn.relu(tf.nn.bias_add(conv1, conv1_biases)) 

Antwort

0

Statt durch Element-für-Element gehen, können Sie tf.less verwenden, um die gesamte Matrix auf einmal, zu vergleichen und dann auf der Booleschen Matrix zuweisen basiert.

Die folgende Antwort sollten Sie eine bessere Vorstellung davon, wie dies zu tun:

Conditional assignment of tensor values in TensorFlow

+0

ich sehr dankbar bin für Ihre reply.It sehr hilfreich ist. Aber die letzte Anweisung scheint nicht ausgeführt zu werden. Ich weiß nicht, wie sie zu beheben it.Here ist mein Code: 'compare_matrix = tf.constant (RATIO, Form = [CONV1_SIZE, CONV1_SIZE, NUM_CHANNELS, CONV1_DEEP]) compare_bool = tf.less (conv1_weights, compare_matrix) conv1_weights.assign (tf.where (compare_bool, tf.zeros_like (conv1_weights), conv1_weights)) ' –

+0

Die Anweisung 'session.run' ist in einer anderen Datei definiert, gibt es ein Problem? –

+0

Ich habe dieses Problem gelöst. Vielen Dank! –

Verwandte Themen