我一直在研究疟疾数据集,这是我的数据集处理和准备代码:
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)。我是否以错误的方式加载数据集?如何消除此错误?
在我看来,您的 train_dataset 缺少批量维度。你批处理了train_dataset吗? 如果不对数据集应用 .batch() 方法,例如:
train_dataset = train_dataset.batch(batch-size)