ValueError: Tensor («входы: 0», форма = (нет, 256, 256, 3), dtype = uint8) - PullRequest
0 голосов
/ 30 апреля 2020

Я не знаю, как решить эту ошибку, я также пытался преобразовать ее в float32

import cv2
import tensorflow as tf
import numpy as np

CATEGORIES = ["gas", "break","stop"]

model = tf.keras.models.load_model("trained")


def prepare(filepath):
    IMG_SIZE = 256  # 50 in txt-based
    img_array = cv2.imread(filepath)
    new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
    arr=new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 3)
    return arr

x=prepare('img.jpg')
x = tf.keras.utils.normalize(x, axis=1)
x = x.astype('float32') 
print(x.dtype)
prediction = model.predict([x])
print(prediction)  # will be a list in a list.
print(CATEGORIES[np.argmax(prediction[0])])

float32 ----------------- -------------------------------------------------- -------- ValueError Traceback (последний вызов был последним) в 11 x = x.astype ('float32') 12 print (x.dtype) ---> 13pretion = model.predict ([x]) 14 print (прогноз) # будет список в списке. 15 print (CATEGORIES [np.argmax (предсказание [0])])

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorsflow_core \ python \ keras \ engine \ training.py в предикате ( self, x, batch_size, подробный, шаги, обратные вызовы, max_queue_size, работники, use_multiprocessing) 1011
max_queue_size = max_queue_size, 1012 работника = работников, -> 1013 use_multiprocessing = use_multiprocessing) 1014 1015 def reset_metrics 1009 * ~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensor_flow_core \ python \ keras \ engine \ training_v2.py в предикторе (self, модель, x, batch_size, verbose, шаги, обратные вызовы, max_queue_size, рабочие, use_multiprocessing, ** kwargs) 496 модель, ModeKeys.PREDICT, x = x, batch_size = batch_size, verbose = verbose, 497 шагов = шаги, обратные вызовы = обратные вызовы, max_queue_size = max_queue_size, -> 498 рабочих = работников, use_multiprocessing = use_multiprocessing, use_multiprocessing = use_multiprocessing kwargs) 499 500

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensororflow_core \ python \ keras \ engine \ training_v2.py в _model_iteration (self, model, mode, x, y, batch _size, verbose, sample_weight, шаги, обратные вызовы, max_queue_size, рабочие, use_multiprocessing, ** kwargs) 473 mode = mode, 474 training_context = training_context, -> 475 total_epochs = 1) 476 cbks.make_logs (модель, epoch_logs, результат ) 477

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorsflow_core \ python \ keras \ engine \ training_v2.py в run_one_epoch (модель, итератор, выполнение_функции, dataset_size, batch_size, стратегия, steps_per_epoch, num_samples, mode, training_context, total_epochs) 126 step = step, mode = mode, size = current_batch_size) as batch_logs: 127 try: -> 128 batch_outs = execute_function (iterator) 129 за исключением (StopIteration, errors.OutOfRangeError): 130 # TODO (kaftan): ошибка файла с функцией tf и ошибками. OutOfRangeError?

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorflow_core \ python \ keras \ engine \ training_v2_utils.py в исполнении_функции (input_fn) 96 # numpy переводит тензоры в значения в режиме Eager. 97 возвращают nest.map_structure (_non_none_constant_value, ---> 98 распределенная_функция (input_fn)) 99 100 возвращают исполнительную_функцию

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensororflow_core \ python \ eager \ def_function. py in call (self, * args, ** kwds) 566 xla_context.Exit () 567 else: -> 568 result = self._call (* args, ** kwds) 569 570, если tracing_count = = self._get_tracing_count ():

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensororflow_core \ python \ eager \ def_function.py в _call (self, * args, ** kwds) 613 # Это первый вызов call , поэтому мы должны инициализировать. 614 инициализаторов = [] -> 615 self._initialize (args, kwds, add_initializers_to = initializers) 616 окончательно: 617 # На данный момент мы знаем, что инициализация завершена (или меньше

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensorflow_core \ python \ eager \ def_function.py в _initialize (self, args, kwds, add_initializers_to) 495 self._concrete_stateful_fn = (496 self._stateful_fn._get_concrete_function_col: * отключение = защищенный доступ

-> 497 * args, ** kwds)) 498 499 def invalid_creator_scope (* unused_args, ** unused_kwds):

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tensorflow_core \ python \ eager \ function.py в _get_concrete_function_internal_garbage_collected (self, * args, ** kwargs) 2387 args, kwargs = None, None 2388 с self._lock: -> 2389 graph_function, _, _ = self._maybe_define_function (args, kwargs) 2390 возвращает функцию graph_function 2391

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorflow_core \ python \ eager \ function.py в _maybe_define_function (self, args, kwargs) 2701 2702
self._function_cache .missed.add (call_context_key) -> 2703 graph_function = self._create_graph_function (args, kwargs) 2704 self._function_cache.primary [cache_key] = graph_function 2705 возвращать graph_function, args, kwargs

