【问题标题】:How to change CNN model when reducing image size减小图像大小时如何更改 CNN 模型
【发布时间】:2021-09-09 12:57:57
【问题描述】:

我用 120*120 大小的数据集图像构建了一个用于缺陷检测的 CNN 模型。

现在我将图像更改为 60*60 大小,并且我想为这些图像运行我的 CNN 模型。为此,我只是将我的input_shape(120,120,3) 更改为(60,60,3),但是当我运行我的CNN 模型时,准确率降低了很多!

这是我的 CNN 模型:

from keras.models import Sequential

model = Sequential()
model.add(tf.keras.layers.Conv2D(input_shape = (60, 60, 3), filters=16, kernel_size=(3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Conv2D(filters=32, kernel_size=(3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2)))
model.add(tf.keras.layers.GlobalAveragePooling2D())
model.add(tf.keras.layers.Dense(3, activation='softmax'))

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

print(model.summary())
history = model.fit(
    train_data,
    validation_data=val_data,
    epochs=100,
    callbacks=[
        tf.keras.callbacks.EarlyStopping(
            monitor='val_loss',
            patience=3,
            restore_best_weights=True
        )
    ]
)

另外,在我运行我的 CNN 并获得低准确率后,我想测试一张图像,但我出错了。 这是我的测试部分:

import os

from PIL import Image
import numpy as np
from skimage import transform

def load(filename):
    np_image = Image.open(filename)
    np_image = np.array(np_image).astype('float32')/255
    np_image = np.expand_dims(np_image, axis=0)
    return np_image

folder_path = './New folder/29.png'
image = load(folder_path)
pred = model.predict(image)
pred.tolist()[0]

我得到的错误是:

ValueError: Input 0 of layer sequential_2 is incompatible with the layer: : expected min_ndim=4, found ndim=3. Full shape received: (None, 60, 60)

【问题讨论】:

  • 这个/New folder/29.png 图像的形状是什么?可以直接到这个文件夹手动查找吗?
  • 您是否尝试过将reshape 图像转换为 (1,1,60,60) ?此外,对于精度损失,您能否在视觉上确保缺陷在较低像素数的情况下仍然可见?
  • 29.png的大小为60*60
  • 如何将图像重塑为 (1,1,60,60)?
  • 我不应该在我的 cnn 模型中更改任何其他内容以兼容图像尺寸 60*60 吗?

标签: python tensorflow keras deep-learning conv-neural-network


【解决方案1】:

试试这个:

def load(filename):
    np_image = Image.open(filename)
    np_image = np.array(np_image).astype('float32')/255
    np_image = transform.resize(np_image, (60, 60, 3))
    np_image = np.expand_dims(np_image, axis=0)
    return np_image

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 2012-08-09
    • 2014-10-31
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    相关资源
    最近更新 更多