python - Cargar numpy array en el trabajo de google-cloud-ml
tensorflow (2)
En el modelo que quiero lanzar, tengo algunas variables que deben inicializarse con valores específicos.
Actualmente almaceno estas variables en matrices numpy, pero no sé cómo adaptar mi código para que funcione en un trabajo de google-cloud-ml.
Actualmente inicializo mi variable así:
my_variable = variables.model_variable(''my_variable'', shape=None, dtype=tf.float32, initializer=np.load(''datasets/real/my_variable.npy''))
Alguien me puede ayudar ?
Intenté la respuesta aceptada pero me encontré con algunos problemas. Finalmente esto funcionó para mí (Python 3):
from io import BytesIO
import numpy as np
from tensorflow.python.lib.io import file_io
Ahorrar:
dest = ''gs://[BUCKET-NAME]/'' # Destination to save in GCS
np.save(file_io.FileIO(dest, ''w''), np.ones((100, )))
Cargar:
f = BytesIO(file_io.read_file_to_string(src, binary_mode=True))
arr = np.load(f)
Primero, deberá copiar / almacenar los datos en GCS (usando, por ejemplo,
gsutil
) y asegurarse de que su script de entrenamiento tenga acceso a ese depósito.
La forma más fácil de hacerlo es copiar la matriz en el mismo depósito que sus datos, ya que es probable que ya haya configurado ese depósito para el acceso de lectura.
Si el depósito está en el mismo proyecto que su trabajo de capacitación y siguió
these
instrucciones (en particular,
gcloud beta ml init-project
), debe estar configurado.
Si los datos estarán en otro depósito, consulte
these
instrucciones.
Luego deberá usar una biblioteca capaz de cargar datos desde GCS.
Tensorflow incluye un módulo que puede hacer esto, aunque puede usar cualquier biblioteca cliente que pueda leer desde GCS.
Aquí hay un ejemplo del uso del módulo
file_io
de TensorFlow:
from StringIO import StringIO
import tensorflow as tf
import numpy as np
from tensorflow.python.lib.io import file_io
# Create a variable initialized to the value of a serialized numpy array
f = StringIO(file_io.read_file_to_string(''gs://my-bucket/123.npy''))
my_variable = tf.Variable(initial_value=np.load(f), name=''my_variable'')
Tenga en cuenta que tenemos que leer el archivo en una cadena y usar
StringIO
, ya que
file_io.FileIO
no implementa completamente la función de búsqueda requerida por
numpy.load
.
Bonificación: en caso de que sea útil, puede almacenar directamente una matriz numpy en GCS utilizando el módulo
file_io
, por ejemplo:
np.save(file_io.FileIO(''gs://my-bucket/123'', ''w''), np.array([[1,2,3], [4,5,6]]))
Para Python 3, use
from io import StringIO
lugar de
from StringIO import StringIO
.