【发布时间】: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