摘要:这是一个系列的文章,讲述了一个工程师从零自学深度学习的过程。希望能和大家100小时入门深度学习,然后慢慢积累10000小时成为大师。这篇实战第一个深度学习demo,了解下机器学习项目的套路。
1.机器学习真的有那么难么?
很多小伙伴觉得机器学习很难入门,以为需要学习很多高深的算法,要会很多高深的数学知识。
其实,事实并非如此,至少对入门级别的不是这样。
我觉得机器学习工程师分成两类,一类是应用型,而另一类是研究型。
而我们绝大部分是应用型,说白点只要会用,然后跑出来的结果能满足工作需要就行啦。
为什么说机器学习入门很简单?因为真的就像1+1=2一样,我们要用某些算法的时候,这些算法并不需要我们写,
我们只需要调包就行了,俗称‘调包侠’。
人家牛逼的人早都把算法写好了,直接拿来用就行了。咱们真正要做的无非是根据自己的项目,数据分析情况等调调参数而已。
而事实上大多数机器学习工程师的工作内容是:关注比较实用的算法,然后调包用开源人家包装好的算法,然后调参数,看看结果咋样,不断优化的过程。当然,等你入门了,想去更高的地方看看,自然会去看看这些算法的原理,这过程其实和普通的java工程师没啥区别。一般的java工程师也是用用框架,而那些比较有经验的无非也是足够熟练了之后,回到底层去看源码。其实过程是一样的。
区别就在于,现在人工智能很火,需求很旺盛,待遇很不错。
2.机器学习工程师一般的步骤
Step1:数据采集;
Step2:数据预处理;
Step3:模型训练;
Step4:模型验证;
Step5:模型优化。
3.有个简单但是全面的深度学习的例子要不要一起来学习下
再申明下,如果机器学习环境没搞定的老铁们可以按照我的第一篇零基础从20K到25K的深度学习之路--0 搞定机器学习环境
安装机器学习环境
[mw_shl_code=python,true]
#导入相关的包
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[0], -1) / 255. # normalize
X_test = X_test.reshape(X_test.shape[0], -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 根据训练结果,来优化模型。
# 这里其实是不断迭代的过程。在深度学习过程中,我们使用什么样的损失函数,优化器或者激活函数都会影响,
# 还有使用多少层神经网络等等。
# 而资深的机器学习工程师因为积累了很多经验,或者对这些底层的原理很了解,所以对什么模型会更加了解使用什么参数
# 这其实就是个不断积累的过程。
[/mw_shl_code]
结尾:这个demo虽然比较简单,但是麻雀虽小五脏俱全,包含了很多神经网络的东西。但是因为我们使用keras框架,它把很多工作都帮我们做了,所以让我们觉得短短几行代码就能实现模型。
各位老铁们,回帖有奖励:
回帖百度云再免费分享一套深度学习教程。珍藏版
啦啦啦啦啦