~ \ anaconda3 en tf \ lib \ site-packages \ tenorsflow_core \ python \ eager \ function.py в _create_graph_function (self, args, kwargs, override_flat_arg_shapes) 2591 arg_names = arg_names,
2592 overrid e_flat_arg_shapes = override_flat_arg_shapes, -> 2593 capture_by_value = self._capture_by_value), 2594 self._function_attributes, 2595 # Скажите ConcreteFunction очистить свой граф, как только он выйдет из

~ \ en \ t \ an \ t \ an \ t \ an \ tf site-packages \ tenorsflow_core \ python \ framework \ func_graph.py в func_graph_from_py_fun c (имя, python_fun c, аргументы, kwargs, подпись, func_graph, автограф, autograph_options, add_control_dependencies, arg_names, привлечение____t__t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t__t_t_t_f_t_t_t_t, 976 convert_fun c) 977 -> 978 func_outputs = python_fun c (* func_args, ** func_kwargs) 979 980 # инвариант: func_outputs содержит только тензоры, композитные тензоры,

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorsflow_core \ python \ eager \ def_function.py в wrapped_fn (* args, ** kwds) 437 # wrapped позволяет AutoGraph заменять преобразованную функцию. Мы даем 438 # функцию слабую ссылку на себя, чтобы избежать цикла ссылок. -> 439 return weak_wrapped_fn (). wrapped (* args, ** kwds) 440 weak_wrapped_fn = weakref.ref (wrapped_fn) 441

~ \ anaconda3 \ envs \ tf \ lib \ site-пакеты \ tenorsflow_core \ python \ keras \ engine \ training_v2_utils.py в распределенной функции (input_iterator) 83 аргументы = _prepare_feed_values ​​(модель, input_iterator, режим, стратегия) 84 выходных данных = стратегии.experimental_run_v2 (---> 85 per_replica_function, аргументы = аргументы = аргументы ) 86 # Из выходов PerReplica уменьшить или выбрать значения для возврата. 87 all_outputs = dist_utils.unwrap_output_dict (

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensororflow_core \ python \ distribte_lib.py в экспериментальном_руне_v2 (self, fn, args, kwargs) 761 fn = autograph.tf_convert (fn, ag_ctx.control_status_ctx (), 762 convert_by_default = False) -> 763 вернуть self._extended.call_for_each_replica (fn, args = args, kwargs = kwargs) 764 765 def уменьшить (self, axis_op, ):

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensororflow_core \ python \ distribte \ distribte_lib.py в call_for_each_replica (self, fn, args, kwargs) 1817 kwargs = {} 1818 с self ._container_strategy (). scope (): -> 1819 return self._call_for_each_replica (fn, args, kwargs) 1820 1821 def _call_for_each_replica (self, fn, args, kwargs):

~ \ anaconda3 \ envs \ lib \ site-packages \ tenorflow_core \ python \ distribte \ distribte_lib.py в _call_for_each_replica (self, fn, args, kwargs) 2162
self._container_strategy (), 2163
replica_id_in_sync_group = constant_op.constant (0, dtypes.int32)): -> 2164 return fn (* args, ** kwargs) 2165 2166 def _reduce_to (self, redu_op, значение, пункты назначения):

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorflow_core \ python \ autograph \ impl \ api.py в оболочке (* args, ** kwargs) 290 def wrapper (* args, ** kwargs): 291 с ag_ctx.ControlStatusCtx ( status = ag_ctx.Status.DISABLED): -> 292 вернуть удовольствие c (* args, ** kwargs) 293 294, если inspect.isfunction (fun c) или inspect.ismethod (fun c):

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensororflow_core \ python \ keras \ engine \ training_v2_utils.py в _predict_on_batch ( не удалось разрешить аргументы ) 210 del y, sample_weights 211 # Обратите внимание, что x и batch_index уже являются значениями для каждой реплики. -> 212 результат = предсказание_on_batch (модель, х) 213, если batch_index равен None: 214 возвращаемый результат

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tensorflow_core \ python \ keras \ engine \ training_v2_utils .py вgnett_on_batch (модель, x, автономно) 554 555 с backend.eager_learning_phase_scope (0): -> 556 возвращать предикат_on_batch_fn (входы) # pylint: отключить = не вызывать

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorsflow_core \ python \ keras \ engine \ base_layer.py в call (self, input, * args, ** kwargs) 776 output = base_layer_utils.mark_as_return (output, acd) 777 else: -> 778 output = call_fn (cast_inputs, * args, ** kwargs) 779 780 за исключением ошибок. OperatorNotAllowedInGraphError as e:

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tensorflow_core \ python \ keras \ engine \ sequential.py в вызове (self, input, training, mask) 279 кваргов ['training'] = обучение 280 -> 281 выходов = слой (входы, ** кварги) 282 283 # outputs будут входными данными для следующего слоя.

~ \ anaconda3 \ en vs \ tf \ lib \ site-packages \ tenorsflow_core \ python \ keras \ engine \ base_layer.py в вызов (self, input, * args, ** kwargs) 776 output = base_layer_utils.mark_as_return (выводы, acd) 777 else: -> 778 output = call_fn (cast_inputs, * args, ** kwargs) 779 780 за исключением ошибок. OperatorNotAllowedInGraphError as e:

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorflow_core \ python \ keras \ сохранение \ сохраненная_модель \ utils.py в return_outputs_and_add_losses (* args, ** kwargs) 57 входов = args [input_arg_index] 58 аргументов = args [input_arg_index + 1:] ---> 59 выходов, потерь = fn (входы, * аргументы, ** кваргс) 60 layer.add_loss (потери, входы) 61 возвращаемый результат

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tensorflow_core \ python \ eager \ def_function .py in call (self, * args, ** kwds) 566 xla_context.Exit () 567 else: -> 568 result = self._call (* args, ** kwds) 569 570, если tracing_count == self._get_tracing_count ():

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensororflow_core \ python \ eager \ def_func ion.py в _call (self, * args, ** kwds) 604 # В этом случае мы не создали переменные при первом вызове. Таким образом, мы можем 605 # запустить первую трассировку, но мы должны потерпеть неудачу, если переменные созданы. -> 606 результатов = self._stateful_fn (* args, ** kwds) 607, если self._created_variables: 608 повысить ValueError («Создание переменных при первом вызове функции» *

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorflow_core \ python \ eager \ function.py in call (self, * args, ** kwargs) 2360 "" "Вызывает функцию графа, специализированную для входных данных. "" "2361 с self._lock: -> 2362 graph_function, args, kwargs = self._maybe_define_function (args, kwargs) 2363 return graph_function._filtered_call (args, kwargs) # pylint: отключить = защищенный доступ 2364

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensorflow_core \ python \ eager \ function.py в _maybe_define_function (self, args, kwargs) 2701 2702
self._function_cache.missed.add (call_context_key) -> 2703 graph_function = self._create_graph_function ( kwargs) 2704 self._function_cache.primary [cache_key] = graph_function 2705 возвращать graph_function, args, kwargs

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ensororflow_core \ python \ eager \ function.py в _create_graph_function (self, args, kwargs, override_flat_arg_shapes) 2591 arg_names = arg_names,
2592 override_flat_arg_shapes = override_flat_arg_shapes, -> 2593 захват_был_значения выходит из

~ \ anaconda3 \ envs \ tf \ lib \ site- пакеты \ensorflow_core \ python \ framework \ func_graph.py в func_graph_from_py_fun c (имя, python_fun c, аргументы, kwargs, подпись, func_graph, автограф, autograph_options, add_control_dependencies, arg_names, найденный_обезопасный_обладатель c) 977 -> 978 func_outputs = python_fun c (* func_args, ** func_kwargs) 979 980 # инвариант: func_outputs содержит только тензоры, составные тензоры,

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorsflow_core \ python \ eager \ def_function.py in wrapped_fn (* args, ** kwds) 437 # wrapped позволяет AutoGraph обмениваться в преобразованной функции. Мы даем 438 # функцию слабую ссылку на себя, чтобы избежать цикла ссылок. -> 439 return weak_wrapped_fn (). wrapped (* args, ** kwds) 440 weak_wrapped_fn = weakref.ref (wrapped_fn) 441

~ \ anaconda3 \ envs \ tf \ lib \ site-packages \ tenorsflow_core \ python \ save_model \ function_deserialization.py в восстановленном_функции_ теле (* args, ** kwargs) 260 .format (_pretty_format_positional (args), kwargs, 261 лен (сохраненная_функция.concrete_functions), -> 262 "\ n \ n ".join (signature_description))) 263 264 concrete_function_objects = []

ValueError: Не удалось найти подходящую функцию для вызова, загруженную из

SavedModel. Получено: Позиционные аргументы (всего 1): * Тензор («входы: 0», форма = (Нет, 256, 256, 3), dtype = uint8) Аргументы ключевого слова: {}

Ожидается, что эти аргументы будут совпадать один из следующих 1 вариантов:

Вариант 1: Позиционные аргументы (всего 1): * TensorSpe c (shape = (None, 256, 256, 3), dtype = tf.float32, имя = 'входы') Аргументы ключевого слова: {}

1 Ответ

0 голосов
/ 01 мая 2020

Я думаю, что загруженная модель, ожидающая входную подпись (shape и dtype), отличается от предоставленной входной подписи. В частности, загруженная модель ожидает тензор потока dtype (tf.float32), но вы указали float32. Можете ли вы попробовать заменить

x = x.astype('float32') # dtype of x is numpy float32 which is not what the loaded model expecting here

на

x = tf.cast(x,tf.float32) # this makes x to be of correct signature

Пожалуйста, проверьте ниже, что произошло в каждой строке

x=prepare('img.jpg')     # x is numpy array
# whenever you run a tensorflow operation on a numpy array, it becomes a tensor and vice versa
x = tf.keras.utils.normalize(x, axis=1)  # x becomes a tensor
x = x.astype('float32')  # dtype of x changed back to numpy float32
print(x.dtype)           # prints correctly float32 (notice that its not tf.float32)
prediction = model.predict([x]) # this throws an error as the underlying concrete function expects input of tf.float32 signature

Я не вижу никаких других проблем. Я предлагаю вам прочитать о concrete function и input signature.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...