zoukankan      html  css  js  c++  java
  • TensorFlow 基础学习

    学习目的

    了解机器学习的一些基础功能,一些基础用法,然后在我们的实际工作中创造出更多的火花。

    环境准备

    环境话有很多,我在学习的这个慕课的实验室、谷歌实验室。还有腾讯实验室都可以用来做,也非常方便,本地环境搭建也是非常的方便,但是在训练数据多的时候,那就非常的慢。

    这些实验室提供强大的算力,最主要的还是免费。

    实例

    定义神经网络的框架叫做keras,它将神经元网络模型定义为一组Sequential层。Keras库也需要导入。

    然后我们导入一个名为numpy的库,它可以帮助我们方便快捷地将数据表示为列表

    在编译神经网络时,我们必须指定2个函数:一个损失函数和一个优化器。

    如果我们读过很多有关机器学习的数学理论,这里通常是用到它们的地方。但Tensorflow将这些数学很好地封装在函数中供我们使用。那么这个程序里到底发生了什么?我们来看一下:

    我们知道,在上面的函数中,两组数字之间的关系其实是y=2x-1。当计算机试图 "学习 "这个映射关系时,它猜测......也许y=10x+10。LOSS(损失)函数将猜测的答案与已知的正确答案进行比较,并衡量偏差程度。然后,计算机使用OPTIMIZER函数再做一次猜测,努力使损失最小化。这时,也许计算机会得出一些像y=5x+5这样的结果,虽然还是很糟糕,但更接近正确的结果(即损失更低)。训练的时候,将依据指定的EPOCHS次数,重复这样的猜测与优化过程。

    下面的程序中可以看到如何设置用 "平均平方误差 "来计算损失,并使用 "同步梯度下降 "来优化神经元网络。我们并不需要理解背后的这些数学,但我们可以看到它们的成效!

    随着经验的积累,我们将了解如何选择相应的损失和优化函数,以适应不同的情况。

    在调用model.fit函数时,神经网络“学习”X和Y之间的关系。在这个过程中,它将一次又一次地完成上面所说的循环,即做一个猜测,衡量它有多好或多坏(又名损失),使用Opimizer进行再一次猜测,如此往复。训练将根据指定的遍数(epochs)执行此操作。当运行此代码时,将在输出结果中看到损失(loss)。

    from tensorflow import keras
    import numpy as np
    
    ## 构建模型
    ## layer就是一层神经元, shape就是一个输入值, 接下来我们将创建一个最简单的神经网络。它只有1层,且这层只有1个神经元,它的输入只是1个数值
    model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
    
    ## 优化和损失函数
    model.compile(optimizer='sgd', loss='mean_squared_error')
    
    ## 准备训练数据
    xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float) # tf擅长处理float数据
    ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)
    
    
    ## 训练模型
    model.fit(xs, ys, epochs=500) # y是标签,eposhs是训练次数,这里是100次
    

    到这里为止模型已经训练好了,它学习了X和Y之间的关系。现在,我们可以使用model.predict方法来让它计算未知X对应的Y。例如,如果X=10,我们认为Y会是什么?在运行下面代码之前,请猜一猜:

    model.predict([10.0])
    ## 18.980xxx 接近于19
    

    我们可能会想到19,对吧?但最后输出比19低了一丁点儿。这是为什么呢?因为神经网络处理的是概率,所以根据我们向神经元网络提供的数据,它计算出X和y之间的关系是y=2x-1的概率非常高。但由于只有6个数据点,无法完全确定x和y的函数关系。因此,10对应的y值非常接近19,但不一定正好是19。当使用神经网络时,会看到这种模式反复出现。我们几乎总是在处理概率,而非确定的数值。并经常需要通过进一步编写程序,来找出概率所对应的结果,特别当处理分类问题时。

    如果是训练 1500 次的话,结果更准确。


    作者:叉叉敌
    博客:https://chasays.github.io/
    微信公众号:Chasays, 欢迎关注一起吹牛逼,也可以加个人微信号「xxd_0225」互吹。
    本博客大多为学习笔记或读书笔记,本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。

  • 相关阅读:
    安装 kubenetes-dashboard
    使用kubeadm在Centos7上部署kubernetes1.21.1
    批量重命名
    is_valid重写。返回数据格式统一
    django-序列化参数为空报错问题
    单文件日志测试
    文本、目录 空间清理问题
    数仓数据
    滑动验证码(无原图片处理)
    鸟哥私房菜基础篇
  • 原文地址:https://www.cnblogs.com/ievjai/p/14414845.html
Copyright © 2011-2022 走看看