本文共 3022 字,大约阅读时间需要 10 分钟。
目录:
- 1 简介
- 2 什么是机器学习
- 3 创建第一个机器学习模型
- 4 训练神经网络
- 5 模型预测
1 简介
请考虑以下问题:您正在构建一个健身跟踪活动识别系统。您可以访问一个人的移动速度,并尝试基于速度推测其活动:
if(speed<4){ status=WALKING; }
将此扩展为另一个条件运行:
if(speed<4){ status=WALKING; } else { status=RUNNING; }
在最终条件下,您可以类似的检测骑行:
if(speed<4){ status=WALKING; } else if(speed<12){ status=RUNNING; } else { status=BIKING; }
那么,考虑像高尔夫这样的活动会发生什么?突然间,如何创建规则确定活动就不那么明显了。
// Now what?
编写一个能够为我们打高尔夫活动的程序(用代码表示)是非常困难的。所以你会怎么样?这就是机器学习用来解决问题的地方!
2 什么是机器学习?
在上一节中,我们遇到了一个问题,在尝试确定用户的高尔夫活动时,在编写代码时遇到困难。
考虑以传统方式构建应用程序,如下图所示:
我们用编程语言表达规则,这些操作对数据其作用,程序提供答案。
而通过机器学习检测此活动状态的过程非常相似,但输入与输出不同:
我们不是试图定义规则并用编程语言来表达它们,而是提供答案(通常称为标签)以及数据,机器将推断出确定答案与数据之间的关系的规则。例如,我们的活动检测场景内在机器学习环境中可能如下图所示:
3 创建第一个机器学习模型
考虑以下几组数字,你能看出它们之间的关系吗?
当你看到它们时,你看你会注意到,当你从左向右阅读时,X值增加1,相应的Y值增加3,得到Y=3X+1的关系。现在让我们来看看如何通过训练神经网络来完成上述任务。
导包
import tensorflow as tfimport numpy as npfrom tensorflow import keras
定义和编译神经网络
# 定义神经网络model = tf.keras.Sequential([ keras.layers.Dense(units=1,input_shape=[1])])
WARNING:tensorflow:From D:\software\Anaconda\anaconda\lib\site-packages\tensorflow\python\ops\resource_variable_ops.py:435: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.Instructions for updating:Colocations handled automatically by placer.
#编译神经网络 定义 优化器 和 损失函数model.compile(optimizer="sgd",loss="mean_squared_error")
WARNING:tensorflow:From D:\software\Anaconda\anaconda\lib\site-packages\tensorflow\python\keras\utils\losses_utils.py:170: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.Instructions for updating:Use tf.cast instead.
提供数据
xs = np.array([-1.0,0.0,1.0,2.0,3.0,4.0],dtype=float)ys = np.array([-2.0,1.0,4.0,7.0,10.0,13.0],dtype=float)
4 训练神经网络
model.fit(xs,ys,epochs=50)
WARNING:tensorflow:From D:\software\Anaconda\anaconda\lib\site-packages\tensorflow\python\ops\math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.Instructions for updating:Use tf.cast instead.Epoch 1/506/6 [==============================] - 0s 18ms/sample - loss: 26.1844Epoch 2/506/6 [==============================] - 0s 412us/sample - loss: 20.6133Epoch 3/506/6 [==============================] - 0s 328us/sample - loss: 16.2300Epoch 4/506/6 [==============================] - 0s 246us/sample - loss: 12.7812Epoch 5/506/6 [==============================] - 0s 248us/sample - loss: 10.0675Epoch 45/506/6 [==============================] - 0s 414us/sample - loss: 0.0271Epoch 46/506/6 [==============================] - 0s 331us/sample - loss: 0.0264Epoch 47/506/6 [==============================] - 0s 331us/sample - loss: 0.0258Epoch 48/506/6 [==============================] - 0s 248us/sample - loss: 0.0252Epoch 49/506/6 [==============================] - 0s 248us/sample - loss: 0.0246Epoch 50/506/6 [==============================] - 0s 165us/sample - loss: 0.0240
5.使用模型
现在,我们已经有了一个经过训练的模型来表示X和Y的关系,现在可以使用这个model.predict
方法来找出以前未知的数。例如,如果X=10,那么Y=?
print(model.predict([10.0]))
[[31.397823]]
转载地址:https://codingchaozhang.blog.csdn.net/article/details/90717918 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!