2016-07-04 11 views
16

मैं अपने नेटवर्क पर कुछ चर चरम मूल्यों के साथ शुरू करना चाहता था। उदाहरण के लिए विचार करें:कोई वैरिएबल को tf.get_variable और TensorFlow में एक numpy मान के साथ कैसे प्रारंभ करता है?

init=np.random.rand(1,2) 
tf.get_variable('var_name',initializer=init) 

जब मुझे लगता है कि मैं एक त्रुटि मिलती है:

ValueError: Shape of a new variable (var_name) must be fully defined, but instead was <unknown>. 

कारण है कि यह है कि मैं उस त्रुटि हो रही है है?

इसे ठीक करने की कोशिश की मैं कर कोशिश करने के लिए:

tf.get_variable('var_name',initializer=init, shape=[1,2]) 

जो एक भी weirder त्रुटि झुकेंगे:

TypeError: 'numpy.ndarray' object is not callable 

मैं the docs and examples पढ़ने की कोशिश की लेकिन यह वास्तव में मदद नहीं की।

यह TensorFlow में get_variable विधि के साथ NumPy सरणी के साथ चर को प्रारंभ करने के लिए संभव नहीं है?

उत्तर

25

निम्नलिखित काम करता है:

init = tf.constant(np.random.rand(1, 2)) 
tf.get_variable('var_name', initializer=init) 

प्रलेखन get_variable के लिए एक छोटे से वास्तव में कमी है। बस अपने संदर्भ के लिए, initializer तर्क या तो एक TensorFlow Tensor वस्तु (जो आपके मामले में एक numpy मूल्य पर tf.constant फोन करके निर्माण किया जा सकता है), या एक 'प्रतिदेय' है कि दो तर्क, shape और dtype, आकार और ले जाता है हो गया है उस डेटा का डेटा प्रकार जिसे वह वापस करना है। फिर से, आपके मामले में, आप के मामले में निम्नलिखित आप 'प्रतिदेय' तंत्र उपयोग करना चाहता था लिख ​​सकते हैं:

init = lambda shape, dtype: np.random.rand(*shape) 
tf.tf.get_variable('var_name', initializer=init, shape=[1, 2]) 
+2

[यह] (http://stackoverflow.com/questions/111234/what-is-a-callable-in-python) अपने प्रश्न के लिए एक महान जवाब है। – keveman

+0

एक 'कॉल करने योग्य' एक फ़ंक्शन या कुछ है जिसे फ़ंक्शन की तरह कहा जा सकता है। – hpaulj

+0

'tf.get_variable ('var_name', startizer = np.random.rand (1, 2)) 'r0.10 पर अब काम करना प्रतीत होता है। – ldavid

6

@keveman अच्छी तरह से उत्तर दिया, और पूरक के लिए, वहाँ tf.get_variable के उपयोग ('है var_name ', प्रारंभकर्ता = init), tensorflow दस्तावेज़ ने एक व्यापक उदाहरण दिया था।

import numpy as np 
import tensorflow as tf 

value = [0, 1, 2, 3, 4, 5, 6, 7] 
# value = np.array(value) 
# value = value.reshape([2, 4]) 
init = tf.constant_initializer(value) 

print('fitting shape:') 
tf.reset_default_graph() 
with tf.Session() : 
    x = tf.get_variable('x', shape = [2, 4], initializer = init) 
    x.initializer.run() 
    print(x.eval()) 

    fitting shape : 
[[0. 1. 2. 3.] 
[4. 5. 6. 7.]] 

print('larger shape:') 
tf.reset_default_graph() 
with tf.Session() : 
    x = tf.get_variable('x', shape = [3, 4], initializer = init) 
    x.initializer.run() 
    print(x.eval()) 

    larger shape : 
[[0. 1. 2. 3.] 
[4. 5. 6. 7.] 
[7. 7. 7. 7.]] 

print('smaller shape:') 
tf.reset_default_graph() 
with tf.Session() : 
    x = tf.get_variable('x', shape = [2, 3], initializer = init) 

    * <b>`ValueError`</b > : Too many elements provided.Needed at most 6, but received 8 

https://www.tensorflow.org/api_docs/python/tf/constant_initializer

2

चर पहले से ही बनाया गया था (अर्थात कुछ जटिल समारोह से), बस load का उपयोग करें।

https://www.tensorflow.org/api_docs/python/tf/Variable#load

x_var = tf.Variable(tf.zeros((1, 2), tf.float32)) 
x_val = np.random.rand(1,2).astype(np.float32) 

sess = tf.Session() 
x_var.load(x_val, session=sess) 

# test 
assert np.all(sess.run(x_var) == x_val) 
संबंधित मुद्दे