2016-02-17 10 views
5

मैंने अभी टेंसरफ्लो के साथ खेलना शुरू कर दिया है और मैं एक बहुत ही सरल आरएनएन लागू करने की कोशिश कर रहा हूं। आरएनएन में x इनपुट के रूप में y आउटपुट के रूप में है और इसमें केवल एक ही परत होती है जो x लेती है और यह इनपुट के रूप में पिछली आउटपुट होती है। यहाँ मैं मन में है बात की तरह की एक तस्वीर है:TensorFlow में आलेख में एक चक्र के साथ एक साधारण आरएनएन कैसे बनाया जाए?

A simple RNN

समस्या है, मैं इसे में एक चक्र के साथ एक ग्राफ के निर्माण के लिए TensorFlow एपीआई के माध्यम से किसी भी तरह से नहीं देख सकता। जब भी मैं एक टेंसर परिभाषित करता हूं, मुझे यह निर्दिष्ट करना होता है कि यह इनपुट क्या है, जिसका अर्थ है कि मुझे पहले से ही इसके इनपुट को परिभाषित करना होगा। तो एक चिकन-एंड-अंडे की समस्या है।

मुझे यह भी नहीं पता कि क्या यह एक चक्र के साथ ग्राफ को परिभाषित करना चाहता है (पहले क्या गणना की जाती है? क्या मुझे सॉफ्टमैक्स नोड का प्रारंभिक मान परिभाषित करना होगा?)। मैंने पिछले आउटपुट का प्रतिनिधित्व करने के लिए एक चर का उपयोग करने के विचार के साथ खेला और फिर मैन्युअल रूप से y का मान लें और इसे प्रशिक्षण नमूना के माध्यम से हर बार चर में स्टोर करें। लेकिन यह बहुत धीमा होगा जब तक कि ग्राफ में इस प्रक्रिया का प्रतिनिधित्व करने का कोई तरीका न हो (?)।

मुझे पता है कि टेंसरफ्लो ट्यूटोरियल आरएनएन के उदाहरण कार्यान्वयन दिखाते हैं लेकिन वे लाइब्रेरी से एलएसटीएम मॉड्यूल को धोखा देते हैं और खींचते हैं जिसमें पहले से ही चक्र है। कुल मिलाकर ट्यूटोरियल कुछ चीजों को बनाने के तरीके के माध्यम से आपको कदम उठाने के लिए अच्छे हैं लेकिन वे यह समझाने का बेहतर काम कर सकते हैं कि यह जानवर वास्तव में कैसे काम करता है।

तो, टेंसरफ्लो विशेषज्ञ, क्या इस चीज़ को बनाने का कोई तरीका है? मैं इसे करने के बारे में कैसे जाउंगा?

+0

आपका वैरिएबल विचार जाने का तरीका लगता है, यदि आप टेंसरफ्लो वैरिएबल/असाइन ऑप्स –

+0

का उपयोग करते हैं तो धीमा नहीं होना चाहिए, लेकिन मुझे 'sess.run (y_prev.assign (y)) 'और चलाने के लिए नहीं करना होगा एक समय में एक के माध्यम से नमूने? या क्या आपका मतलब है कि मुझे इसे @Ishamael द्वारा वर्णित अनियंत्रित रणनीति के साथ जोड़ना चाहिए? – Shum

उत्तर

2

वास्तव में, सभी मशीन लर्निंग फ्रेमवर्क में आगे और पिछड़े पास दोनों मानते हैं कि आपके नेटवर्क में चक्र नहीं हैं। आवर्ती नेटवर्क को लागू करने का एक आम तरीका कई चरणों (50 कहें) के लिए समय पर इसे अनलॉक कर रहा है, और इसलिए ऐसे नेटवर्क को परिवर्तित करना जिसमें उसमें लूप हो, जिसमें कोई भी नहीं है।

उदाहरण के लिए, डॉक्स में आप बात कर रहे हैं:

https://www.tensorflow.org/versions/r0.7/tutorials/recurrent/index.html

वे उल्लेख

आदेश सीखने की प्रक्रिया विनयशील बनाने के लिए, यह ढ़ाल काटना एक आम बात है बैकप्रोपैगेशन के लिए अनियंत्रित चरणों की एक निश्चित संख्या (num_steps) पर।

क्या यह प्रभावी रूप से मतलब है कि वे num_steps LSTM कोशिकाओं का निर्माण करेगा, जहां प्रत्येक एक इनपुट वर्तमान timestep के लिए मूल्य x, और पिछले LSTM मॉड्यूल के उत्पादन के रूप में लेता है।

BasicLSTMCell जो वे उपयोग करते हैं और आपको लगता है कि वास्तव में एक लूप में लूप नहीं है। एक एलएसटीएम सेल केवल एक एलएसटीएम चरण का एक कार्यान्वयन है (एक ब्लॉक जिसमें दो इनपुट [इनपुट और मेमोरी] और दो आउटपुट [आउटपुट और मेमोरी] हैं, और आउटपुट से आउटपुट की गणना करने के लिए द्वार का उपयोग करते हैं), पूरे एलएसटीएम नेटवर्क नहीं।

संबंधित मुद्दे