python神经网络模型调用后预测值不变_我的Keras使用总结(1)——Keras概述与常见问题整理,Python机器学习笔记:利用Keras进行分类预测,Python机器学习笔记:使用Keras进...

今天整理了自己所写的关于Keras的博客,有没发布的,有发布的,但是整体来说是有点乱的。上周有空,认真看了一周Keras的中文文档,稍有心得,整理于此。这里附上Keras官网地址:

下面回顾一下自己以前写的有关Keras的博客:

首先是上面两篇博客,这两篇写出来,其实是整理笔记,单纯的学习一下基础的回归和分类,使用Keras创建一个简单的回归问题的神经网络模型和多类分类的模型。使用了最经典的回归数据波士顿房价数据集和分类数据鸢尾花数据集。创建一个简单的模型进行训练。其重点是学习基础的分类回归思想,顺便使用别人的Keras代码进行实现。

其次是这篇博客,当时学习Keras的时候对序贯模型不懂,就做了一个简单的笔记对此进行整理。主要整理了序贯模型的函数及其参数的意义,包括使用Keras进行模型训练的部分简单的过程,最后整理了Keras官网文档的几个例子。此时也只是对Keras有个大概的了解。

然后上面这篇博客还是学习卷积神经网络,为什么上面这篇博客起这个一个怪异的名字呢,我当时知道自己不太懂,所以我希望自己懂了后回顾一下。而且这篇文章我没有发布,我将其从随笔改为文章,就是说是自己摘抄的笔记,希望懂后,回首一下,也算是做了个交代。

这篇杂文主要是以学习卷积神经网络为主,回顾了典型的CNN,常用的CNN框架,和Keras如何实现CNN等。主要实现了两件事情,一个是使用Keras搭建了一个卷积神经网络,一个是学习了卷积神经网络实现的过程。内容以摘抄为主,但是摘抄的确实是好文,讲解细腻,循序渐进,值得去看。

然后就是这篇博客了,我是先学习的sklearn,然后再学习的tensorflow,Keras。所以对照着sklearn的机器学习流程学习Keras的使用流程。然后对序贯模型和函数模型进行详细学习和对比,最后整理了Keras如何保存模型。相对来说我的思路还是比较清晰了。会使用Keras搭建模型了。

那么说完了这么多,为什么还要写呢?

其实从18年九月开始,自己的机器学习之路就开始了,当时前途一片迷茫,学到哪里算哪里。到19年一月又写了几篇博客,当然后面也写了只是没有发布而已,到现在已经是20年三月了。啰嗦这么多,就是感觉自己走了弯路,让看到博客的人能少走点弯路,而且最主要的是自己整理回顾。

首先说起Keras,都知道它是基于Theano和TensorFlow的深度学习库,所以这里我们先说一说TensorFlow,上面聊过,我是先学习sklearn,再学习的TensorFlow的。通过对比sklearn的训练过程,学习Keras的训练过程。其实大同小异,那么同在哪里,异又在哪里?

