keras InvalidArgumentError:基质大小不兼容:在[0]:[32,21],在[1]:[128,1]

osh3o9ms  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(88)

下面是我的代码,请大家帮帮我

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:\Users\THUMMAGO\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow_core\python\framework\ops.py:1751) [Op:__inference_distributed_function_5318]
函数调用堆栈:分布函数

41ik7eoe

41ik7eoe1#

我通过使用二进制类数据集复制了这个问题。
为了解决这个问题,您可能需要在代码中提供正确的激活函数和损失函数,如下所示:

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,并选择合适的激活函数和损失函数来实现代码。

nwlls2ji

nwlls2ji2#

这个问题可能与模型的数据形状和输入形状有关。[0]处的项表示数据形状,[1]处的项表示模型的input_shape。您需要调整输入形状以匹配数据形状。

相关问题