簡體   English   中英

如何將張量從 import tensorflow.compat.v1 as tf 轉換為 numpy 數組?

[英]How to convert a tensor from import tensorflow.compat.v1 as tf to a numpy array?

下面的整個 function 給了我下面的錯誤,如果我拿走 function 工作正常

with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        result = image.eval(session = sess)
        print(result)

但我需要將圖像從張量轉換為 numpy 數組以評估它是否是帶有 low.std() 的空白圖像,然后決定不在火車數據中包含它...

使用上面的 with tf.Session() function 似乎會影響另一個 function 調用:

 tfrecord_dataset = tfrecord_dataset.map(lambda x:_parse_(x)).shuffle(buffer_size).repeat(-1).batch(batch_size) 

為什么? 整個 function:

def parse_tfrecords(filelist, batch_size, buffer_size, include_viz=False):
  # try a subset of possible bands
  def _parse_(serialized_example, keylist=['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8']):
    example = tf.io.parse_single_example(serialized_example, features)
    
    def getband(example_key):
      img = tf.io.decode_raw(example_key, tf.uint8)
      return tf.reshape(img[:IMG_DIM**2], shape=(IMG_DIM, IMG_DIM, 1))
    
    bandlist = [getband(example[key]) for key in keylist]
    # combine bands into tensor
    image = tf.concat(bandlist, -1)
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        result = image.eval(session = sess)
        print(result)
        
    # one-hot encode ground truth labels 
    label = tf.cast(example['label'], tf.int32)
    label = tf.one_hot(label, NUM_CLASSES)
   
    # if logging RGB images as examples, generate RGB image from 11-channel satellite image
    if include_viz:
      image = get_img_from_example(example)
      return {'image' : image, 'label': example['label']}, label
    return {'image': image}, label
    
  tfrecord_dataset = tf.data.TFRecordDataset(filelist)
  tfrecord_dataset = tfrecord_dataset.map(lambda x:_parse_(x)).shuffle(buffer_size).repeat(-1).batch(batch_size)
  tfrecord_iterator = tfrecord_dataset.make_one_shot_iterator()
  image, label = tfrecord_iterator.get_next()
  return image, label
---------------------------------------------------------------------------
OperatorNotAllowedInGraphError            Traceback (most recent call last)
<ipython-input-66-12dadabe7ed2> in <module>
----> 1 train_images, train_labels = parse_tfrecords(train_tfrecords, TOTAL_TRAIN, TOTAL_TRAIN)
      2 val_images, val_labels = parse_tfrecords(val_tfrecords, TOTAL_VAL, TOTAL_VAL)
      3 

<ipython-input-65-2c2c4cfc0bc1> in parse_tfrecords(filelist, batch_size, buffer_size, include_viz)
     27 
     28   tfrecord_dataset = tf.data.TFRecordDataset(filelist)
