[英]InvalidArgumentError: Matrix size-incompatible: In[0]: [32,21], In[1]: [128,1]
the following is my code could please help me以下是我的代码可以请帮助我
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)
i am getting the following error InvalidArgumentError: Matrix size-incompatible: In[0]: [32,21], In[1]: [128,1] [[node MatMul (defined at C:\\Users\\THUMMAGO\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\tensorflow_core\\python\\framework\\ops.py:1751) ]] [Op:__inference_distributed_function_5318]我收到以下错误 InvalidArgumentError: Matrix size-incompatible: In[0]: [32,21], In[1]: [128,1] [[node MatMul (defined at C:\\Users\\THUMMAGO\\AppData\\ Local\\Continuum\\anaconda3\\lib\\site-packages\\tensorflow_core\\python\\framework\\ops.py:1751)]] [Op:__inference_distributed_function_5318]
Function call stack: distributed_function函数调用栈:distributed_function
I replicated this issue by using binary class dataset.我使用二进制类数据集复制了这个问题。
For solution, You may need to provide either correct activation function and loss function in your code as below:对于解决方案,您可能需要在代码中提供正确的激活函数和损失函数,如下所示:
cnn.add(tf.keras.layers.Dense(units=1, activation='sigmoid')) #for binary classes
cnn.compile(optimizer='adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
or define the units=no_of_classes
in final layer of model and choose the appropriate activation function and loss function to implement the code.或者在模型的最后一层定义
units=no_of_classes
,并选择合适的激活函数和损失函数来实现代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.