【发布时间】:2021-06-21 19:09:53
【问题描述】:
我有一个图像数据集,其结构如下:
money_photo/
100/
50/
10/
1/
每个目录内有 240 张照片,对应钞票值(100、50、10 和 1)。
我正在使用 keras.preprocessing.image_dataset_from_directory 拆分 train 和 val 数据集,如下所示:
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)
找到属于 4 个类的 960 个文件。 使用 768 文件进行训练。
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)
找到属于 4 个类的 960 个文件。 使用 192 个文件进行验证。
每张图片都被缩放到180x180像素并对其进行归一化(0..255像素值在0之间有对应的值)
模型定义如下:
num_classes = 4
model = tf.keras.Sequential([
layers.experimental.preprocessing.Rescaling(1./255),
layers.Conv2D(32, 3, activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(32, 3, activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(32, 3, activation='relu'),
layers.MaxPooling2D(),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(num_classes),
layers.Activation('softmax')
])
训练后我有以下结果:
时代 3/3 24/24 [===============================] - 10 秒 425 毫秒/步 - 损失:0.3214 - 准确度:0.8866 - val_loss : 0.2449 - val_accuracy: 0.9115
我使用模型进行预测的方式:
import tensorflow as tf
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 = transform.resize(np_image, (180, 180, 3))
np_image = np.expand_dims(np_image, axis=0)
return np_image
image = load('abd.jpg')
prediction = model.predict(image)
print(class_names[np.argmax(prediction)])
为什么我总是得到相同的预测值?
【问题讨论】:
标签: tensorflow machine-learning keras deep-learning image-classification