2016-02-26 13 views
6

उत्पन्न करना ipython में मैंने tensorflow as tf और numpy as np आयात किया और एक TensorFlow InteractiveSession बनाया।टेंसरफ्लो: एक यादृच्छिक स्थिर

some_test = tf.constant(np.random.normal(loc=0.0, scale=1.0, size=(2, 2))) 
session.run(some_test) 

रिटर्न:

array([[-0.04152317, 0.19786302], 
     [-0.68232622, -0.23439092]]) 

उम्मीद बस के रूप में जब मैं चला रहा हूँ या numpy इनपुट के साथ कुछ सामान्य वितरण आरंभ, सब कुछ ठीक चलता है।

... लेकिन जब मैं Tensorflow सामान्य बंटन फ़ंक्शन का उपयोग करें:

(...) 
TypeError: List of Tensors when single Tensor expected 

मैं यहाँ क्या याद आ रही है:

some_test = tf.constant(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32)) 
session.run(some_test) 

... यह एक प्रकार त्रुटि कह उठता है?

के उत्पादन:

sess.run(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32)) 

अकेले बिल्कुल वही चीज़ जो np.random.normal उत्पन्न रिटर्न - एक सामान्य वितरण से लिया मूल्यों के साथ आकार (2, 2) के> एक मैट्रिक्स।

उत्तर

8

tf.constant() सेशन एक numpy सरणी (या कुछ और परोक्ष एक numpy सरणी के लिए परिवर्तनीय) लेता है, और रिटर्न एक tf.Tensor जिसका मूल्य है कि सरणी के समान है। यह tf.Tensor को इसके तर्क के रूप में स्वीकार करता है।

दूसरी ओर, tf.random_normal() सेशन tf.Tensor देता है जिसका मूल्य प्रत्येक बार चलने वाले दिए गए वितरण के अनुसार यादृच्छिक रूप से उत्पन्न होता है। चूंकि यह tf.Tensor देता है, इसलिए इसे tf.constant() पर तर्क के रूप में उपयोग नहीं किया जा सकता है। यह TypeError बताता है (जो tf.InteractiveSession के उपयोग से संबंधित नहीं है, क्योंकि यह तब होता है जब आप ग्राफ़ बनाते हैं)।

मुझे लगता है कि आप चाहते हैं कि आप अपने ग्राफ को एक टेंसर शामिल करना चाहते हैं कि (i) इसके पहले उपयोग पर यादृच्छिक रूप से जेनरेट किया गया है, और (ii) इसके बाद निरंतर। , के रूप में आप अपने प्रश्न में किया था

  1. उपयोग NumPy यादृच्छिक मूल्य पैदा करते हैं और एक tf.constant() में यह डाल करने के लिए:, यह

    some_test = tf.constant(
        np.random.normal(loc=0.0, scale=1.0, size=(2, 2)).astype(np.float32)) 
    
  2. (संभावित तेजी से ऐसा करने के दो तरीके हैं GPU का उपयोग कर सकते हैं यादृच्छिक संख्या उत्पन्न करने के लिए) का प्रयोग करें TensorFlow यादृच्छिक मूल्य उत्पन्न करने के लिए और एक tf.Variable में रख:

    some_test = tf.Variable(
        tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32) 
    sess.run(some_test.initializer) # Must run this before using `some_test` 
    
+2

स्पष्टीकरण के लिए धन्यवाद! तो मुझे यादृच्छिक "निरंतर" प्राप्त करने के लिए जीपीयू त्वरण उर्फ ​​"शुद्ध" tensorflow जब मैं 'tf.Variable' का उपयोग करना होगा ?! – daniel451

+0

हां, यह counterintuitive है, है ना? :) मुद्दा वास्तव में है कि, टीएफ में, "परिवर्तनीय" और "प्रारंभिक" की अवधारणाएं एक ही प्रकार में संयुक्त होती हैं - हमने कभी-कभी प्रारंभ करने के बेहतर तरीकों पर चर्चा की है (उदाहरण के लिए सी- भाषाओं की तरह), लेकिन अभी तक एक डिजाइन पर बसने नहीं है।(कोई कल्पना कर सकता है कि निरंतर फोल्डिंग इत्यादि जैसे ऑप्टिमाइज़ेशन के लिए ऐसी चीज कैसे उपयोगी होगी) – mrry

+1

प्रतिक्रिया @mrry के लिए धन्यवाद। अगर मैं वही काम करने की कोशिश कर रहा हूं लेकिन मैं 'some_test' स्थिर रखना नहीं चाहता हूं तो मैं विकल्प 2 के समान ही काम करूंगा लेकिन 'sess.run (some_test.initializer)' शामिल नहीं है? – bnorm

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