为啥我的序列模型的准确率停留在 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?的主要内容,如果未能解决你的问题,请参考以下文章