ValueError:层“sequential_1”的输入0与该层不兼容:预期形状=(无,224,224,3),发现形状=(224,224,3)

问题描述 投票:0回答:1

我一直在研究疟疾数据集,这是我的数据集处理和准备代码:

数据加载

def splits(dataset, TRAIN_RATIO, VAL_RATIO, TEST_RATIO):

DATASET_SIZE = len(dataset)

train_dataset = dataset.take(int(TRAIN_RATIO\*DATASET_SIZE))

val_test_dataset = dataset.skip(int(TRAIN_RATIO*DATASET_SIZE))
val_dataset = val_test_dataset.take(int(VAL_RATIO*DATASET_SIZE))

test_dataset = val_test_dataset.skip(int(VAL_RATIO\*DATASET_SIZE))

return train_dataset, val_dataset, test_dataset



## data preprocessing


TRAIN_RATIO = 0.8
VAL_RATIO = 0.1
TEST_RATIO = 0.1

train_dataset, val_dataset, test_dataset = splits(dataset\[0\], TRAIN_RATIO, VAL_RATIO, TEST_RATIO)

IMG_SIZE = 224

def resize_rescale(image, label):
return tf.image.resize(image, (IMG_SIZE, IMG_SIZE))/255.0, label

train_dataset = train_dataset.map(resize_rescale)

模型训练代码

model = tf.keras.Sequential([
    InputLayer(input_shape = (IMG_SIZE, IMG_SIZE, 3)),

    Conv2D(filters = 6, kernel_size = 5, strides = 1, padding = 'valid', activation = 'sigmoid'),
    MaxPool2D(pool_size=2, strides=2),
    
    Conv2D(filters = 16, kernel_size = 5, strides = 1, padding = 'valid', activation = 'sigmoid'),
    MaxPool2D(pool_size=2, strides=2),
    
    Flatten(),
    
    Dense(100, activation = 'relu'),
    Dense(10, activation = 'relu'),
    Dense(1, activation = 'relu'),

])

model.summary()

这是模型摘要

Model: "sequential_1"

_________________________________________________________________

Layer (type)                Output Shape              Param #
=

conv2d_2 (Conv2D)           (None, 220, 220, 6)       456

max_pooling2d_2 (MaxPooling  (None, 110, 110, 6)      0  
2D)

conv2d_3 (Conv2D)           (None, 106, 106, 16)      2416

max_pooling2d_3 (MaxPooling  (None, 53, 53, 16)       0  
2D)

flatten_1 (Flatten)         (None, 44944)             0

dense_3 (Dense)             (None, 100)               4494500

dense_4 (Dense)             (None, 10)                1010

dense_5 (Dense)             (None, 1)                 11

=================================================================
Total params: 4,498,393
Trainable params: 4,498,393
Non-trainable params: 0

_________________________________________________________________

model.compile(optimizer = Adam(learning_rate = 0.1), loss = BinaryCrossentropy(),metrics = RootMeanSquaredError() )

history = model.fit(train_dataset, epochs = 100, verbose = 1)

模型中存在与输入层尺寸相关的错误。代码块最后一行的 model.fit 正在生成错误:

ValueError:层“sequential_1”的输入 0 与该层不兼容:预期形状=(None, 224, 224, 3),发现形状=(224, 224, 3)。我是否以错误的方式加载数据集?如何消除此错误?

computer-vision conv-neural-network tensorflow2.0 tensorflow-datasets
1个回答
0
投票

在我看来,您的 train_dataset 缺少批量维度。你批处理了train_dataset吗? 如果不对数据集应用 .batch() 方法,例如:

train_dataset = train_dataset.batch(batch-size)

© www.soinside.com 2019 - 2024. All rights reserved.