Размерность в Tensorflow / keras и sparse_categorical_crossentropy - PullRequest
0 голосов
/ 01 марта 2020

Я не могу понять, как использовать набор данных tenorflow в качестве входных данных для моей модели. У меня есть X как (n_sample, max_sentence_size) и ay как (n_sample), но я не могу сопоставить измерение, я не уверен, что тензорный поток делает внутренне.

Ниже вы можете найти воспроизводимый пример с пустой матрицей, но мои данные не пустые, это целочисленное представление текста.

X_train = np.zeros((16, 6760))
y_train = np.zeros((16))

train = tf.data.Dataset.from_tensor_slices((X_train, y_train))

# Prepare for tensorflow
BUFFER_SIZE = 10000
BATCH_SIZE = 64
VOCAB_SIZE = 5354

train = train.shuffle(BUFFER_SIZE)#.batch(BATCH_SIZE)



# Select index of interest in text
import tensorflow as tf

model = tf.keras.Sequential([
    tf.keras.layers.Embedding(input_dim=VOCAB_SIZE, output_dim=64, mask_zero=False),
    tf.keras.layers.Bidirectional(tf.keras.layers.GRU(64)),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(VOCAB_SIZE, activation='softmax'),
])

model.compile(loss="sparse_categorical_crossentropy",
              # loss=tf.keras.losses.MeanAbsoluteError(),
              optimizer=tf.keras.optimizers.Adam(1e-4),
              metrics=['sparse_categorical_accuracy'])


history = model.fit(train, epochs=3,
                   )
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-74-3a160a5713dd> in <module>
----> 1 history = model.fit(train, epochs=3,
      2                     # validation_data=test,
      3                     # validation_steps=30
      4                    )

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py

в соответствии (self, x, y, batch_size, epochs, verbose, обратные вызовы, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_fteps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, validation_steps, valid_per_eps), шага max_queue_size, рабочие, use_multiprocessing, ** kwargs) 817 max_queue_size = max_queue_size, 818 рабочих = рабочих, -> 819 use_multiprocessing = use_multiprocessing) 820 821 def оценивают (self,

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py

в соответствии (self, model) , x, y, batch_size, эпохи, подробности, обратные вызовы, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, рабочие, use_multiproysext_ext_ext_ext_Text_Text_Text_Text_Text_Text_Text_Text_Text_Text. = training_context, -> 342 total_epochs = эпохи) 343 cbks.make_logs (model, epoch_logs, training_result, ModeKeys.TRAIN) 344

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py

в run_one_epoch (модель, итератор, выполнение_функции, размер_катайта_базы_данных_базы_данных_разработки_базы данных , 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?

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2_utils.py

в function_function (input_fn) 96 # numpy переводит тензоры в значения в режиме Eager. 97 возвращают nest.map_structure (_non_none_constant_value, ---> 98 распределенная_функция (input_fn)) 99 100 возвращают execute_function

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/eager/def_function.py

в вызов (self, * args, ** kwds) 566 xla_context.Exit () 567 else: -> 568 result = self._call (* args, ** kwds) 569 570, если tracing_count == self._get_tracing_count ():

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/eager/def_function.py

в _call (self , * args, ** kwds) 613 # Это первый вызов call , поэтому мы должны инициализировать. 614 инициализаторов = [] -> 615 self._initialize (args, kwds, add_initializers_to = initializers) 616 окончательно: 617 # На данный момент мы знаем, что инициализация завершена (или меньше

/opt/conda/lib/python3.6/site-packages/tensorflow_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_internal_garbage_collected (

pylint: отключить = защищенный доступ

* функция 10________ *) args, ** kwargs) 2387 args, kwargs = нет, None 2388 с self._lock: -> 2389 graph_function, _, _ = self._maybe_define_function (args, kwargs) 2390 return graph_function 2391
/opt/conda/lib/python3.6/site-packages/tensorflow_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 графа_функция_function_graph_ 27_function_achef_функция_ возвращаемая_каталог__элемента_элемента_элемента_элемента_функции_function_ache_key_f_0 , kwargs

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py

в _create_graph_function ( Я, арги, карги, override_flat_arg_shapes) 2591 arg_names = arg_names, 2592 override_flat_arg_shapes = override_flat_arg_shapes, -> 2593 capture_by_value = self._capture_by_value), 2594 self. * в func_graph_from_py_fun c (имя, python_fun c, args, kwargs, подпись, func_graph, автограф, autograph_options, add_control_dependencies, arg_names, op_return_value, коллекции, capture_by_value, преобразованный_релф_символы) 976 * 977) = python_fun c (* func_args, ** func_kwargs) 979 980 # инвариант: func_outputs содержит только Tensors, CompositeTensors,

/opt/conda/lib/python3.6/site-packages/tensorflow_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

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2_utils.py

в распределенной функции (input_iterator) 83 аргумента = _prepare_feed_values ​​(модель, input_iterator, режим, стратегия). 87 all_outputs = dist_utils.unwrap_output_dict (

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/distribute/distribute_lib.py

в экспериментальном_руне_v2 (self, fn, args, kwargs) 761 fn = autograph.tf_convert (fn, ag_ctx.control_status_ctx (), 762 convert_by_sef) 763 возвращает self._extended.call_for_each_replica (fn, args = args, kwargs = kwargs) 764 765 defсинхронизировать (self, redu_op, значение, ось):

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/distribute/distribute_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):

