繁体   English   中英

检查输入时的Keras值错误:预期density_27_input具有5个维度,但数组的形状为(32,150,150,3)

[英]Keras Value Error when checking input: expected dense_27_input to have 5 dimensions, but got array with shape (32, 150, 150, 3)

我最近开始机器学习,并开始构建二进制分类模型。 但是,我在运行代码时遇到错误:

import numpy as np
import keras
import matplotlib.pyplot as plt
import cv2
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Model
from keras.layers import Input, Dense
base_dir = ("/content/drive/apagdata")
train_dir = os.path.join(base_dir,"train")
test_dir = os.path.join(base_dir,"test")
# This returns a tensor
inputs = Input(shape=(784,))

# a layer instance is callable on a tensor, and returns a tensor
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)

# This creates a model that includes
# the Input layer and three Dense layers
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop',
          loss='binary_crossentropy',
          metrics=['accuracy'])
train_datagen = ImageDataGenerator(
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    "/content/drive/apagdata/train",
    target_size=(150,150),
    batch_size=32,
    class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
    "/content/drive/apagdata/test",
    target_size=(150,150),
    batch_size=32,
    class_mode='binary')

model.fit_generator(
    train_generator,
    steps_per_epoch=2000,
    epochs=50,
    validation_data=validation_generator,
    validation_steps=800)
model.save_weights('first_try.h5')

我收到以下错误:

ValueError: Error when checking input: expected input_3 to have 2 dimensions, but got an array with shape (32, 150, 150, 3)

似乎模型的输入是形状的图像(150, 150, 3)因为已指定target_size=(150,150)在图像生成器)。 因此,模型的输入形状必须相同:

inputs = Input(shape=(150, 150, 3))

可能由于您只在模型中使用了Dense层,因此您需要在输入层之后立即添加一个Flatten层以使图像变平:

x = Flatten()(inputs)

不要忘记将x传递到下一个Dense层。

此外,请注意,您提到要构建二进制分类器,并且已在图像生成器中正确设置了class_mode='binary' 但是,模型中的最后一层必须是S型分类器,而不是softmax分类器:

predictions = Dense(1, activation='sigmoid')(x)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM