DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率

举报
一个处女座的程序猿 发表于 2021/03/28 02:43:20 2021/03/28
【摘要】 DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率 导读 上一篇文章,比较了三种算法实现对手写数字识别,其中,SVM和神经网络算法表现非常好准确率都在90%以上,本文章进一步探讨对神经网络算法优化,进一步提高准确率,通过测试发现,准确率提高了很多。 相关文章CNN:人工智能之神经网络算法进阶优化,六...

DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率

导读
上一篇文章,比较了三种算法实现对手写数字识别,其中,SVM和神经网络算法表现非常好准确率都在90%以上,本文章进一步探讨对神经网络算法优化,进一步提高准确率,通过测试发现,准确率提高了很多。

相关文章
CNN:人工智能之神经网络算法进阶优化,六种不同优化算法实现手写数字识别逐步提高,应用案例自动驾驶之捕捉并识别周围车牌号

 

 

思路设计

首先,改变之一:

先在初始化权重的部分,采取一种更为好的随机初始化方法,我们依旧保持正态分布的均值不变,只对标准差进行改动,

初始化权重改变前,


  
  1. def large_weight_initializer(self):
  2. self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
  3. self.weights = [np.random.randn(y, x) for x, y in zip(self.sizes[:-1], self.sizes[1:])]

初始化权重改变后,


  
  1. def default_weight_initializer(self):
  2. self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
  3. self.weights = [np.random.randn(y, x)/np.sqrt(x) for x, y in zip(self.sizes[:-1], self.sizes[1:])]

改变之二:

为了减少Overfitting,降低数据局部噪音影响,将原先的目标函数由 quadratic cost 改为 cross-enrtopy cost


  
  1. class CrossEntropyCost(object):
  2. def fn(a, y):
  3. return np.sum(np.nan_to_num(-y*np.log(a)-(1-y)*np.log(1-a)))
  4. def delta(z, a, y):
  5. return (a-y)

改变之三:

将S函数改为Softmax函数


  
  1. class SoftmaxLayer(object):
  2. def __init__(self, n_in, n_out, p_dropout=0.0):
  3. self.n_in = n_in
  4. self.n_out = n_out
  5. self.p_dropout = p_dropout
  6. self.w = theano.shared(
  7. np.zeros((n_in, n_out), dtype=theano.config.floatX),
  8. name='w', borrow=True)
  9. self.b = theano.shared(
  10. np.zeros((n_out,), dtype=theano.config.floatX),
  11. name='b', borrow=True)
  12. self.params = [self.w, self.b]
  13. def set_inpt(self, inpt, inpt_dropout, mini_batch_size):
  14. self.inpt = inpt.reshape((mini_batch_size, self.n_in))
  15. self.output = softmax((1-self.p_dropout)*T.dot(self.inpt, self.w) + self.b)
  16. self.y_out = T.argmax(self.output, axis=1)
  17. self.inpt_dropout = dropout_layer(
  18. inpt_dropout.reshape((mini_batch_size, self.n_in)), self.p_dropout)
  19. self.output_dropout = softmax(T.dot(self.inpt_dropout, self.w) + self.b)
  20. def cost(self, net):
  21. "Return the log-likelihood cost."
  22. return -T.mean(T.log(self.output_dropout)[T.arange(net.y.shape[0]), net.y])
  23. def accuracy(self, y):
  24. "Return the accuracy for the mini-batch."
  25. return T.mean(T.eq(y, self.y_out))

文章来源: yunyaniu.blog.csdn.net,作者:一个处女座的程序猿,版权归原作者所有,如需转载,请联系作者。

原文链接:yunyaniu.blog.csdn.net/article/details/79084672

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。