gpt4 book ai didi

python - Keras 模型(即使在训练期间)仅预测 0

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

我正在尝试训练 keras 图像分类器来预测图像中的杂草 (1) 和草 (0)。然而,无论我尝试构建什么方法/模型,准确性都会被卡住,我的意思是训练准确性就好像它只预测 0 一样。我可以确认这一点,因为当我将标签数组更改为仅包含零时,模型以某种方式声称精度为 1.00,但是当我将标签全部更改为 1 时,模型精度为 0.00。我的所有图像都已缩放并转换为 RGB。代码如下:

def prep_image(filename):
im = cv2.imread(filename, 0)
new_im = cv2.resize(im, (400,530))
arr = np.array(new_im)
arr = np.reshape(arr, (530, 400))
return arr

image_files = [] #contains the file paths of the images
images = [] # contains arrays/images
labels = []
n_classes = 2
def add_image_data(root):
global images
global labels
print("starting")
delim = os.sep

for dirpath, dirs, files in tqdm(os.walk(root)):
for file in [f for f in files if (f.endswith(".jpg"))]:
image_files.append(os.path.join(dirpath, file))

for file in tqdm(image_files):
image_arr = prep_image(file)
images.append(image_arr)
#print("supposed added ", file)
label = file.split(delim)[-2]
if label == "Grass":
label = 0;
else:
label = 1;
labels.append(label)

images = np.array(images)
labels = np.array(labels)

然后我应用 to_categorical(labels) 对它们进行一次性编码型号:

model = Sequential()
model.add(Conv2D(32, kernel_size=3, input_shape=(530, 400, 1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(32, kernel_size=3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(64, kernel_size=3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
#model.add(Dropout(0.5))
model.add(Dense(2)) #or n_clasess
model.add(Activation('softmax'))

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

似乎也没有发生任何学习,损失和准确性似乎在第一个时期之后陷入困境。标签包含这两个类。提前致谢

最佳答案

您查看过您的预测分数吗?如果准确度指标基于 > 0.5 的预测分数,则可能您的所有类(class)实际上都没有获得大于 0.5 的分数。这可能是由于类别不平衡造成的。然后,您可以更改“积极”预测的阈值。

尝试使用 AUC 等指标,或者只是打印出您的预测并检查分数。

根据评论编辑:您是否正确预处理了输入?归一化等。如果您的输入值太大,梯度将无法正常流动。

缺乏标准化将停止梯度流动。这是因为,如果您的值对于所有输入来说太大/太小,您将不会利用激活函数中的非线性。

关于python - Keras 模型(即使在训练期间)仅预测 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55005691/

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