2017-07-12 3 views
1

Je commence à peine à apprendre TensorFlow et j'ai quelques problèmes avec lui. J'ai lu le document - COMPRESSION PROFONDE: COMPRESSER LES RÉSEAUX NEURONAUX PROFONDES AVEC L'ÉLAGAGE, LA QUANTIFICATION FORMÉE ET LE CODAGE DE HUFFMAN il y a quelques jours. Dans la partie d'élagage, les auteurs commencent par apprendre la connectivité via une formation réseau normale. Ensuite, ils élaguent les connexions de faible poids: toutes les connexions avec des poids inférieurs à un seuil sont supprimées du réseau. Enfin, ils réapprennent le réseau à apprendre les poids finaux pour les connexions clairsemées restantes.comment modifier la valeur d'un tenseur lors de la conception du réseau dans TensorFlow

Je veux obtenir tous les poids de chaque couche et comparer au seuil, un par un et définissez les petits poids zero.Here est mon code et il y a une TypeError d'exception («Utilisation d'un tf.Tensor comme Python bool n'est pas permis."). Comment puis-je obtenir la valeur du tenseur de poids lorsque je conçois le réseau? Est-ce que quelqu'un a déjà implémenté ce code ou toute autre méthode suggérée? Merci d'avance!

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

Répondre

0

Au lieu de passer par l'élément par élément, vous pouvez utiliser tf.less pour comparer la matrice entière à la fois, puis attribuez-lui en fonction de la matrice booléenne.

La réponse suivante devrait vous donner une meilleure idée de la façon de le faire:

Conditional assignment of tensor values in TensorFlow

+0

Je suis très reconnaissant pour votre Véry reply.It utile. Mais la dernière déclaration ne semble pas être en cours d'exécution. Je ne sais pas comment résoudre it.Here est mon code: 'compare_matrix = tf.constant (rapport, forme = [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

L'instruction 'session.run' est définie dans un autre fichier, y a-t-il un problème? –

+0

J'ai résolu ce problème. Merci beaucoup! –