0

Ich arbeite an einem Textklassifikationsproblem. Ich habe 3M + Reihen, die in 20 Kategorien eingeteilt werden müssen.Tensorboard Einbettung Visualisierung

Im Folgenden sind zwei Code-Schnipsel aus meinem gesamten Code:

Dies ist der Code, wo meine tf Variablen definiert sind .:

class TextCNNRNN(object): 
    def __init__(self, embedding_mat, non_static, hidden_unit, sequence_length, max_pool_size, 
       num_classes, embedding_size, filter_sizes, num_filters, l2_reg_lambda=0.0): 

     self.input_x = tf.placeholder(tf.int32, [None, sequence_length], name='input_x') 
     self.input_y = tf.placeholder(tf.float32, [None, num_classes], name='input_y') 
     self.dropout_keep_prob = tf.placeholder(tf.float32, name='dropout_keep_prob') 
     self.batch_size = tf.placeholder(tf.int32, []) 
     self.pad = tf.placeholder(tf.float32, [None, 1, embedding_size, 1], name='pad') 
     self.real_len = tf.placeholder(tf.int32, [None], name='real_len') 

     l2_loss = tf.constant(0.0) 

     with tf.device('/cpu:0'), tf.name_scope('embedding'): 
      self.emb_var = tf.Variable(embedding_mat, name='emb_var') 
      # if not non_static: 
      # self.emb_var = tf.constant(embedding_mat, name='enb_var') 
      # else: 
      # self.emb_var = tf.Variable(embedding_mat, name='emb_var') 
      self.embedded_chars = tf.nn.embedding_lookup(self.emb_var, self.input_x) 
      self.emb = tf.expand_dims(self.embedded_chars, -1) 

Der Tensor Ich mag würde, ist embedded_chars sichtbar zu machen.

Und dies ist der Code, in dem I-Eingang an den Projektor api gegeben ist:

config = projector.ProjectorConfig() 
config.model_checkpoint_path = checkpoint_prefix + str(best_at_step) +'.ckpt' 
embedding = config.embeddings.add() 
embedding.tensor_name = cnn_rnn.embedded_chars.name 

#embedding.metadata_path = 'metadata.tsv' 
emb_writer = tf.summary.FileWriter(metadata_path,sess.graph) 
projector.visualize_embeddings(emb_writer, config) 

Meine Erwartung: Ich mag meine ausgebildeten Eingangsdaten sehen und wie seine klassifiziert werden.

Tatsächliches Ergebnis: Wenn ich Embedded_chars Tensor als Eingabe für den Projektor verwende, Lasten feststellen. Wenn ich jedoch emb_var verwende, sehe ich, dass die Einbettungen geladen werden. Das Problem ist, dass emb_var nur mein Vokabular ist, aber ich muss meinen tatsächlichen Datensatz sehen.

+0

Es gibt also ein Problem beim Übergeben von 'embedded_chars' (sind die Formen anders? Gibt es einen Fehler?). Aber es sieht so aus, als würden Sie nicht nur die Einbettungen für die Trainingsdaten visualisieren, was eher eine Feature-Anforderung als eine StackOverflow-Frage ist. –

+0

Wie kann ich verstehen, dass Einbettungen erlernte Tensoren projizieren können? Nein ? – MLNINJA

Antwort

0

Ich habe es herausgefunden.

final_embed_matrix = sess.run(cnn_rnn.emb_var) 
      embedding_var = tf.Variable(final_embed_matrix, name='embedding_viz' + str(i)) 
      saver_embed = tf.train.Saver([embedding_var, output_var]) 
      sess.run(embedding_var.initializer) 
      config = projector.ProjectorConfig() 
      config.model_checkpoint_path = emb_dir + '/' + foldername + str(best_at_step)+'viz' +'.ckpt' 
      emb_writer = tf.summary.FileWriter(emb_dir, sess.graph) 

      embedding = config.embeddings.add() 
      embedding.metadata_path = foldername + '_metadata.tsv' 
      embedding.tensor_name = output_var.name 

      embedding = config.embeddings.add() 
      embedding.metadata_path = 'metadata.tsv' 
      embedding.tensor_name = embedding_var.name 

      projector.visualize_embeddings(emb_writer, config) 
      saver_embed.save(sess, checkpoint_viz_prefix + str(best_at_step)+'viz' +'.ckpt')