2017-09-23 2 views
0

Aus Beispiel bei https://github.com/timediv/speechT, ich versuche, für die Verwendung mit LSTM-Netzwerk anzupassen, aber bitte helfen Sie bitte. Ich habe viele Kombinationen ausprobiert, aber ich habe immer Fehler, d. H. Eingabe muss Sequenz oder sonst sein. Ich muss zum Beispiel das LSTM-Netzwerk für die Spracherkennung implementieren, und nachdem ich es einige Wochen lang versucht habe, stehe ich immer noch im Codierungsproblem fest. Jeder kann mir helfen, Beispiel für die Verwendung von LSTM-Netzwerk mit der Probe wird gut sein.Wiederverwendung von SpracheT Beispiel mit LSTM-Netzwerk

class InputBatchLoader(BaseInputLoader): 
    def __init__(self, input_size, batch_size, data_generator_creator, max_steps=None): 

    super().__init__(input_size) 
    self.batch_size = batch_size 
    self.data_generator_creator = data_generator_creator 
    self.steps_left = max_steps 

    with tf.device("/cpu:0"): 


with tf.device("/cpu:0"): 
     # Define input and label placeholders 
     self.inputs = tf.placeholder(tf.float32, [batch_size, None, input_size], name='inputs') 

     self.sequence_lengths = tf.placeholder(tf.int32, [batch_size], name='sequence_lengths') 
     self.labels = tf.sparse_placeholder(tf.int32, name='labels') 

     # Queue for inputs and labels 
     self.queue = tf.FIFOQueue(dtypes=[tf.float32, tf.int32, tf.string], 
          capacity=100) 

     # queues do not support sparse tensors yet, we need to serialize... 
     serialized_labels = tf.serialize_many_sparse(self.labels) 

     self.enqueue_op = self.queue.enqueue([self.inputs, 
             self.sequence_lengths, 
             serialized_labels]) 

class Wav2LetterLSTMModel(SpeechModel): #Add Sep 14, 2017 to create LSTM model 

    def __init__(self, input_loader: BaseInputLoader, input_size: int, num_classes: int): 
super().__init__(input_loader, input_size, num_classes) 

    def _create_network(self, num_classes): 

cellsize = 256 
num_layers = 3 

inputs = self.inputs 
lstm_cell = rnn.BasicLSTMCell(cellsize, forget_bias=1.0) 
outputs, states = tf.nn.dynamic_rnn(lstm_cell, inputs, dtype=tf.float32) 

return tf.transpose(outputs, (1, 0, 2)) 

def create_default_model(flags, input_size: int, speech_input: BaseInputLoader) -> SpeechModel: 
    model = Wav2LetterLSTMModel(input_loader=speech_input, 
         input_size=input_size, 
         num_classes=speecht.vocabulary.SIZE + 1) #Add Sep 14, 2017, to use LSTM model 

    # TODO how can we restore only selected variables so we do not need to always create the full network? 
    if flags.command == 'train': 
    model.add_training_ops(learning_rate=flags.learning_rate, 

learning_rate_decay_factor=flags.learning_rate_decay_factor, 
         max_gradient_norm=flags.max_gradient_norm, 
         momentum=flags.momentum) 
model.add_decoding_ops() 
elif flags.command == 'export': 
model.add_training_ops() 
model.add_decoding_ops() 
    else: 
model.add_training_ops() 
model.add_decoding_ops(language_model=flags.language_model, 
         lm_weight=flags.lm_weight, 
         word_count_weight=flags.word_count_weight, 
         valid_word_count_weight=flags.valid_word_count_weight) 

    model.finalize(log_dir=flags.log_dir, 
      run_name=flags.run_name, 
      run_type=flags.run_type) 

    return model 
+0

Eigentlich, wie tun wir füttern self.inputs = tf.placeholder (tf.float32, [batch_size, None, input_size] name = 'Eingänge') in Ausgaben, states = tf.nn.dynamic_rnn (lstm_cell, Eingaben, dtype = tf.float32) –

Antwort

0

Endlich verwende ich diese

XT = tf.transpose(inputs, [1, 0, 2]) 
XR = tf.reshape(XT, [-1, self.input_size]) 
X_split = tf.split(XR, cellsize, 0) 

lstm = rnn.BasicLSTMCell(cellsize, forget_bias=1.0, state_is_tuple=True) 
outputs, _states = rnn.static_rnn(lstm, X_split, dtype=tf.float32)