Как использовать бэкэнд в Google Colab

Google Colab - довольно приятное место для программирования. Но есть некоторые проблемы, которые меня прослушивают.

Я пытаюсь вывести промежуточные результаты в обученной нейронной сети с использованием бэкэнда keras со следующим кодом, который я нашел:

from keras import backend as K

inp = model.input                                           # input placeholder
outputs = [layer.output for layer in model.layers]          # all layer outputs
functors = [K.function([inp]+ [K.learning_phase()], [out]) for out in outputs]  # evaluation functions

# Testing
test = np.random.random(input_shape)[np.newaxis,...]
layer_outs = [func([test, 1.]) for func in functors]
print layer_outs

Он отлично работал, чтобы составить функции. Однако, когда функция вызывается, она сообщает следующую ошибку:

FailedPreconditionErrorTraceback (most recent call last)
<ipython-input-18-f0000c1b16a6> in <module>()
----> 1 layer_outs = [func([X_test]) for func in functors]

/usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.pyc in __call__(self, inputs)
   2480         session = get_session()
   2481         updated = session.run(fetches=fetches, feed_dict=feed_dict,
-> 2482                               **self.session_kwargs)
   2483         return updated[:len(self.outputs)]
   2484 

/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in run(self, fetches, feed_dict, options, run_metadata)
    898     try:
    899       result = self._run(None, fetches, feed_dict, options_ptr,
--> 900                          run_metadata_ptr)
    901       if run_metadata:
    902         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in _run(self, handle, fetches, feed_dict, options, run_metadata)
   1133     if final_fetches or final_targets or (handle and feed_dict_tensor):
   1134       results = self._do_run(handle, final_targets, final_fetches,
-> 1135                              feed_dict_tensor, options, run_metadata)
   1136     else:
   1137       results = []

/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
   1314     if handle is None:
   1315       return self._do_call(_run_fn, feeds, fetches, targets, options,
-> 1316                            run_metadata)
   1317     else:
   1318       return self._do_call(_prun_fn, handle, feeds, fetches)

/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in _do_call(self, fn, *args)
   1333         except KeyError:
   1334           pass
-> 1335       raise type(e)(node_def, op, message)
   1336 
   1337   def _extend_graph(self):

FailedPreconditionError: Error while reading resource variable dense_1/kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Container localhost does not exist. (Could not find resource: localhost/dense_1/kernel)
     [[Node: dense_1/MatMul/ReadVariableOp = ReadVariableOp[dtype=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"](dense_1/kernel)]]
     [[Node: dense_1/Relu/_3 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_14_dense_1/Relu", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

Кажется, что моя нейронная сеть сохранена локально, и поэтому переменные не могут быть вызваны из удаленного бэкэнда в Google Colab. Я не уверен, так ли это, и как я могу решить проблему.

Код отлично работал на моем Mac. Но заставить его работать в Google Colab кажется более приятным на будущее.


person LeYan    schedule 12.07.2018    source источник


Ответы (1)


Я считаю, что есть несколько подходов, которые могут сработать для вас. Мне показалось, что лучше всего смонтировать свой гугл-диск из колаба. Таким образом будет легко загружать и сохранять файлы.

try:
    from google.colab import drive
except ModuleNotFoundError as colab_not_found:
    raise ModuleNotFoundError('Only run this cell on google colab!') from colab_not_found

# This will prompt for authorization.
drive.mount('/content/drive')
person Malex    schedule 19.11.2018