InvalidArgumentError: несовместимый размер матрицы: в [0]: [32,21], В [1]: [128,1]

#python #tensorflow #keras #deep-learning #conv-neural-network

#python #тензорный поток #keras #глубокое обучение #conv-нейронная сеть

Вопрос:

следующий мой код, пожалуйста, может мне помочь

 import tensorflow as tf
from keras.preprocessing.image import ImageDataGenerator
import numpy as np

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

training_set = train_datagen.flow_from_directory(
        'gopi_cnn_training_data',
        target_size=(100, 100),
        batch_size=32)
    

test_datagen = ImageDataGenerator(rescale=1./255)
test_set = test_datagen.flow_from_directory(
        'gopi_cnn_test_data',
        target_size=(100,100),
        batch_size=32)


cnn = tf.keras.models.Sequential()


cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=[100,100,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'))
 
cnn.compile(optimizer='adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])

cnn.fit(x = training_set, validation_data = test_set, epochs = 25) 
  

я получаю следующую ошибку
InvalidArgumentError: несовместимый размер матрицы: в [0]: [32,21], В [1]: [128,1]
[[узел MatMul (определен в C:UsersTHUMMAGOAppDataLocalContinuumanaconda3libsite-packagestensorflow_corepythonframeworkops.py:1751 ) ]] [Op:__вывод_распределенная_функция_5318]

Стек вызовов функций: distributed_function

Ответ №1:

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

Для решения вам может потребоваться предоставить либо правильную функцию активации, либо функцию потери в вашем коде, как показано ниже:

 cnn.add(tf.keras.layers.Dense(units=1, activation='sigmoid')) #for binary classes
cnn.compile(optimizer='adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
  

или определите units=no_of_classes на конечном уровне модели и выберите соответствующую функцию активации и функцию потерь для реализации кода.