零基础从20K到25K的深度学习之路--2 实战第一个深度学习模型
本帖最后由 abc50319 于 2018-8-6 22:56 编辑问题导读
1.机器学习真的有那么难么?1.机器学习一般包含哪些步骤?2.有个简单但是全面的深度学习的例子要不要一起学一下?
上一篇零基础从20K到25K的深度学习之路--1为啥要学机器学习.http://www.aboutyun.com/forum.php?mod=viewthread&tid=24803
实战第一个深度学习模型摘要:这是一个系列的文章,讲述了一个工程师从零自学深度学习的过程。希望能和大家100小时入门深度学习,然后慢慢积累10000小时成为大师。这篇实战第一个深度学习demo,了解下机器学习项目的套路。
1.机器学习真的有那么难么?
很多小伙伴觉得机器学习很难入门,以为需要学习很多高深的算法,要会很多高深的数学知识。
其实,事实并非如此,至少对入门级别的不是这样。
我觉得机器学习工程师分成两类,一类是应用型,而另一类是研究型。
而我们绝大部分是应用型,说白点只要会用,然后跑出来的结果能满足工作需要就行啦。
为什么说机器学习入门很简单?因为真的就像1+1=2一样,我们要用某些算法的时候,这些算法并不需要我们写,
我们只需要调包就行了,俗称‘调包侠’。
人家牛逼的人早都把算法写好了,直接拿来用就行了。咱们真正要做的无非是根据自己的项目,数据分析情况等调调参数而已。
而事实上大多数机器学习工程师的工作内容是:关注比较实用的算法,然后调包用开源人家包装好的算法,然后调参数,看看结果咋样,不断优化的过程。当然,等你入门了,想去更高的地方看看,自然会去看看这些算法的原理,这过程其实和普通的java工程师没啥区别。一般的java工程师也是用用框架,而那些比较有经验的无非也是足够熟练了之后,回到底层去看源码。其实过程是一样的。
区别就在于,现在人工智能很火,需求很旺盛,待遇很不错。
2.机器学习工程师一般的步骤 Step1:数据采集; Step2:数据预处理; Step3:模型训练; Step4:模型验证; Step5:模型优化。
3.有个简单但是全面的深度学习的例子要不要一起来学习下再申明下,如果机器学习环境没搞定的老铁们可以按照我的第一篇零基础从20K到25K的深度学习之路--0 搞定机器学习环境 安装机器学习环境http://www.aboutyun.com/data/attachment/forum/201807/09/134209oi4nr7zvn3ln7b73.jpeg
#导入相关的包
import numpy as np
np.random.seed(1337) # for reproducibility
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import RMSprop
# step1,2 数据采集和数据预处理。下载mnist的数据集 ,默认数据已经预处理好了。
# 这里来说一下这个数据集是啥样的。这里面每条数据是一张一张的手写图片,就像上面图片那样。
# 每张图片大小是28*28 pixel
# 我们的目的是先拿一批带标签的数据进行模型训练。
# 这里会把数据分成两类
# 第一类是训练数据。这部分数据总体来说是这样的格式 lebel,28*28的像素点
# 说的通俗点,我们会告诉模型,某些28*28的点会对应某个标签。经过一定量数据的训练,
# 我们的模型会有一定的‘识别能力’。
# 第二类是测试数据。这部分数据和前面的训练数据格式略有差别,它只有28*28的像素点,却没有标签。
# 我们的目的就是用我们训练好的模型去测试能否识别出这些测试数据对应的标签。
# 这里还要跟大家说一下,其实在真正的工作中,我们会用numpy和pandas对数据进行处理,转换成我们需要的模型数据。
# 这块数据的预处理工作很重要,我会专门出一篇文章讲一下怎么使用numpy和pandas。
# 这里大家可能没有看到使用pandas,其实是因为做实验,这个mnist.load_data()已经将咱们需要的数据处理好了。
# 让我们更加专注于模型
(X_train, y_train), (X_test, y_test) = mnist.load_data()
#数据标准化处理
X_train = X_train.reshape(X_train.shape, -1) / 255. # normalize
X_test = X_test.reshape(X_test.shape, -1) / 255. # normalize
# 因为我们的手写图片是0-9,有十个分类,所以num_classes值为10
y_train = np_utils.to_categorical(y_train, num_classes=10)
y_test = np_utils.to_categorical(y_test, num_classes=10)
#input_dim值为784,因为数据是28*28的像素点,我们将二维数组转化成一维,就变成了1*784的一维数组
# Activation是激活函数,可以使用relu或者softmax,大家有空可以在网上查一下激活函数的概念
# 我们构建了一个模型 名叫model,因为keras是基于TensorFlow等的高级app
# 所以这里简单几行代码就帮我们构建了一个模型,我们只需要传参数就行了
# 其他的事情交给keras就行了
# 咱们刚入门的机器学习工程师基本目的是会用模型,然后一步一步花时间去了解这些参数能带来什么效果,不管是好的还是不好的
model = Sequential([
Dense(32,input_dim=784),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
# 这代表优化器,我们使用什么样的优化器
rmsprop = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)
# 模型编译
# loss 代表损失函数
model.compile(optimizer=rmsprop,loss='categorical_crossentropy',metrics=['accuracy'])
print('Training ------------')
# step3 开始训练模型
# 将训练数据‘喂’给模型,让他去训练吧
# 这里要注意下这个batch_size
# 由于某些时候我们训练集数据很大,虽然最好每次将全部数据用来训练
# 但是当模型很大的时候,每次跑全部数据会花费很多时间,并不是合理的
# 所以这里我们会每轮训练选取部分数据进行训练,用随机一批数据代替全量训练数据
# 这样的话训练效果不错,还节约了时间
model.fit(X_train, y_train, epochs=2, batch_size=32)
print('\nTesting ------------')
# step4 验证模型
# 模型训练好了,怎么看这个模型效果好不好?
# 当然得验证了。我们用另外一批没有动过的干净的数据来验证。
# 记住,训练的数据和测试的数据一定要是分来的,不要将训练的数据的一部分来测试
# 那肯定不行。必须用未知的数据来验证,因为我们的模型本来就是用来检测未知的数据的
# 这样才更加符合实际 如果用过训练的数据,可能会出现过拟合现象,可能在这里测试效果非常好,
# 但是一出去,模型立马就怂了。
loss, accuracy = model.evaluate(X_test, y_test)
print('test loss: ', loss)
print('test accuracy: ', accuracy)
# step5 根据训练结果,来优化模型。
# 这里其实是不断迭代的过程。在深度学习过程中,我们使用什么样的损失函数,优化器或者激活函数都会影响,
# 还有使用多少层神经网络等等。
# 而资深的机器学习工程师因为积累了很多经验,或者对这些底层的原理很了解,所以对什么模型会更加了解使用什么参数
# 这其实就是个不断积累的过程。
结尾:这个demo虽然比较简单,但是麻雀虽小五脏俱全,包含了很多神经网络的东西。但是因为我们使用keras框架,它把很多工作都帮我们做了,所以让我们觉得短短几行代码就能实现模型。
各位老铁们,回帖有奖励:
回帖百度云再免费分享一套深度学习教程。珍藏版
啦啦啦啦啦**** Hidden Message *****
我有个问题想向你请教一下,能加个微信吗?探讨一下? 机器学习工程师一般的步骤 Step1:数据采集; Step2:数据预处理; Step3:模型训练; Step4:模型验证; Step5:模型优化。
机器学习工程师和算法工程师,是不是一个职位?楼主说的上面的几个步骤中,第一步和第二部数据的采集和数据的预处理。这两个步骤,能不能搞一个统一的模型?然后根据搜集到的原始数据,经过清洗转换,最后落实到一个统计的模型上面。这样后续的算法用到的数据,就可以直接从这个模型中去取它们想要的数据。
公司最近想搞一个这样的模型出来,因为客户不同,有顺风的,有永辉的,戴姆勒的等等。目前公司是为这些客户提供算法产品。他们提供给我们一些数据,然后算法的同事们根据这些数据,去做一个算法模型,不断的训练他们设计的这个模型,最后用训练好的模型跑出来一个报告,把这个报告交付给客户。这个开发的过程,就像楼主上面提到的5个步骤。但是公司考虑每次一个客户的项目来了,都得做上面的5步骤,所以公司在想能不能将上吗的1-2两步,搞一个通用的物理模型出来。这样我们算法的部门同事就可以专注于算法模型的设计,而不用考虑前面的这样些数据的准备,预处理等工作。而整个项目等70%的时间大多是在前面这两步中。不知道楼主有没有这个感觉。30%的时间是再设计算法模型,训练算法模型。
研一学生前来报道
o°cboy 发表于 2018-8-5 08:56
我有个问题想向你请教一下,能加个微信吗?探讨一下?
可以的,直接在群里私信我下就可以了 javaanddonet 发表于 2018-8-5 10:07
机器学习工程师一般的步骤 Step1:数据采集; Step2:数据预处理; Step3:模型训练; Step4:模型 ...
其他公司我不知道,但是我们公司一般数据是存储在hive数据仓库里面的,你需要的相关数据都可以从hive里面去取。但是数据预处理是很特殊的,一般情况下是需要对hive里面的源数据进行一定的加工预处理,这个不能做成统一的模型,
因为你根本无法确定你每个模型需要什么样的数据,所以很多时候一个项目里面会花很多时间进行数据预处理的工作。
感谢楼主分享,不知道是不是有基于spark ml的呢,感谢 感觉很厉害, 楼主威武
666666666666666666