我正在从本地目录train
中编写一个简单的CNN模型来分类猫和狗图片。
下面是我到目前为止编写的代码:
import numpy as np
import cv2 as cv
import tensorflow.keras as keras
import os
from sklearn.preprocessing import LabelEncoder
from tensorflow.keras.utils import to_categorical
from tensorflow.keras import layers , models
from sklearn.model_selection import train_test_split
images_vector =[]
images_label =[]
fileNames = os.listdir('train')
for i , f_name in enumerate(fileNames) :
image = cv.imread('train/' + f_name)
image = cv.resize(image , (50,50))
image = image/255.0
image = image.flatten()
images_vector.append(image)
images_label.append(f_name.split('.')[0])
if i%10000 == 0 :
print(f" [INFO ] : {i} images are processed...")
labelEncoder = LabelEncoder()
images_label = labelEncoder.fit_transform(images_label)
images_label = to_categorical(images_label)
images_label
X_train , X_test , y_train , y_test =
train_test_split(images_vector ,images_label , random_state=40 , train_size=0.8)
print('X_train: ' + str(X_train.shape))
print('Y_train: ' + str(y_train.shape))
print('X_test: ' + str(X_test.shape))
print('Y_test: ' + str(y_test.shape))
现在运行以下代码构建模型后:
net = models.Sequential([
layers.Conv2D(32 , (3,3) , activation='relu' , input_shape = (1,7500)) ,
layers.MaxPooling2D(2,2),
layers.Conv2D(64 , (3,3) , activation='relu'),
layers.Flatten(),
layers.Dense(2 , activation='softmax')
])
net.summary()
我得到这个错误:
ValueError: Input 0 of layer "conv2d_96" is incompatible with the layer: expected min_ndim=4, found ndim=3. Full shape received: (None, 1, 7500)
我搜索了很多来解决这个问题,并尝试和测试不同的形状,但找不到解决方案
有人能帮我吗?
1条答案
按热度按时间qeeaahzv1#
Conv2D图层应该用在最终带有一些颜色通道的二维图像上。要使其工作,请尝试以下操作:
1.要保留2D图像结构,请删除:
1.将第一个Conv2D层的输入形状更改为: