tenorflow.python.framework.errors_impl.InvalidArgumentError: Матрица несовместима по размеру: In [0]: [10,3], In [1]: [128,1]

Я новичок в TensorFlow и пытаюсь создать проект на 5-й семестр. Я изучаю CNN, и у меня была эта модель для проблемы классификации двоичных классов в курсе, но когда я пытаюсь использовать ее для задачи классификации нескольких классов, у меня появляется головная боль. Я как бы обнаружил, что проблема в форме ввода, которую я даю, но не могу понять, как ее решить. Я тоже могу ошибаться.

Это мой код:

#Importing the libraries
import tensorflow as tf
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.preprocessing import image
from keras.callbacks import EarlyStopping, ModelCheckpoint

#Preprocessing the training set
train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)
training_set = train_datagen.flow_from_directory('.../Dataset/Train_set',
                                                 target_size = (128, 128),
                                                 batch_size = 32,
                                                 class_mode = 'categorical')

#Preprocessing the test set
test_datagen = ImageDataGenerator(rescale = 1./255)
test_set = test_datagen.flow_from_directory('.../Dataset/Test_set',
                                            target_size = (128, 128),
                                            batch_size = 32,
                                            class_mode = 'categorical')

#Initializing the cnn
cnn = tf.keras.models.Sequential()

#CNN
cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=[128,128,3]))
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2))
cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu'))
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2))
cnn.add(tf.keras.layers.Flatten())
cnn.add(tf.keras.layers.Dense(units=128, activation='relu'))
cnn.add(tf.keras.layers.Dense(units=1, activation='softmax'))

#Compiling the CNN
cnn.compile(optimizer = 'sgd', loss = 'categorical_crossentropy', metrics = ['accuracy'])

#Callbacks
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=200)
mc = ModelCheckpoint('Models_After_Using_Callback/best_model_demo.h5', monitor='val_accuracy', mode='max', verbose=1, save_best_only=True)

#Training the CNN and evaluating on the test set
cnn.fit(x = training_set, validation_data = test_set, epochs = 50, callbacks=[es, mc])

cnn.summary()
cnn.save("Trained Model/Trained_model_1_(128 by 128).h5")

Вот ошибка, которую я получаю:

Traceback (most recent call last):
  File "D:/3-2_Project/Digital Attendence System/Face_Recognition_With_Video/Train_Data_Demo.py", line 45, in <module>
    cnn.fit(x = training_set, validation_data = test_set, epochs = 50, callbacks=[es, mc])
  File "D:\Softwares\Soft (Installed)\PYTHON 3.8\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1100, in fit
    tmp_logs = self.train_function(iterator)
  File "D:\Softwares\Soft (Installed)\PYTHON 3.8\lib\site-packages\tensorflow\python\eager\def_function.py", line 828, in __call__
    result = self._call(*args, **kwds)
  File "D:\Softwares\Soft (Installed)\PYTHON 3.8\lib\site-packages\tensorflow\python\eager\def_function.py", line 888, in _call
    return self._stateless_fn(*args, **kwds)
  File "D:\Softwares\Soft (Installed)\PYTHON 3.8\lib\site-packages\tensorflow\python\eager\function.py", line 2942, in __call__
    return graph_function._call_flat(
  File "D:\Softwares\Soft (Installed)\PYTHON 3.8\lib\site-packages\tensorflow\python\eager\function.py", line 1918, in _call_flat
    return self._build_call_outputs(self._inference_function.call(
  File "D:\Softwares\Soft (Installed)\PYTHON 3.8\lib\site-packages\tensorflow\python\eager\function.py", line 555, in call
    outputs = execute.execute(
  File "D:\Softwares\Soft (Installed)\PYTHON 3.8\lib\site-packages\tensorflow\python\eager\execute.py", line 59, in quick_execute
    tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError:  Matrix size-incompatible: In[0]: [10,3], In[1]: [128,1]
     [[node gradient_tape/sequential/dense_1/MatMul (defined at /3-2_Project/Digital Attendence System/Face_Recognition_With_Video/Train_Data_Demo.py:45) ]] [Op:__inference_train_function_602]

Может ли кто-нибудь сказать мне, что здесь не так с моим кодом?


person samiulsifat    schedule 06.03.2021    source источник
comment
Dense(units=1, activation='softmax'), должно быть Dense(units=num_of_classes, activation='softmax')   -  person Frightera    schedule 06.03.2021
comment
@Frightera, я пропустил это, спасибо, что он работает прямо сейчас.   -  person samiulsifat    schedule 06.03.2021
comment
@Frightera, можете ли вы помочь в этом, пожалуйста, stackoverflow.com/questions/68225332/matrix-size -несовместимо   -  person user    schedule 04.07.2021