Получение ValueError: формы (64, 4) и (64, 10) несовместимы при попытке подогнать мою модель

Я пытаюсь написать свою собственную нейронную сеть для обнаружения определенного жеста руки, следуя коду, найденному в https://www.kaggle.com/benenharrington/hand-gesture-recognition-database-with-cnn/execution.

model.add(layers.Conv2D(32, (5, 5), strides=(2, 2), activation='relu', input_shape=(200, 200,1))) 
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu')) 
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

Когда я пытаюсь подобрать свою модель, используя: model.fit(x_train, y_train, epochs=10, batch_size=64, verbose=1, validation_data=(x_validate, y_validate))

Я получаю следующую ошибку:

  File ".\My_data_model.py", line 73, in <module>
    model.fit(x_train, y_train, epochs=10, batch_size=2, verbose=1, validation_data=(x_validate, y_validate))
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\engine\training.py", line 108, in _method_wrapper
    return method(self, *args, **kwargs)
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1098, in fit
    tmp_logs = train_function(iterator)
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\eager\def_function.py", line 780, in __call__
    result = self._call(*args, **kwds)
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\eager\def_function.py", line 823, in _call
    self._initialize(args, kwds, add_initializers_to=initializers)
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\eager\def_function.py", line 696, in _initialize
    self._stateful_fn._get_concrete_function_internal_garbage_collected(  # pylint: disable=protected-access
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\eager\function.py", line 2855, in _get_concrete_function_internal_garbage_collected
    graph_function, _, _ = self._maybe_define_function(args, kwargs)
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\eager\function.py", line 3213, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\eager\function.py", line 3065, in _create_graph_function
    func_graph_module.func_graph_from_py_func(
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\framework\func_graph.py", line 986, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\eager\def_function.py", line 600, in wrapped_fn
    return weak_wrapped_fn().__wrapped__(*args, **kwds)
  File "D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\framework\func_graph.py", line 973, in wrapper
    raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:

    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\engine\training.py:806 train_function  *
        return step_function(self, iterator)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\engine\training.py:796 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1211 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2585 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2945 _call_for_each_replica
        return fn(*args, **kwargs)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\engine\training.py:789 run_step  **
        outputs = model.train_step(data)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\engine\training.py:748 train_step
        loss = self.compiled_loss(
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\engine\compile_utils.py:204 __call__
        loss_value = loss_obj(y_t, y_p, sample_weight=sw)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\losses.py:149 __call__
        losses = ag_call(y_true, y_pred)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\losses.py:253 call  **
        return ag_fn(y_true, y_pred, **self._fn_kwargs)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper
        return target(*args, **kwargs)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\losses.py:1535 categorical_crossentropy
        return K.categorical_crossentropy(y_true, y_pred, from_logits=from_logits)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper
        return target(*args, **kwargs)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\keras\backend.py:4687 categorical_crossentropy
        target.shape.assert_is_compatible_with(output.shape)
    D:\anaconda3\envs\tf-gpu-cuda8\lib\site-packages\tensorflow\python\framework\tensor_shape.py:1134 assert_is_compatible_with
        raise ValueError("Shapes %s and %s are incompatible" % (self, other))
    ValueError: Shapes (64, 4) and (64, 10) are incompatible

Поэкспериментировав с кодом, я заметил, что число 64 в сообщении об ошибке изменяется вместе со значением размера пакета. Также я использовал набор данных kaggle и смог без проблем запустить код.

Какие-либо предложения?


person Pruthvi Acharya    schedule 02.05.2021    source источник


Ответы (1)


Проблема здесь в выходных метках, вы не указали, какие данные вы использовали, но это связано с количеством меток для вывода.

Это просто исправить, если вы измените с 10 на 4

model.add(layers.Dense(4, activation='softmax')) # Expected label
person Edwin Cheong    schedule 02.05.2021
comment
О, я вас понял, у данных kaggle было 10 возможных выходов, а у меня только 4. В этом так много смысла. - person Pruthvi Acharya; 02.05.2021