
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YEN_CSDN/article/details/79150423
学习彭亮《深度学习进阶:算法与应用》课程
这两个传统分类器程序只是为了和神经网络算法进行预测的精确度进行对比:深度学习-随机梯度下降算法应用-手写数字识别
官方源码:neural-networks-and-deep-learning
根据灰度平均值进行手写数字识别
#coding=utf-8
# @Author: yangenneng
# @Time: 2018-01-24 13:54
# @Abstract:根据灰度平均值对图片进行识别
from collections import defaultdict
import mnist_loader
def main():
# 返回数据集
training_data, validation_data, test_data = mnist_loader.load_data()
# 算出平均灰度值
avgs = avg_darknesses(training_data)
# 验证算对了多少值
num_correct = sum(int(guess_digit(image, avgs) == digit)
for image, digit in zip(test_data[0], test_data[1]))
print "Baseline classifier using average darkness of image."
print "%s of %s values correct." % (num_correct, len(test_data[1]))
# 计算训练集的灰度平均值
def avg_darknesses(training_data):
# 建立字典类型:key为0-9中的一位 value为这张图片对应的平均灰度值
digit_counts = defaultdict(int)
darknesses = defaultdict(float)
for image, digit in zip(training_data[0], training_data[1]):
digit_counts[digit] += 1
darknesses[digit] += sum(image)
avgs = defaultdict(float)
for digit, n in digit_counts.iteritems():
avgs[digit] = darknesses[digit] / n
return avgs
# 输入image图片 和计算好的平均值 返回和这个灰度值最接近的图片来预测这个图片是哪个数字
def guess_digit(image, avgs):
darkness = sum(image)
distances = {k: abs(v-darkness) for k, v in avgs.iteritems()}
return min(distances, key=distances.get)
if __name__ == "__main__":
main()
可见准确率仅为22.25%
支持向量机算法(SVM)进行手写数字识别
#coding=utf-8
# @Author: yangenneng
# @Time: 2018-01-24 14:06
# @Abstract:SVM进行手写数字识别
import mnist_loader
from sklearn import svm
def svm_baseline():
# 加载数据及
training_data, validation_data, test_data = mnist_loader.load_data()
# 分类器
clf = svm.SVC()
# training_data[0]:维度 training_data[1]:分类(0-9中的哪个数字)
clf.fit(training_data[0], training_data[1])
# 对比正确率
predictions = [int(a) for a in clf.predict(test_data[0])]
num_correct = sum(int(a == y) for a, y in zip(predictions, test_data[1]))
print "Baseline classifier using an SVM."
print "%s of %s values correct." % (num_correct, len(test_data[1]))
if __name__ == "__main__":
svm_baseline()
SVM进行图片识别的准确率达到了94.35%,已经非常高了。
但因为我们的神经网络算法只设置了两层,且没有对参数进行调优,所以神经网络算法加深层数和调节参数后,准确率会超过SVM。