---> 29   tfrecord_dataset = tfrecord_dataset.map(lambda x:_parse_(x)).shuffle(buffer_size).repeat(-1).batch(batch_size)
     30   tfrecord_iterator = tfrecord_dataset.make_one_shot_iterator()
     31   image, label = tfrecord_iterator.get_next()

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/data/ops/dataset_ops.py in map(self, map_func, num_parallel_calls, deterministic)
   2507     if num_parallel_calls is None:
   2508       return DatasetV1Adapter(
-> 2509           MapDataset(self, map_func, preserve_cardinality=False))
   2510     else:
   2511       return DatasetV1Adapter(

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/data/ops/dataset_ops.py in __init__(self, input_dataset, map_func, use_inter_op_parallelism, preserve_cardinality, use_legacy_function)
   4039     self._use_inter_op_parallelism = use_inter_op_parallelism
   4040     self._preserve_cardinality = preserve_cardinality
-> 4041     self._map_func = StructuredFunctionWrapper(
   4042         map_func,
   4043         self._transformation_name(),

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/data/ops/dataset_ops.py in __init__(self, func, transformation_name, dataset, input_classes, input_shapes, input_types, input_structure, add_to_graph, use_legacy_function, defun_kwargs)
   3369       with tracking.resource_tracker_scope(resource_tracker):
   3370         # TODO(b/141462134): Switch to using garbage collection.
-> 3371         self._function = wrapper_fn.get_concrete_function()
   3372         if add_to_graph:
   3373           self._function.add_to_graph(ops.get_default_graph())

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/eager/function.py in get_concrete_function(self, *args, **kwargs)
   2936       **kwargs: inputs to specialize on.
   2937     """
-> 2938     graph_function = self._get_concrete_function_garbage_collected(
   2939         *args, **kwargs)
   2940     graph_function._garbage_collector.release()  # pylint: disable=protected-access

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/eager/function.py in _get_concrete_function_garbage_collected(self, *args, **kwargs)
   2904       args, kwargs = None, None
   2905     with self._lock:
-> 2906       graph_function, args, kwargs = self._maybe_define_function(args, kwargs)
   2907       seen_names = set()
   2908       captured = object_identity.ObjectIdentitySet(

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/eager/function.py in _maybe_define_function(self, args, kwargs)
   3211 
   3212       self._function_cache.missed.add(call_context_key)
-> 3213       graph_function = self._create_graph_function(args, kwargs)
   3214       self._function_cache.primary[cache_key] = graph_function
   3215       return graph_function, args, kwargs

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/eager/function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes)
   3063     arg_names = base_arg_names + missing_arg_names
   3064     graph_function = ConcreteFunction(
-> 3065         func_graph_module.func_graph_from_py_func(
   3066             self._name,
   3067             self._python_function,

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes)
    984         _, original_func = tf_decorator.unwrap(python_func)
    985 
--> 986       func_outputs = python_func(*func_args, **func_kwargs)
    987 
    988       # invariant: `func_outputs` contains only Tensors, CompositeTensors,

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/data/ops/dataset_ops.py in wrapper_fn(*args)
   3362           attributes=defun_kwargs)
   3363       def wrapper_fn(*args):  # pylint: disable=missing-docstring
-> 3364         ret = _wrapper_helper(*args)
   3365         ret = structure.to_tensor_list(self._output_structure, ret)
   3366         return [ops.convert_to_tensor(t) for t in ret]

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/data/ops/dataset_ops.py in _wrapper_helper(*args)
   3297         nested_args = (nested_args,)
   3298 
-> 3299       ret = autograph.tf_convert(func, ag_ctx)(*nested_args)
   3300       # If `func` returns a list of tensors, `nest.flatten()` and
   3301       # `ops.convert_to_tensor()` would conspire to attempt to stack

~/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/autograph/impl/api.py in wrapper(*args, **kwargs)
    256       except Exception as e:  # pylint:disable=broad-except
    257         if hasattr(e, 'ag_error_metadata'):
--> 258           raise e.ag_error_metadata.to_exception(e)
    259         else:
    260           raise

OperatorNotAllowedInGraphError: in user code:

    <ipython-input-65-2c2c4cfc0bc1>:29 None  *
        tfrecord_dataset = tfrecord_dataset.map(lambda x:_parse_(x)).shuffle(buffer_size).repeat(-1).batch(batch_size)
    <ipython-input-65-2c2c4cfc0bc1>:15 _parse_  *
        result = image.eval(image)
    /home/ludo915/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/framework/ops.py:913 eval  **
        return _eval_using_default_session(self, feed_dict, self.graph, session)
    /home/ludo915/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/framework/ops.py:5512 _eval_using_default_session
        return session.run(tensors, feed_dict)
    /home/ludo915/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/client/session.py:957 run
        result = self._run(None, fetches, feed_dict, options_ptr,
    /home/ludo915/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/client/session.py:1115 _run
        if feed_dict:
    /home/ludo915/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/framework/ops.py:877 __bool__
        self._disallow_bool_casting()
    /home/ludo915/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/framework/ops.py:490 _disallow_bool_casting
        self._disallow_in_graph_mode("using a `tf.Tensor` as a Python `bool`")
    /home/ludo915/.pyenv/versions/lewagon/lib/python3.8/site-packages/tensorflow/python/framework/ops.py:477 _disallow_in_graph_mode
        raise errors.OperatorNotAllowedInGraphError(

    OperatorNotAllowedInGraphError: using a `tf.Tensor` as a Python `bool` is not allowed in Graph execution. Use Eager execution or decorate this function with @tf.function.

這是完整的 jupyter notebook Explore_Images_lg.ipynb: GitHubRepo

從此 repo 中,您還可以按照自述文件的說明下載數據。

謝謝你的幫助!

您可以使用此示例代碼使用 Tensorflow.keras 將圖像轉換為數組

import tensorflow as tf
image = tf.keras.preprocessing.image.load_img('sample.jpeg')
image_array = tf.keras.preprocessing.image.img_to_array(image)
image_array

Output

array([[[ 34.,  41.,  47.],
        [ 35.,  42.,  48.],
        [ 36.,  43.,  49.],
        ...,
        [ 47.,  21.,   4.],
        [ 46.,  20.,   3.],
        [ 46.,  20.,   3.]],

       [[ 37.,  44.,  50.],
        [ 37.,  44.,  50.],
        [ 38.,  45.,  51.],
        ...,
        [ 47.,  21.,   4.],
        [ 47.,  21.,   4.],
        [ 46.,  20.,   3.]],

       [[ 41.,  48.,  54.],
        [ 42.,  49.,  55.],
        [ 43.,  50.,  56.],
        ...,
        [ 47.,  21.,   4.],
        [ 47.,  21.,   4.],
        [ 47.,  21.,   4.]],

       ...,

       [[101.,  72.,  38.],
        [102.,  73.,  39.],
        [102.,  73.,  39.],
        ...,
        [ 98.,  64.,  27.],
        [ 98.,  64.,  27.],
        [ 97.,  63.,  28.]],

       [[101.,  72.,  38.],
        [102.,  73.,  39.],
        [102.,  73.,  39.],
        ...,
        [ 99.,  65.,  28.],
        [ 98.,  64.,  27.],
        [ 98.,  64.,  29.]],

       [[101.,  72.,  38.],
        [102.,  73.,  39.],
        [102.,  73.,  39.],
        ...,
        [100.,  66.,  29.],
        [ 99.,  65.,  28.],
        [ 98.,  64.,  29.]]], dtype=float32)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM