zoukankan      html  css  js  c++  java
  • 认识tensorflow

    深度学习是模仿了生物的神经元的概念,你可以想象用一大堆的神经元通过各种刺激来对外部世界进行感知,从而建立起对外部世界的模型。

    比如给你一个数据对:

    x y
    -1 -3
    0 -1
    1 1
    2 3
    3 5
    4 7

    我们可以使用深度学习通过从数据中学习来了解其中的规律,类似人类的学习,从我们的感知和实践中认识世界。
    我们从直观的方式来看一下这些数据具有什么规律。

    import numpy as np
    import matplotlib.pyplot as plt
    xs = np.array([-1.0, 0, 1, 2, 3, 4], dtype=float)
    ys = np.array([-3, -1, 1, 3, 5, 7], dtype=float)
    
    plt.plot(xs, ys)
    plt.show()
    

    显示的图形为:

    从肉眼上看直观的感觉是线性关系,我们用深度学习来训练一下模型(假设我们不知道这个数据的规律的情况下)

    import tensorflow as tf
    import numpy as np
    import tensorflow.keras as keras
    
    xs = np.array([-1.0, 0, 1, 2, 3, 4], dtype=float)
    ys = np.array([-3, -1, 1, 3, 5, 7], dtype=float)
    
    model = keras.models.Sequential([
        keras.layers.Dense(units=1, input_shape=[1])
    ])
    model.compile(optimizer='sgd', loss='mean_squared_error')
    model.fit(xs, ys, epochs=500)
    print(model.predict([10.0]))
    

    关于深度学习的代码不多,我们一个一个来稍微简单介绍一下。

    model = keras.models.Sequential([
       ...
    ])
    

    keras.models.Sequential() :建立了一个顺序堆叠的模型,就像乐高积木一样,这是一个一层一层顺序堆叠起来的模型,其它估计还有分支一样的模型。
    在这个顺序堆叠的模型中,其中首先加入了一个层(你可以理解为一块乐高积木)为:keras.layers.Dense ,这是一个全连接层,也就是其神经元前面和后面全连接,就像我们大脑中的一个皮层,你可以想象成前面有很多插口线,后面也有很多输出线。而这里我们只定义了一个输入只有一个插口(输入参数为一维),输出也只有一个输出线(输出为一个数值)。
    为何输入只有一维、输出也只有一维呢?
    那是因为我们的数据中输入只有一维的x,输出也只有一维的y。

    在定义好了模型后,可以对这个模型进行编译了,编译也很简单,只要调用model.compile()函数就可以,不过这里需要指定两个参数,这是本程序中相对比较难理解的部分。
    首先指定了一个损失函数loss,损失函数用来确地我们是否学习到了,也就是我们要有一个评判我们是否学到了东西的函数,在深度学习中用损失函数来定义,比如这里用mean_squared_error来定义,也就是均方差,让神经网络的输出值尽量地同期望的输出值接近。
    另一个参数是优化器optimizer。这里使用sgd优化算法,优化器本身就是一个函数,其目的是通过优化算法让损失值尽量地减少。
    keras中有多种优化器,这里使用梯度下降算法来进行优化。

    最后通过model.fit(xs, ys, epochs=500)来进行训练,训练的迭代次数用500次。
    当模型训练完成后,我们就可以用此模型来进行model.predict([10.0])预测。

    通过这样简单的一小段代码就实现了一个深度学习的程序。

  • 相关阅读:
    vim 插件之commentary
    vim-进入插入模式快捷键
    adb logcat 使用
    操作excel脚本练习
    python-openpyxl安装
    python-excel操作之xlrd
    adb-端口被占用解决办法(win)
    打不开微信分享的链接
    在BUG分支下创建分支,开发后合并到bus分支
    css缓存问题
  • 原文地址:https://www.cnblogs.com/dreampursuer/p/13213383.html
Copyright © 2011-2022 走看看