tutorial imagenes guide español ejemplos clasificador basicos tensorflow

imagenes - Inicializando la variable tensorflow con una matriz de más de 2GB



tensorflow tutorial español pdf (2)

Intento inicializar una Variable tensorflow con incrustaciones word2vec .

Tengo el siguiente código:

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))

Y recibo el siguiente error:

ValueError: Cannot create an Operation with a NodeDef larger than 2GB.

La matriz ( X ) que intento asignar tiene forma (3000000, 300) y su tamaño es de 3,6 GB.

Estoy obteniendo el mismo error si pruebo tf.convert_to_tensor(X) también.

Sé que falla debido al hecho de que la matriz es más grande que 2GB. Sin embargo, no sé cómo asignar una matriz de más de 2 GB a una Variable tensorflow


Parece que la única opción es usar un marcador de posición. La forma más limpia que puedo encontrar es inicializar a un marcador de posición directamente:

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})


La solución más fácil es alimentarlo en un nodo de marcador de posición que utiliza para tf.assign a la variable.

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})

Como observó Joshua Little en una respuesta separada, también puede usarlo en el inicializador:

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