前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谷歌机器学习速成课程系列一

谷歌机器学习速成课程系列一

作者头像
OpenCV学堂
发布2018-07-26 10:42:18
3590
发布2018-07-26 10:42:18
举报

谷歌tensorflow官方推出了免费的机器学习视频课,总计25个课时,支持中英文语言播放、大量练习、实例代码学习,是初学tensorflow与机器学习爱好者必看的良心精品,课程授课的老师都是来自谷歌AI团队与Tensorflow框架的开发团队,可以说是唯一的业界良心免费教程。从本文开始,将推出一系列的文章介绍课程各个章节内容与代码演示部分:在开始之前,请先安装好tensorflow1.7 + python3.6的开发环境,关于开发环境安装可以参考下面的文章:

Windows下TensorFlow安装与代码测试

第一课 机器学习简介

课程主讲是谷歌机器学习技术总监,他主要是介绍他在2001年加入谷歌之后致力于机器学习技术的研究与应用,他很有预见性提出要通过机器学习手段解读数据内隐藏的潜在关系与含义,提到了课程目标是帮助学习者在机器学习道路上顺利前行。软件工程师学习机器学习可以在一下三个方面能力获得提升: 1.提供可缩短编程时间的新工程应用 2.自定义用户产品,基于机器学习算法的程序,迁移能力更强 3.解决以前人工无法判别与识别的问题

另外学习机器学习课程,还可以帮助软件工程师改变思维方式,从数学和软件工程思考方式转换到自然科学的思考方式,像科学家一样思考、愉快的探索其中奥秘。

第二课 框架处理

课程目标有两个

  • 复习机器学习的基本术语
  • 了解机器学习的各种用途

课程老师来自谷歌技术团队,介绍了什么是监督式机器学习,在监督式机器学习中如何创建模型与输入信息,对以前从未见过的数据做出有用的预测。当训练模型时候,会为其提供标签,关于什么标签,解释如下:

标签

是指我们要预测真实事物,以垃圾邮件过滤为例,标签可以是垃圾邮件或者非垃圾邮件等内容,它是我们试图预测的目标,

特征

是我们表示数据的方式,以垃圾邮件过滤为例,特征可以从电子邮件中提取,可以是关键字、收件人、发件人、各种路由或者标题信息等多个维度信息,以及任何可以从电子邮件中提取并提供给机器学习系统的信息。

样本

样本是一份数据,以垃圾邮件过滤为例,它可以是一份邮件,

有标签样本

具有特征信息比如 关键字、路由信息、收发件人等、具有标签信息比如垃圾邮件或者非垃圾邮件等等。

无标签样本

具有特征信息,但是我们不知道它是否是垃圾邮件,需要对其做预测分类

模型

可将样本映射到预测标签,模型有内部参数得到,这些参数通过学习得到。

回归与分类

回归模型可预测连续值。例如,回归模型做出的预测可回答如下问题:

  • 加利福尼亚州一栋房产的价值是多少?
  • 用户点击此广告的概率是多少?

分类模型可预测离散值。例如,分类模型做出的预测可回答如下问题:

  • 某个指定电子邮件是垃圾邮件还是非垃圾邮件?
  • 这是一张狗、猫还是仓鼠图片?

第三课 深入了解机器学习

复杂的模型与数据有很多,研究方法也有很多,但是我们从最简单、最熟悉的方法入手这能帮助我们了解更多复杂的方法,让我们以数据为基础,用第一个小模型练习一下,小型数据集包含房子面积与价格,房子的面积作数据做为X轴、房子的价格是Y轴,我们尝试用线性回归学习,生成一个模型,然后用它根据房子面积来预测价格,阐述了回归问题中损失计算、针对单个样本L2误差,在训练过程中预测值与真实值差距越大,平方误差越大,在训练过程中,误差是整个样本真实值与预测值之间的误差,训练是要减小整体误差,而不是某一个样本的误差。

平方损失:一种常见的损失函数

接下来我们要看的线性回归模型使用的是一种称为平方损失(又称为 L2 损失)的损失函数。单个样本的平方损失如下: =标签跟预测值之间的差异 =(预测值 - 标签(x))^2 = (y - y')^2

均方误差 (MSE)

指的是每个样本的平均平方损失。要计算 MSE,请求出各个样本的所有平方损失之和,然后除以样本数量:

其中:

(x, y) 指的是样本,

其中

x 指的是模型进行预测时使用的特征集(例如,温度、年龄和交配成功率)。

y 指的是样本的标签(例如,每分钟的鸣叫次数)。

prediction(x) 指的是权重和偏差与特征集 结合的函数。

D 指的是包含多个有标签样本(即 (x, y) )的数据集。

N 指的是 D 中的样本数量。

虽然 MSE 常用于机器学习,但它既不是唯一实用的损失函数,也不是适用于所有情形的最佳损失函数。


线性回归 - tensorflow演示代码


import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
# 线性回归模拟

# fetch and feed
node1 = tf.constant(3.0)
node2 = tf.constant(4.0)
node3 = tf.constant(8.0)
add = tf.add(node1, node2)
m1 = tf.multiply(add, node3)

a = tf.placeholder(dtype=tf.float32)
b = tf.placeholder(dtype=tf.float32)
m2 = tf.multiply(a, b)


x_input = np.random.rand(100)
y_input = x_input*0.1+0.2

W = tf.Variable(0.1, dtype=tf.float32)
k = tf.Variable(-0.1, dtype=tf.float32)
y = W*x_input+k
# reduce_sum is bad!!! because iteration is bigger
# loss = tf.reduce_sum(tf.square(y_input - y))
loss = tf.reduce_mean(tf.square(y_input - y))
optimizer = tf.train.GradientDescentOptimizer(0.1)
train = optimizer.minimize(loss)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    result = sess.run([add, m1])
    print(result)
    print(sess.run(m2, feed_dict={a:[1, 2, 3, 4], b:[2, 4, 6, 8]}))
    for i in range(1000):
        sess.run(train)
        if i % 100 == 0:
            print(" step : ", i, sess.run([W, k, loss]))
    curr_W, curr_k, curr_loss = sess.run([W, k, loss])
    print("W : %s, k : %s, loss : %s", curr_W, curr_k, curr_loss)
    plt.plot(x_input, y_input, label="line")
    curr_y = []
    for i in range(len(x_input)):
        curr_y.append(x_input[i]*curr_W+curr_k)
    plt.plot(x_input, curr_y, label="fit-line")
    plt.legend()
    plt.show()

谷歌免费 机器学习视频教程 官方学习地址:https://developers.google.cn/machine-learning/crash-course/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一课 机器学习简介
  • 第二课 框架处理
  • 第三课 深入了解机器学习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档