基本上,我用手写数字开始分类,效果很好。数字已经在csv文件(强度编号)中准备好了。
这是我对第一个数据集(数字)所做的操作: https://www.youtube.com/watch?v=aZsZrkIgan0
数据集(数字): https://www.kaggle.com/c/digit-recognizer/data
现在,我正在尝试对猫和狗的图像进行类似的处理。我利用从上一个视频中获得的知识来对猫和狗进行分类,从而获得较高的准确性。
这是我受启发的视频(猫和狗),在这里我使用了上一部视频的教训: https://www.youtube.com/watch?v=j-3vuBynnOE
数据集(猫和狗): https://www.kaggle.com/c/dogs-vs-cats
虽然我使用DecisionTreeClassifier的数字数据集得分超过85%,而使用KNeighborsClassifier的数字得分超过95%,但我对它是狗还是猫的得分却不到50%(这确实是不好)。为什么会这样呢?它与图像的外观有关吗? (数字=白色背景和黑色字体颜色;猫和狗的图像更复杂) 还是在重塑/拟合数据时犯了一个大错误?
也:我将KNeighborsClassifier用于dogs vs cats数据集,虽然花了很多时间,但最后还是执行了。为什么在处理多张图像时,该算法的速度这么慢?
在此先感谢您的帮助。
DATADIR = r"C:\Users\XY\Documents\Python Scripts\Image Rec\Cats vs. Dogs\train"
CATEGORIES = ['Dog', 'Cat']
IMG_SIZE = 80
training_data = []
training_label = []
#creating training and test data
def create_training_data():
for category in CATEGORIES:
path = os.path.join(DATADIR, category)
class_num = CATEGORIES.index(category)
for img in os.listdir(path):
try:
if len(img) == 12: #9000 Cats und 9000 Dogs
img_array = cv2.resize(cv2.imread(os.path.join(path, img), cv2.IMREAD_GRAYSCALE), (IMG_SIZE, IMG_SIZE))
training_data.append(img_array)
training_label.append(class_num)
except Exception as e:
pass
create_training_data()
print(array(training_data).shape) #(18000, 80, 80)
esting_data = []
testing_label = []
def create_testing_data():
for category in CATEGORIES:
path = os.path.join(DATADIR, category)
class_num = CATEGORIES.index(category)
for img in os.listdir(path):
try:
if len(img) < 12: #1000 Cats und 1000 Dogs
img_array = cv2.resize(cv2.imread(os.path.join(path, img), cv2.IMREAD_GRAYSCALE), (IMG_SIZE, IMG_SIZE))
testing_data.append(img_array)
testing_label.append(class_num)
except Exception as e:
pass
create_testing_data()
print(array(testing_data).shape) #(2000, 80, 80)
#Using DecisionTreeClassifier
clf = DecisionTreeClassifier()
clf.fit(array(training_data).reshape(-1, IMG_SIZE*IMG_SIZE), array(training_label).T)
p = clf.predict(array(testing_data).reshape(-1, IMG_SIZE*IMG_SIZE))
count = 0
for i in arange(0, len(array(testing_data).reshape(-1, IMG_SIZE*IMG_SIZE))):
count+=1 if p[i] == training_label[i] else 0
#print("Prediction:", p[i], "- Actual value:", training_label[i])
print("Accuracy = " + str(round((count/len(array(testing_data).reshape(-1, IMG_SIZE*IMG_SIZE)))*100, 2)) + " %") #Accuracy 48.3 %
#Using KNeighborsClassifier
clf = KNeighborsClassifier()
clf.fit(array(training_data).reshape(-1, IMG_SIZE*IMG_SIZE), array(training_label).T)
p = clf.predict(array(testing_data).reshape(-1, IMG_SIZE*IMG_SIZE))
count = 0
for i in arange(0, len(array(testing_data).reshape(-1, IMG_SIZE*IMG_SIZE))):
count+=1 if p[i] == training_label[i] else 0
#print("Prediction:", p[i], "- Actual value:", training_label[i])
print("Accuracy = " + str(round((count/len(array(testing_data).reshape(-1, IMG_SIZE*IMG_SIZE)))*100, 2)) + " %") #Accuracy 34.75 %
training_data形状:(18000,80,80) test_data形状:(2000、80、80) 准确度48.3%(DecisionTreeClassifier) 准确度34.75%(KNeighborsClassifier)
答案 0 :(得分:0)
1-检查数据集验证 2-做预处理步骤 3-测试另一个图像 4-使用其他算法 5-使用其他指标 6-分析其他人的结果