My situation is this:
I have a script that is preparing a tensor flow model. Inside this script, I instantiate a class that passes the training data. Initializing classes in turn creates an instance of another class called "image" to perform various operations to increase data and what not.
main script -> instantiates data_feed class -> instantiates image class
My problem is that I am trying to use shadoworflow to perform some operations in this class of images, transferring either the session itself or the graph. But I had little success.
An approach that works (but too slow)
What I have now, but working with difficulty is slow, it looks like this (simplified):
class image(object):
def __init__(self, im):
self.im = im
def augment(self):
aux_im = tf.image.random_saturation(self.im, 0.6)
sess = tf.Session(graph=aux_im.graph)
self.im = sess.run(aux_im)
class data_feed(object):
def __init__(self, data_dir):
self.images = load_data(data_dir)
def process_data(self):
for im in self.images:
image = image(im)
image.augment()
if __name__ == "__main__":
sess = tf.Session()
data_feed = data_feed(TRAIN_DATA_DIR)
train_data = data_feed.process_data()
This aproach works, but it creates a new session for each image:
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)
etc ...
, ( )
, , , , script, :
class image(object):
def __init__(self, im):
self.im = im
def augment(self, tf_sess):
with tf_sess.as_default():
aux_im = tf.image.random_saturation(self.im, 0.6)
self.im = tf_sess.run(aux_im)
class data_feed(object):
def __init__(self, data_dir, tf_sess):
self.images = load_data(data_dir)
self.tf_sess = tf_sess
def process_data(self):
for im in self.images:
image = image(im)
image.augment(self.tf_sess)
if __name__ == "__main__":
sess = tf.Session()
data_feed = data_feed(TRAIN_DATA_DIR, sess)
train_data = data_feed.process_data()
, :
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 409, in data_generator_task
generator_output = next(generator)
File "/home/mathetes/Dropbox/ML/load_gluc_data.py", line 198, in generate
yield self.next_batch()
File "/home/mathetes/Dropbox/ML/load_gluc_data.py", line 192, in next_batch
X, y, l = self.process_image(json_im, X, y, l)
File "/home/mathetes/Dropbox/ML/load_gluc_data.py", line 131, in process_image
im.augment_with_tf(self.tf_sess)
File "/home/mathetes/Dropbox/ML/load_gluc_data.py", line 85, in augment_with_tf
self.im = sess.run(saturation, {im_placeholder: np.asarray(self.im)})
File "/home/mathetes/.local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 766, in run
run_metadata_ptr)
File "/home/mathetes/.local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 921, in _run
+ e.args[0])
TypeError: Cannot interpret feed_dict key as Tensor: Tensor Tensor("Placeholder:0", shape=(96, 96, 3), dtype=float32) is not an element of this graph.
!