遇到“ValueError: Shapes (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会随着batchsize值的变化而变化。我使用了kaggle数据集,并且能够无问题地运行代码。

有什么建议吗?


回答:

这里的问题在于输出标签,你没有说明使用了什么数据,但这是由于输出标签数量的原因

如果你将10改为4,这是一个简单的修复

model.add(layers.Dense(4, activation='softmax')) # 预期标签

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注