gpt4 book ai didi

python - 当我给它图像时,我的 keras 模型会给出随机预测

转载 作者:行者123 更新时间:2023-11-30 09:15:21 25 4
gpt4 key购买 nike

我正在制作一个模型来对图像进行分类,当我使用 model.predict 为其提供图像时,它会给出随机输出。 model.evaluate_generator 的准确度为 0.9530581049962875,损失为 0.2506975952616229。图像尺寸为 64x64,具有三个 channel

我尝试使用其他数据集,得到了相同的结果。

我想知道我的模型架构是否存在任何问题。

model = Sequential()
model.add(Conv2D(128, (3, 3), input_shape=(64, 64, 3), activation='relu'))
model.add(BatchNormalization())
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(BatchNormalization())
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(BatchNormalization())
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(BatchNormalization())
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(Flatten())
model.add(Dropout(.50))
model.add(Dense(500, activation='relu'))
model.add(Dropout(.50))
model.add(Dense(100, activation='relu'))
model.add(Dropout(.50))
model.add(Dense(9, activation='softmax'))

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

编辑:我的训练代码和用于预测的代码

batch_size = 60
pic_size = 64

train_datagen = ImageDataGenerator()

test_datagen = ImageDataGenerator()

train_generator = train_datagen.flow_from_directory(
'/DATASET/Training_Samples',
target_size=(64, 64),
color_mode='rgb',
batch_size=batch_size,
class_mode="categorical",
shuffle=True)

validation_generator = test_datagen.flow_from_directory(
'/DATASET/Test_Samples',
target_size=(64, 64),
color_mode='rgb',
batch_size=batch_size,
class_mode="categorical",
shuffle=False)



history = model.fit_generator(generator=train_generator,
steps_per_epoch=train_generator.n//train_generator.batch_size,
epochs=150,
validation_data=validation_generator,
validation_steps = validation_generator.n//validation_generator.batch_size)

from skimage.transform import resize
import matplotlib.pyplot as plt
%matplotlib inline

my_image = plt.imread('image.jpg')
my_image_resized = resize(my_image, (64,64,3))

import numpy as np
probabilities = model.predict(np.array( [my_image_resized,] ))

print(probabilities)

最佳答案

我想到的一些建议是:

  • 尝试尽可能减少 MaxPooling 层的数量。在您的情况下,使用最温和的最大池 (2, 2) 会消除 75% 的数据!

  • 降低辍学概率。如果在每次训练迭代时关闭一半的节点,那么让它们学习东西会有些困难(我知道有人会不同意,这是我根据我的 ML 经验得出的个人观点)。我一般设置在0.1-0.25范围内。

  • 通常,您不需要所有这些过滤器。 CNN 通常在初始层使用较少数量的滤波器,随着层数的增加而增加。通过这种方式,您只能从嘈杂的像素数据中提取相关信息,并让网络稍后详细阐述更复杂的表示。我通常从 32 开始,然后升至 64、128。请考虑这是我个人的经验法则(它总是返回良好的结果,但其他架构也可能很棒)。

除此之外,您还可以尝试经典的正则化技术,例如:L1-L2 正则化或不同的权重初始化。

另外,请分享训练代码。问题可能就在那里,而不是在模型的架构中。

关于python - 当我给它图像时,我的 keras 模型会给出随机预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com