我在构建一个多类别CNN模型时,无法编译模型,因为出现了损失形状错误。
- 输出层和标签都应该有正确的形状;标签应为(m, 1, 3),而最终的全连接层应包含3个神经元,并使用softmax激活函数
- 损失函数为’categorical_crossentropy’
导致以下错误信息:
Traceback (most recent call last): File "train.py", line 70, in <module> model.fit(X, y, batch_size=batch_size, epochs=10, verbose=2, use_multiprocessing=True) File "/home/554282/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 819, in fit use_multiprocessing=use_multiprocessing) File "/home/554282/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py", line 235, in fit use_multiprocessing=use_multiprocessing) File "/home/554282/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py", line 593, in _process_training_inputs use_multiprocessing=use_multiprocessing) File "/home/554282/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py", line 646, in _process_inputs x, y, sample_weight=sample_weights) File "/home/554282/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 2383, in _standardize_user_data batch_size=batch_size) File "/home/554282/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 2489, in _standardize_tensors y, self._feed_loss_fns, feed_output_shapes) File "/home/554282/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_utils.py", line 810, in check_loss_and_target_compatibility ' while using as loss `' + loss_name + '`. 'ValueError: A target array with shape (8, 1, 3) was passed for an output of shape (None, 3) while using as loss `categorical_crossentropy`. This loss expects targets to have the same shape as the output.
回答:
custom_one_hot
函数返回一个[M, 1, 3]
数组。你应该将其重塑为[M, 3]
,因为CNN的输出是[M, 3]
。这里的M是批量大小。