上面博客只是简单的学习了一下其两者的机器学习使用流程和区别,这里从根上回顾一下机器学习和深度学习的区别。这里内容我就不写自己的拙见了,直接拿网友现成的东西(https://www.zhihu.com/question/53740695/answer/284428668)

1,机器学习和深度学习的总结

首先我们看sklearn和TensorFlow的区别。 这个问题其实等价于:现在深度学习那么火,那么是否还有必要学习传统的机器学习方法。

理论上来说,深度学习技术也是机器学习的一个组成部分,学习其他传统的机器学习方法对深入理解深度学习技术有很大的帮助,知道模型凸的条件,才能更好的理解神经网络的非凸,知道传统模型的优点,才能更好的理解深度学习并不是万能的,也有很多问题和场景直接使用深度学习方法会遇到瓶颈和问题,需要传统方法来解决。

从实践上来说,深度学习方法一般需要大量的GPU机器,工业界哪怕大公司的GPU资源也是有限的,一般只有深度学习方法效果远好于传统方法并且对业务提升很大的情况下,才会考虑使用深度学习方法,例如语音识别,图像识别等任务现在深度学习方法用的比较多,而NPL领域除了机器翻译以外,其他大部分任务仍然更常使用传统方法,传统方法一般有着更好的可解释性,这对检查调试模型也是非常有帮助的。工业上一般喜欢招能解决问题的人,而不是掌握最火技术的人,因此在了解深度学习技术的同时,学习一下传统的方法是很有好处的。

1.1 Sklearn和TensorFlow的区别

Scikit-learn(Sklearn)的定位是通过机器学习库,而TensorFlow(tf)的定位主要是深度学习库。一个显而易见的不同:tf并未提供sklearn那种强大的特征工程,如维度压缩,特征选择等。

传统机器学习:利用特征工程(feature enginerring),人为对数据进行提炼清洗

深度学习:利用表示学习(representation learning),机器学习模型自身对数据进行提炼

sklearn更倾向于使用者可以自行对数据进行处理,比如选择特征,压缩维度,转换格式,是传统机器学库,而以tf为代表的深度学习库会自动从数据中抽取有效特征,而不需要人为的来做这件事情,因此并未提供类似的功能。

上面这幅图直观的对比了我们提到的两种对于数据的学习方法,传统的机器学习方法主要依赖人工特征处理与提取,而深度学习依赖模型自身去学习数据的表示。

1.2  模型封装的抽象化程度不同,给予使用者自由度不同

sklearn中的模块都是高度抽象化,所有的分类器基本都可以在3~5行内完成,所有的转换器(如scaler和transformer)也有固定的格式,这种抽象化限制了使用者的自由度,但是增加了模型的效率,降低了批量化,标准化的难度。

比如svm分类器:

clf = svm.SVC() # 初始化一个分类器

clf.fit(X_train, y_train) # 训练分类器

y_predict = clf.predict(X_test) # 使用训练好的分类器进行预测

而tf不同,虽然是深度学习库,但是它由很高的自由度。你依然可以使用它做传统机器学习所做的事情,代码是你需要自己实现算法。因此用tf类比sklearn不适合,封装在tf等工具库的Keras更像深度学习界的sklearn。

从自由度来看,tf更高;而从抽象化,封装程度来看,sklearn更高;从易用性角度来看,sklearn更高。

1.3 深度的群体,项目不同

sklearn主要适合中小型的,实用机器学习项目,尤其是那种数据量不大且需要使用者手动对数据进行处理,并选择合适模型的项目,这类项目往往在CPU上就可以完成,对硬件要求低。

tf主要适合已经明确了解需要用深度学习,且数据处理需求不高的项目。这类项目往往数据量较大,且最终需要的精度更高,一般都需要GPU加速运算。对于深度学习做“小样”可以在采样的小数据集上用Keras做快速的实验。

下面我们看一个使用Keras搭建的网络,代码如下:

model = Sequential() # 定义模型

model.add(Dense(units=64, activation='relu', input_dim=100)) # 定义网络结构

model.add(Dense(units=10, activation='softmax')) # 定义网络结构

model.compile(loss='categorical_crossentropy', # 定义loss函数、优化方法、评估标准

optimizer='sgd',

metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5, batch_size=32) # 训练模型

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128) # 评估模型

classes = model.predict(x_test, batch_size=128) # 使用训练好的数据进行预测

不难看出,sklearn和tf还是有很大的区别,虽然sklearn中也有神经网络模块,但是做大型的深度学习是不可能依靠sklearn的。

1.4  sklearn和TensorFlow结合使用

更常见的情况,可以把sklearn和tf,甚至Keras结合起来使用。sklearn肩负基本的数据清理任务,Keras用于对问题进行小规模试验验证想法,而tf用于

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值