当前位置 博文首页 > shelgi的博客:tensorflow2.0---1.tensorflow入门

    shelgi的博客:tensorflow2.0---1.tensorflow入门

    作者:[db:作者] 时间:2021-07-28 08:50

    安装好了tensorflow2.0的环境,从今天开始就想开始慢慢记录一下对2.0的学习。

    现在就开始

    1.首先测试环境是否安装搭建成功

    import tensorflow as tf
    
    print(tf.test.gpu_device_name())
    print(tf.__version__)
    

    在这里插入图片描述
    看到有GPU字样说明tensorflow-gpu环境安装成功,遇到坑可以看我上一篇博客
    对了,如果想在jupyter里面使用自己的虚拟环境的话需要把虚拟环境添加进jupyter,详细的方法可以查看这个链接https://blog.csdn.net/u014665013/article/details/81084604
    成功添加虚拟环境的话打开jupyter会是这样的
    在这里插入图片描述
    想在pycharm使用虚拟环境就在setting里面添加环境,选择anaconda\envs下的虚拟环境就好了(有的文件夹可能是隐藏文件夹,在add里面找不到,要先取消文件夹隐藏属性

    #计算一个样例
    import tensorflow as tf
    
    A = tf.constant([[1, 2], [3, 4]])
    B = tf.constant([[5, 6], [7, 8]])
    C = tf.matmul(A, B)
    
    print(C)
    

    在这里插入图片描述
    介绍一下基本的知识
    1.定义一个随机数
    2.定义一个变量
    3.定义一个矩阵

    # 定义一个随机数(标量)
    random_float = tf.random.uniform(shape=())
    
    # 定义一个有2个元素的零向量
    zero_vector = tf.zeros(shape=(2))
    
    # 定义两个2×2的常量矩阵
    A = tf.constant([[1., 2.], [3., 4.]])
    B = tf.constant([[5., 6.], [7., 8.]])
    

    4.基本的加减乘除

    C=tf.add(A,B)
    D=tf.subtract(A,B)
    E=tf.matmul(A,B)
    F=tf.divide(A,B)
    print("A+B=",C)
    print("A-B=",D)
    print("A*B=",E)
    print("A/B=",F)
    

    在这里插入图片描述

    5.求导
    TensorFlow 提供了强大的 **自动求导机制 **来计算导数。下面就用 tf.GradientTape() 计算函数 y ( x ) = x 2 y(x) = x^2 y(x)=x2 在 x = 3 时的导数:

    x=tf.Variable(initial_value=3.)
    with tf.GradientTape() as tape:
        y=tf.square(x)
    y_grad=tape.gradient(y,x)
    
    print("y=x^2在3处的值为:{}".format(y))
    print("y=x^2在3处的导数值为:{}".format(y_grad))
    

    在这里插入图片描述
    求偏导
    在机器学习中,更加常见的是对多元函数求偏导数,以及对向量或矩阵的求导。这些对于 TensorFlow 也不在话下。以下代码展示了如何使用 tf.GradientTape() 计算函数 L(w, b) = ∥ X w + b ? y ∥ 2 \|Xw + b - y\|^{2} Xw+b?y2在 w = ( 1 , 2 ) T (1, 2)^T (1,2)T, b = 1 时分别对 w, b 的偏导数。其中X = [ 1 2 3 4 ] \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} [13?24?], y = [ 1 2 ] \begin{bmatrix} 1 \\ 2\end{bmatrix} [12?]

    x=tf.constant([[1.,2.],[3.,4.]])
    y=tf.constant([[1.],[2.]])
    w=tf.Variable(initial_value=[[1.],[2.]])
    b=tf.Variable(initial_value=1.)
    
    with tf.GradientTape() as tape:
        L=tf.reduce_sum(tf.square(tf.matmul(x,w)+b-y))
        
    w_grad,b_grad=tape.gradient(L,[w,b])
    print(L.numpy())
    print(w_grad.numpy())
    print(b_grad.numpy())
    

    在这里插入图片描述

    例子:用tensorflow2.0实现一个简单的线性回归

    在这里插入图片描述

    import numpy as np
    
    year=np.array([2013,2014,2015,2016,2017],dtype=np.float32)
    price=np.array([12000,14000,15000,16500,17500],dtype=np.float32)
    
    #归一化
    x=(year-year.min())/(year.max()-year.min())
    Y=(price-price.min())/(price.max()-price.min())
    
    print(x,Y)
    

    在这里插入图片描述
    接下来,我们使用梯度下降方法来求线性模型中两个参数 a 和 b 的值 3。

    回顾机器学习的基础知识,对于多元函数 f(x) 求局部极小值,梯度下降 的过程如下:

    初始化自变量为 x_0 , k=0

    迭代进行下列步骤直到满足收敛条件:

    求函数 f(x) 关于自变量的梯度 ? f ( x k ) \nabla f(x_k) ?f(xk?)

    更新自变量: x k + 1 = x k ? γ ? f ( x k ) x_{k+1} = x_{k} - \gamma \nabla f(x_k) xk+1?=xk?