2015-12-22 46 views
15

में न्यूनतम आरएनएन उदाहरण tensorflow में एक न्यूनतम खिलौना आरएनएन उदाहरण को लागू करने की कोशिश कर रहा है। लक्ष्य इस अद्भुत संक्षिप्त example in theanets के समान इनपुट डेटा से इनपुट डेटा से मैपिंग सीखना है।tensorflow

अद्यतन: हम वहां जा रहे हैं। शेष एकमात्र हिस्सा इसे अभिसरण (और कम संकुचित) बनाना है। क्या कोई निम्नलिखित कोड को चलाने या एक साधारण उदाहरण प्रदान करने में मदद कर सकता है?

import tensorflow as tf 
from tensorflow.python.ops import rnn_cell 

init_scale = 0.1 
num_steps = 7 
num_units = 7 
input_data = [1, 2, 3, 4, 5, 6, 7] 
target = [2, 3, 4, 5, 6, 7, 7] 
#target = [1,1,1,1,1,1,1] #converges, but not what we want 


batch_size = 1 

with tf.Graph().as_default(), tf.Session() as session: 
    # Placeholder for the inputs and target of the net 
    # inputs = tf.placeholder(tf.int32, [batch_size, num_steps]) 
    input1 = tf.placeholder(tf.float32, [batch_size, 1]) 
    inputs = [input1 for _ in range(num_steps)] 
    outputs = tf.placeholder(tf.float32, [batch_size, num_steps]) 

    gru = rnn_cell.GRUCell(num_units) 
    initial_state = state = tf.zeros([batch_size, num_units]) 
    loss = tf.constant(0.0) 

    # setup model: unroll 
    for time_step in range(num_steps): 
    if time_step > 0: tf.get_variable_scope().reuse_variables() 
    step_ = inputs[time_step] 
    output, state = gru(step_, state) 
    loss += tf.reduce_sum(abs(output - target)) # all norms work equally well? NO! 
    final_state = state 

    optimizer = tf.train.AdamOptimizer(0.1) # CONVERGEs sooo much better 
    train = optimizer.minimize(loss) # let the optimizer train 

    numpy_state = initial_state.eval() 
    session.run(tf.initialize_all_variables()) 
    for epoch in range(10): # now 
    for i in range(7): # feed fake 2D matrix of 1 byte at a time ;) 
     feed_dict = {initial_state: numpy_state, input1: [[input_data[i]]]} # no 
     numpy_state, current_loss,_ = session.run([final_state, loss,train], feed_dict=feed_dict) 
    print(current_loss) # hopefully going down, always stuck at 189, why!? 
+0

शायद आप ट्यूटोरियल से शुरू करने और एक काम उदाहरण से अपने कोड के विकास बेहतर होगा: https://www.tensorflow.org/versions/master/tutorials/recurrent/index.html – GavinBrelstaff

+3

अच्छी तरह से सबसे की कोड * ट्यूटोरियल से * है। और मुझे एक साधारण कामकाजी उदाहरण नहीं मिला: ptb_word_lm.py में 322 लाइन – Anona112

+1

रेडडिट थ्रेड https://www.reddit.com/r/MachineLearning/comments/3sok8k/tensorflow_basic_rnn_example_with_variable_length/ सुझाव देता है कि tensorflow अभी भी आरएनएन के लिए तैयार नहीं है काम - मैं वास्तव में इसका परीक्षण करने के लिए उत्सुक हूं लेकिन जैसा कि आप पाते हैं कि ड्राइव का परीक्षण करने के लिए कोई कामकाजी कोड नहीं है। – GavinBrelstaff

उत्तर

6

मुझे लगता है कि आपके कोड के साथ कुछ समस्याएं हैं, लेकिन विचार सही है।

मुख्य मुद्दा यह है कि आप इनपुट और आउटपुट के लिए एक सिंगल टेंसर का उपयोग कर रहे हैं, जैसे:
inputs = tf.placeholder(tf.int32, [batch_size, num_steps])

टेंसरफ्लो में आरएनएन फ़ंक्शन टेंसर की एक सूची लेते हैं (क्योंकि num_steps कुछ मॉडलों में भिन्न हो सकते हैं)। तो अगर आप इस तरह आदानों निर्माण करना चाहिए:
inputs = [tf.placeholder(tf.int32, [batch_size, 1]) for _ in xrange(num_steps)]

तो फिर तुम तथ्य यह है कि आपके इनपुट int32s हैं की देखभाल करने की जरूरत है, लेकिन एक RNN सेल नाव वैक्टर पर काम करता है - कि क्या embedding_lookup के लिए है।

और अंत में आपको इनपुट सूची में डालकर अपनी फ़ीड को अनुकूलित करने की आवश्यकता होगी।

मुझे लगता है कि पीटीबी ट्यूटोरियल देखने के लिए एक उचित जगह है, लेकिन यदि आप आउट-ऑफ-द-बॉक्स आरएनएन का एक और अधिक न्यूनतम उदाहरण चाहते हैं तो आप कुछ आरएनएन यूनिट परीक्षणों को देख सकते हैं, उदाहरण के लिए, यहाँ। https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/kernel_tests/rnn_test.py#L164

+0

आपके सुझावों के लिए बहुत बहुत धन्यवाद! उन्हें लागू करने से अब चलने वाले कोड उत्पन्न होते हैं (भले ही यह अभी भी काफी मजबूत है [पन!])। शेष हिस्सा केवल इसे अभिसरण करना है। – Anona112