为啥我的序列模型的准确率停留在 0.2155?

Posted

技术标签:

【中文标题】为啥我的序列模型的准确率停留在 0.2155?【英文标题】:Why is the accuracy of my Sequential Model stuck at 0.2155?为什么我的序列模型的准确率停留在 0.2155? 【发布时间】:2022-01-09 23:33:45 【问题描述】:

首先,我是机器学习的新手,所以请原谅我缺乏知识。我正在尝试使用顺序模型创建图像分类器,以检测以下项目-

我已经为每一个都准备了数据集,其中每张图像的尺寸为 (200,200),图像总数约为 1200。

问题是,当我训练它时,准确率卡在 0.2155-

我完全不知道我哪里出错了,所以有人可以帮我解决这个问题,并指出我哪里出错了吗?这是完整的代码-

import numpy as np
import keras
import matplotlib.pyplot as plt
import random
import os
import cv2

X_train=[]
y_train=[]
size= 200

#preprocessing 
imagedir= "preprocessed"
pathdir= os.path.join("Images",imagedir)
for image_name in os.listdir("preprocessed/"):

    image_path= os.path.join("preprocessed",image_name)
    image= cv2.imread(image_path)
    X_train.append(image)
    if image_name.startswith("pen"):
        y_train.append(0)
    elif image_name.startswith("spoon"):
        y_train.append(1)
    elif image_name.startswith("ceiling_fan"):
        y_train.append(2)
    elif image_name.startswith("clock"):
        y_train.append(3)
    elif image_name.startswith("paper_airplane"):
        y_train.append(4)
    elif image_name.startswith("tomato"):
        y_train.append(5)
    elif image_name.startswith("banana"):
        y_train.append(6)
    elif image_name.startswith("leaf"):
        y_train.append(7)
    elif image_name.startswith("coin"):
        y_train.append(8)
    elif image_name.startswith("phone"):
        y_train.append(9)

    
X_train= np.array(X_train)
y_train= np.array(y_train)

X_train= X_train/255



test_size= 30

X_train= X_train[0:-test_size]
y_train= y_train[0:-test_size]

X_test= X_train[-test_size:-1]
y_test= y_train[-test_size:-1]

print(X_train.shape, X_test.shape)
print(y_train.shape, y_test.shape)

X_train_array= X_train.reshape(len(X_train), (size**2)*3)
X_test_array= X_test.reshape(len(X_test), (size**2)*3)

print(X_train_array.shape)

model = keras.Sequential([keras.layers.Dense(10, input_shape=((size**2)*3,), activation='sigmoid')])

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

model.fit(X_train_array, y_train, epochs=100)

y_predict_test=model.predict(X_test_array)

y_predict_test_labels=[]

for i in y_predict_test:
    y_predict_test_labels.append(np.argmax(i))

model.save("Model.h5")

谢谢,提前!

【问题讨论】:

编译中的最后一层激活和损失函数 - 看看这个。 我相信你对什么是“顺序”感到困惑。它真的不是一个模型,在你的情况下它实际上什么都不做,你可以删除它,你的代码将是等效的(就像只使用 Dense) 【参考方案1】:

您可以尝试在模型中添加更多密集层以获得更高的准确性,并将最终密集层的激活函数更改为'softmax',因为您的模型中有多个类(num_classes=10)。

model = keras.Sequential([keras.layers.Dense(32, input_shape=((size**2)*3,), activation='relu')
                          keras.layers.Dense(64,  activation='relu')
                          keras.layers.Dense(32,  activation='relu')
                          keras.layers.Dense(10,  activation='softmax')])

【讨论】:

以上是关于为啥我的序列模型的准确率停留在 0.2155?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 ML 模型的准确性很差?

为啥我的模型的准确性会根据它是从泡菜加载还是新训练的而改变?

Keras DNN 预测模型准确率没有提高

我的时间序列预测变压器模型的训练损失和准确度都在下降

为啥模型的准确性会发生变化?

为啥这些模型的某个时期的准确性突然提高