阿狸大傻子 2021-02-26 01:03 采纳率: 0%
浏览 150

用keras做简单的猫狗识别,但是最后有个 I错误,新手求求大家帮忙提提意见

import sys
from matplotlib import pyplot
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Dense
from keras.layers import Flatten
from keras.optimizers import SGD
from keras.preprocessing.image import ImageDataGenerator
import tensorflow as tf
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)

#创建cnn网络模型
def define_cnn_model():
    #使用序列模型
    model=Sequential()
    #卷积层
    model.add(Conv2D(32,(3,3),activation="relu",padding="same",input_shape=(200,200,3)),)
    #最大池化层
    model.add(MaxPooling2D((2,2)),)
    #Flatten层
    model.add(Flatten())
    #全连接层
    model.add(Dense(128,activation="relu"))
    model.add(Dense(1,activation="sigmoid"))

    #编译模型
    opt=SGD(lr=0.001,momentum=0.9)
    model.compile(optimizer=opt,loss='binary_crossentropy',metrics=['accuracy'])
    return model

#from keras.utils import plot_model
#model=define_cnn_model()
#plot_model(model,to_file='cnn_model.png',dpi=100,show_shapes=True,show_layer_names=True)

def train_cnn_model():
    #实例化模型
    model=define_cnn_model()
    #创建图片生成器
    datagen=ImageDataGenerator(rescale=1.0/255.0)
    train_path= "C:\\Users\\lenovo\\Desktop\\trainingdata"
    train_it=datagen.flow_from_directory(
               train_path,
               class_mode='binary',
               batch_size=64,
               target_size=(200,200))
    #训练模型
    model.fit(train_it,
              steps_per_epoch=len(train_it),
              epochs=1,
              verbose=1,
              )
    model.save('cat dog_model.h5')
train_cnn_model()

from keras.models import load_model
#修改模型位置
model_path='cat dog_model.h5'
model=load_model(model_path)

#定义一个函数,从测试文件夹内读取任意一张图片
import os,random
from matplotlib.pyplot import imshow
import numpy as np
from PIL import Image

def read_random_image():
    folder = "C:\\Users\\lenovo\\Desktop\\dogcat\\"
    file_path = folder + random.choice(os.listdir(folder))
    pil_im=Image.open(file_path,'r')
    return pil_im

#预测图片的种类
def get_predict(pil_im,model):
    # 对图片进行缩放
    pil_im = pil_im.resize((200, 200))
    #将格式转化为numpy array格式
    array_im=np.asarray(pil_im)
    #对图片进行预测
    result=model.predict([[array_im]])
    if result[0][0]>0.5:
        print("预测结果是:狗")
    else:
        print("预测结果是:猫")

pil_im=read_random_image()
get_predict(pil_im,model)

 ValueError: Input 0 of layer sequential is incompatible with the layer: : expected min_ndim=4, found ndim=3. Full shape received: (None, 200, 3),这个错误困扰了大半天了,求求大家帮个忙

  • 写回答

2条回答 默认 最新

  • 爱晚乏客游 2021-02-26 10:26
    关注

    报错是指你输入网络的shape和网络的的输入不一样。比如网络只接受单通道的图片,你输入rgb彩色图。看报错你的

    input_shape应该是类似(batch_size,宽度,高度,通道),你却只输入三个,所以报错了

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题