1063 *

в _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 вернуть fn (* args, kwargs) 2165 2166 def _reduce_to (self, redu_op, value, destination):

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/autograph/impl/api.py

в оболочке (* args, ** kwargs) 290 def wrapper (* args, ** kwargs): 291 с ag_ctx .ControlStatusCtx (статус = ag_ctx.Status.D ISABLED): -> 292 вернуть веселье c (* args, ** kwargs) 293 294, если inspect.isfunction (fun c) или inspect.ismethod (fun c):

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2_utils.py

в train_on_batch (модель, x, y, sample_weight, class_weight, reset_metrics, standalone) 431 год, 432 sample_weights = sample_weights, -> 433 output_loss_metrics = model._output_loss_metrics) 434 435 если reset_metrics:

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_eager.py

в train_on_batch (модель, входы, цели, sample_weights, output_loss_metrics) 310 sample_weights = sample_weights, 311 training = True, -> 312 output_loss_metrics = output_loss_metrics)) 313, если не isinstance (outs, список): 314 outs = [outs]

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_eager.py

в _process_single_batch (модель, входы, цели, output_loss_metrics, sample_weights, обучение) 251 output_loss_metrics = output_loss_metrics, 252 sample_weights = sample_weights, -> 253 обучение = обучение)) 254, если total_loss равен None: 255 повысить ValueError («Модель не может быть запущена» *

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_eager.py

в _model_loss (модель, входные данные, цели, output_loss_metrics, sample_weights, training) 165 166 если hasattr (loss_fn, 'сокращение'): -> 167 per_sample_losses = loss_fn.call (цели [i], ауты [i]) 168 weighted_losses = loss_utils.compute_weighted_loss (169 per_sample_losses,

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/losses.py

в вызове (self, y_true, y_pred) 219 y_pred, y_true = tf_losses_util.squeeze_or_expand_dimensions (220 y_pred, y_true) -> 221 вернуть self.fn (y_true, y_pred, ** self._fn2kiggs): self._fn2kiggs) :

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/losses.py

в sparse_categorical_crossentropy (y_true, y_pred, from_logits, ось) 976 def sparse_categorical_crossentropy (y_true, y_pred, from_logits = False, axis = -1): 977 возвратный винт_связи_пародная_связь_пародная_связка , y_pred, from_logits = from_logits, axis = axis) 979 980

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/backend.py

in sparse_categorical_crossentropy (target, output, from_logits, axis) 4571 w ih get_graph (). as_default (): 4572 res = nn.sparse_softmax_cross_entropy_with_logits_v2 (-> 4573 меток = target, logits = output) 4574 остальное: 4575 res = nn.sparse_softmax_cross_entropy_with_logits_v2_w____________ * , logits, name) 3535 "" "3536 return sparse_softmax_cross_entropy_with_logits (-> 3537 ярлыков = метки, logits = logits, name = name) 3538 3539

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/ops/nn_ops.py

в sparse_softmax_cross_entropy_with_logits (_sentinel, метки), 3451 "должно соответствовать форме логитов, за исключением последнего измерения" 3452 "(получено% s)."% (Label_static_shape, -> 3453 logits.get_shape ())) 3454 # Проверьте, не требуется ли изменение формы. 3455 if logits.get_shape (). Ndims == 2:

ValueError: Shape mismatch: The shape of labels (received (1,)) should equal the shape of logits except for the last dimension

(получено (6760, 5354)).

Ответы [ 2 ]

1 голос
/ 02 марта 2020

это работает для меня в Tensorflow 2.0.

import numpy as np

# Prepare for tensorflow
BUFFER_SIZE = 10000
BATCH_SIZE = 64
VOCAB_SIZE = 5354


X_train = np.zeros((16,6760))
y_train = np.zeros((16,1))  # This is changed
train = tf.data.Dataset.from_tensor_slices((X_train, y_train))

train = train.shuffle(BUFFER_SIZE).batch(8) # This is changed

# Select index of interest in text

model = tf.keras.Sequential([
    tf.keras.layers.Embedding(input_dim=VOCAB_SIZE, output_dim=64,input_length= 6760, mask_zero=False),
    tf.keras.layers.Bidirectional(tf.keras.layers.GRU(64)),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(VOCAB_SIZE, activation='softmax'),
])

print(model.summary())

model.compile(loss="sparse_categorical_crossentropy",
              # loss=tf.keras.losses.MeanAbsoluteError(),
              optimizer=tf.keras.optimizers.Adam(1e-4),
              metrics=['sparse_categorical_accuracy'])

history = model.fit(train, epochs=3)
0 голосов
/ 09 марта 2020

Для тех, у кого была та же проблема, я не сразу понял изменение raje sh, проблема заключалась в отсутствии размера партии.

Я заменил:

train = train.shuffle(BUFFER_SIZE)  #.batch(BATCH_SIZE)

с (раскомментировал "пакет"):

train = train.shuffle(BUFFER_SIZE).batch(BATCH_SIZE)

и все заработало.

...