4

Tensorflow acemi burada. Bir RNN kurmaya çalışıyorum. Giriş verilerim, her zaman adımında bir parçacık kümesinin (x, y) konumlarını temsil eden instance_size boyutundaki bir dizi vektör örneğidir. (Örnekler zaten anlamsal içeriğe sahip olduklarından, bir gömülme gerektirmezler.) Amaç, bir sonraki adımda parçacıkların konumlarını tahmin etmeyi öğrenmektir.Gerçekte kayıtlı bir TensorFlow modelini nasıl yürütürüm?

RNN tutorial ardından ve biraz dahil RYSA kodunu adapte, ben az çok böyle (bazı bilgileri vermemek) bir model oluşturmak:

Sonra
inputs, self._input_data = tf.placeholder(tf.float32, [batch_size, num_steps, instance_size]) 
self._targets = tf.placeholder(tf.float32, [batch_size, num_steps, instance_size]) 

with tf.variable_scope("lstm_cell", reuse=True): 
    lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(hidden_size, forget_bias=0.0) 
    if is_training and config.keep_prob < 1: 
    lstm_cell = tf.nn.rnn_cell.DropoutWrapper(
     lstm_cell, output_keep_prob=config.keep_prob) 
    cell = tf.nn.rnn_cell.MultiRNNCell([lstm_cell] * config.num_layers) 

self._initial_state = cell.zero_state(batch_size, tf.float32) 

from tensorflow.models.rnn import rnn 
inputs = [tf.squeeze(input_, [1]) 
      for input_ in tf.split(1, num_steps, inputs)] 
outputs, state = rnn.rnn(cell, inputs, initial_state=self._initial_state) 

output = tf.reshape(tf.concat(1, outputs), [-1, hidden_size]) 
softmax_w = tf.get_variable("softmax_w", [hidden_size, instance_size]) 
softmax_b = tf.get_variable("softmax_b", [instance_size]) 
logits = tf.matmul(output, softmax_w) + softmax_b 
loss = position_squared_error_loss(
    tf.reshape(logits, [-1]), 
    tf.reshape(self._targets, [-1]), 
) 
self._cost = cost = tf.reduce_sum(loss)/batch_size 
self._final_state = state 

Veri onu eğitmek için üzerinde saver = tf.train.Saver(), yineleme oluşturmak Verilen run_epoch() yöntemini kullanarak ve parametreleri saver.save() ile yazın. Çok uzak çok iyi.

Ancak, 'u eğitimli modelde nasıl kullanırım? Eğitici bu noktada durur. the docs on tf.train.Saver.restore()'dan, değişkenleri tekrar okumak için değişkenleri kaydettiğimde veya belirli değişkenleri seçerek geri yüklediğimde tam olarak aynı grafiği ayarlamam gerekiyor. Her iki durumda da bu, yeni modelimin batch_size x num_steps x instance_size boyutundaki girişleri gerektireceği anlamına gelir. Bununla birlikte, şimdi tek istediğim model üzerinden num_steps x instance_size boyutunda tek bir ileri geçiş yapmak ve tek bir instance_size-boyutlandırılmış sonucu okumak (bir sonraki zaman adımı için tahmin); Başka bir deyişle, üzerinde çalıştığımdan farklı bir tensörü kabul eden bir model oluşturmak istiyorum. Varolan modeli benim verdiğim veriyi batch_size kez geçirerek harcayabilirim ama bu en iyi uygulama gibi görünmüyor. Bunu yapmanın en iyi yolu nedir?

+0

Grafiğinizdeki girdileri değişken olarak kaydediyor musunuz? Değişken parti büyüklüğü ile ilgili bir problem olurdu. Normalde sadece parametre değişkenlerini kaydedersiniz ve sonuçta oluşan grafik modifikasyon olmaksızın parti değişken seri boyutunda çalışabilir. Bu soru için –

+0

toplam +1 !!! İşte şu an bu noktada olduğum yer: http://stackoverflow.com/questions/38966346/tensorflow-tf-nn-rnn-function-how-to-use-the-results-of-your-training-to -do/38972510 # 38972510 – rikkitikkitumbo

cevap

2

batch_size = 1 ile aynı yapıya sahip yeni bir grafik oluşturmanız ve kaydedilen değişkenleri tf.train.Saver.restore() ile içe aktarmanız gerekir. Onların ptb_word_lm.py değişken toplu boyutta birden modellerini tanımlamak nasıl bir göz atabilirsiniz: https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/models/rnn/ptb/ptb_word_lm.py

Yani istediğiniz batch_size ile grafik örneğini örneğin ayrı bir dosya, olabilir, daha sonra geri kayıtlı değişkenler. Ardından grafiğinizi çalıştırabilirsiniz.