2016-02-14 8 views
14

से बड़े सरणी के साथ टेंसफोर्लो वैरिएबल प्रारंभ करना मैं पूर्व-प्रशिक्षित word2vec एम्बेडिंग के साथ एक tensorflow Variable प्रारंभ करने की कोशिश कर रहा हूं।2 जीबी

मैं निम्नलिखित कोड है:

import tensorflow as tf 
from gensim import models 

model = models.Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) 
X = model.syn0 

embeddings = tf.Variable(tf.random_uniform(X.shape, minval=-0.1, maxval=0.1), trainable=False) 

sess.run(tf.initialize_all_variables()) 

sess.run(embeddings.assign(X)) 

और मैं निम्नलिखित त्रुटि मिल रही है:

इसके आकार है
ValueError: Cannot create an Operation with a NodeDef larger than 2GB. 

सरणी (X) मैं आवंटित करने के लिए कोशिश कर रहा हूँ आकार (3000000, 300) की है और 3.6GB।

यदि मैं tf.convert_to_tensor(X) भी कोशिश करता हूं तो मुझे वही त्रुटि मिल रही है।

मुझे पता है कि यह इस तथ्य के कारण विफल रहता है कि सरणी 2 जीबी से बड़ी है। हालांकि, मुझे नहीं पता कि 2 जीबी से अधिक एक टेन्सफोर्लो Variable

उत्तर

6

सबसे आसान समाधान यह है कि आप प्लेसहोल्डर नोड में feed_dicting करना है जिसे आप चर के लिए tf.assign करने के लिए उपयोग करते हैं।

X = tf.Variable([0.0]) 
place = tf.placeholder(tf.float32, shape=(3000000, 300)) 
set_x = X.assign(place) 
# set up your session here.... 
sess.run(set_x, feed_dict={place: model.syn0}) 

यहोशू लिटिल के रूप में एक अलग जवाब में बताया गया है, आप भी यह प्रारंभकर्ता में उपयोग कर सकते हैं:

X = tf.Variable(place) # place as defined above 
... 
init = tf.initialize_all_variables() 
... create sess ... 
sess.run(init, feed_dict={place: model.syn0}) 
+1

'X.assign (जगह)' 'होने की tf.assign की जरूरत है (एक्स, जगह, validate_shape = झूठी)', या TensorFlow शिकायत कि आप टेंसर के आकार को बदल रहे हैं। इसके अलावा, यह काम करता है। –

+0

धन्यवाद - प्लेसहोल्डर के आकार को सेट करके, नीचे + मैरी की टिप्पणी शामिल करने के उत्तर को अपडेट किया गया। अधिक जानकारी के लिए – dga

+3

[प्रीलोड किए गए डेटा] (https://www.tensorflow.org/versions/r0.7/how_tos/reading_data/index.html#preloaded-data] के अंतर्गत दस्तावेज़ में इसे कैसे करें, इसका एक अच्छा विवरण है।) और एमएनआईएसटी प्रशिक्षण इनपुट को प्रीलोड करने के लिए प्लेसहोल्डर और एक चर का उपयोग करने के तरीके पर एक पूर्ण कार्य उदाहरण [यहां] (https://github.com/tensorflow/tensorflow/blob/r0.7/tensorflow/examples/how_tos/reading_data/ full_connected_preloaded_var.py) – stefano

10

ऐसा लगता ही एकमात्र विकल्प की तरह एक प्लेसहोल्डर उपयोग करने के लिए है। साफ तरह से मैं मिल सकता है एक प्लेसहोल्डर सीधे करने के लिए प्रारंभ करने में है:

X_init = tf.placeholder(tf.float32, shape=(3000000, 300)) 
X = tf.Variable(X_init) 
# The rest of the setup... 
sess.run(tf.initialize_all_variables(), feed_dict={X_init: model.syn0}) 
+1

ध्यान दें कि जब आप 'tf.placeholder()' को कॉल करते हैं तो आप वैकल्पिक आकार तर्क भी सेट कर सकते हैं और फिर आपको 'validate_shape = False'' की आवश्यकता नहीं है (और आपको अपने शेष कार्यक्रम में बेहतर आकार अनुमान मिलता है!)। – mrry

+0

@ मिरी, ओह, यह सही है। धन्यवाद। मैंने जवाब में इसे जोड़ा है। –

+0

अच्छा, साफ समाधान। Upvoted। – dga

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